各种音视频协议技术及特点

2023-06-26

IP协议:


网络层协议,主要负责将数据包发送给最终的目标计算机,无状态、不可靠无连接协议

无状态:无状态是指 IP 通信双方是不同步传输数据的状态信息。所有 IP 数据报的发送、传输和接收都是相互独立。

无连接:无连接是指 IP 通信双方都不长久的维持对方的任何信息。上层协议每次发送数据的时候,都需要明确指出对方的 IP 地址。

不可靠:不能保证 IP 数据报准确到达接收端,它只承诺尽最大努力交付。IP 模块一旦检测到数据报发送失败,就通知上层协议,而不会试图重传。




TCP协议:


传输控制协议、面向连接、可靠的基于传输层协议,

(1)基于流的方式;

(2)面向连接;(在通信之前要通过三次握手建立链接)

(3)可靠通信方式;(确保数据不会丢失)

(4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;(拥塞控制)

(5)通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。



UDP协议:


用户数据包协议,无连接不可靠的,面向报文的,没有拥塞控制



HTTP协议:


基于TCP的应用层协议,默认端口80、8080,无状态、无连接

报文请求报文、响应报文

https:在http和tcp新增一层身份验证和数据加密。


RTMP协议:


实时消息传输协议,应用层协议,基于TCP协议,rtmp在传输层简历成功后,还有进行握手、建立rtmpconnection、建立流、播放操作/发送。

RTMP协议传输时会对数据做自己的格式化,这种格式的消息我们称之为RTMP Message实际传输的时候为了更好地实现多路复用、分包和信息的公平性,发送端会把Message划分为带有Message ID的Chunk,每个Chunk可能是一个单独的Message,也可能是Message的一部分,在接受端会根据chunk中包含的data的长度,messageID和message的长度把chunk还原成完整的Message,从而实现信息的收发。


RTP/RTCP协议:


实时传输协议,主要用于音视频传输协议,基于UDP协议,RTCP实时传输控制协议它是辅助 RTP 协议使用的。RTCP 报文有很多种,分别负责不同的功能。常用的报文有发送端报告(SR)、接收端报告(RR)、RTP 反馈报告(RTPFB)等。而每一种报告的有效载荷都是不同的。我们就是通过这些报告在接收端和发送端传递当前统计的 RTP 包的传输情况的。我们使用这些统计信息来做丢包重传,以及预测带宽,rtcp本身不具备丢包崇川、带宽预测。

RTP 不像http和ftp可完整的下载整个影视文件,它是以固定的数据率在网络上发送数据,客户端也是按照这种速度观看影视文件,当影视画面播放过后,就不可以再重复播放,除非重新向服务器端要求数据,里边直接封



RTSP协议:


RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议。RTSP对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,数据的传输通过rtp协议。RTSP的作用相当于流媒体服务器的远程控制。服务器端可以自行选择使用TCP或UDP来传送串流内容该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。它时一种类似与http协议,只不过是有状态的。

RTSP中所有的操作都是通过服务器和客户端的消息应答机制完成的,其中消息包括请求和应答两种,RTSP是对称的协议,客户机和服务器都可以发送和回应请求。RTSP是一个基于文本的协议,它使用UTF -8编码(RFC2279)和ISO10646字符序列,采用RFC882定义的通用消息格式,每个语句行由CRLF结束。RTSP的消息包括请求和应答两类。



HTTP-FLV协议:


而HTTP-FLV 即将流媒体数据封装成 FLV 格式,然后通过 HTTP 协议传输给客户端。

HTTP协议中有个约定:content-length字段,http的body部分的长度服务器回复http请求的时候如果有这个字段,客户端就接收这个长度的数据然后就认为数据传输完成了,如果服务器回复http请求中没有这个字段,客户端就一直接收数据,直到服务器跟客户端的socket连接断开。

http-flv直播就是利用第二个原理,服务器回复客户端请求的时候不加content-length字段,在回复了http内容之后,紧接着发送flv数据,客户端就一直接收数据了。


HLS协议:


它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

HLS只请求基本的HTTP报文,与 实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的 防火墙或者 代理服务器。它也很容易使用 内容分发网络来传输媒体流。


HLS协议规定:

视频的封装格式是TS。视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。

除了TS视频文件本身,还定义了用来控制播放的m3u8文件(文本文件)

每一个 .m3u8 文件,分别对应若干个 ts 文件,这些 ts 文件才是真正存放视频的数据,m3u8 文件只是存放了一些 ts 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的,video 标签会解析这个文件,并找到对应的 ts 文件来播放,所以一般为了加快速度,.m3u8 放在 web 服务器上,ts 文件放在 cdn 上。


阅读10
分享