🗺️博客地图
一、背景知识
先有TCP/IP协议簇 5层模型,后有DoD 4层模型,再有OSI 7层模型。
TCP/IP协议簇(TCP/IP Suite)除了代表TCP与IP这两种通讯协议外,更包含了与TCP/IP相关的数十种通讯协议,例如:SMTP、DNS、ICMP、POP、FTP、Telnet等等。其实我们平常口语所谓的TCP/IP通讯协议,其背后真正的意义就是指TCP/IP协议组合,而非单指TCP和IP两种通讯协议。
因为因特网最初起源于军事用途,因此这个模型便以美国国防部(DoD,Department Of Defense)来命名,称为DoD模型。
虽然DoD模型与OSI模型各有自己的结构,但是大体上两者仍能互相对照,如下图:
二、几种流媒体传输协议简介
1、HTTP
超文本传送协议(Hyper Text Transfer Protocol),是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。
2、RTSP
实时流传输协议(Real Time Streaming Protocol),是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据,RTSP提供了一个可供扩展的框架,它的意义在于使得实时流媒体数据的受控和点播变得可能。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP请求由客户机发出,服务器作出响应;使用RTSP时,客户机和服务器都可以发出请求,即RTSP可以是双向的。RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,更进而支持多方视讯会议(Video Conference)。因为与HTTP1.1的运作方式相似,所以代理服务器〈Proxy〉的快取功能〈Cache〉也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。总的说来,RTSP是一个流媒体表示协议,主要用来控制具有实时特性的数据发送,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务。RTSP可以对流媒体提供诸如播放、暂停、快进等操作,它负责定义具体的控制消息、操作方法、状态码等。
3、RTP
实时传输协议(Real-time Transport Protoco),是用于Internet上针对多媒体数据流的一种传输协议,RTP负责对流媒体数据进行封包并实现媒体流的实时传输,它被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP通常使用UDP来传送数据,但RTP也可以在TCP或ATM等其他协议之上工作。当应用程序开始一个RTP时,会话时将使用两个端口:一个给RTP,一个给RTCP。RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。通常RTP算法并不作为一个独立的网络层来实现,而是作为应用程序代码的一部分。每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。RTP用到的地方就是 PLAY ,服务器往客户端传输数据用UDP协议,RTP是在传输数据的前面加了个12字节的头(描述信息)。RTP载荷封装设计本文的网络传输是基于IP协议,所以最大传输单元(MTU)最大为1500字节,在使用IP/UDP/RTP的协议层次结构的时候,这其中包括至少20字节的IP头,8字节的UDP头,以及12字节的RTP头。这样,头信息至少要占用40个字节,那么RTP载荷的最大尺寸为1460字 节。以H.264 为例,如果一帧数据大于1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。
4、RTCP
RTP控制协议(RTP Control Protocol),RTCP控制协议需要与RTP数据协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。RTP本身并 不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。通常RTCP会采用与RTP相同的分发机制,向会话中的 所有成员周期性地发送控制信息,应用程序通过接收这些数据,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进 行控制或者对网络状况进行诊断。
RTCP协议的功能是通过不同的RTCP数据报来实现的,主要有如下几种类型:
SR:发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。(SERVER定时间发送给CLIENT)。
RR:接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。(SERVER接收CLIENT端发送过来的响应)。
SDES:源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。
BYE:通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。
APP:由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。
5、RTMP
实时消息传输协议(Real Time Messaging Protocol),该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。RTCP和RTP配合使用一起提供流量控制和拥塞控制服务,在RTP会话期间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。
6、HLS
HLS(HTTP Live Streaming)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U(m3u8)playlist文件,用于寻找可用的媒体流。HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
7、MMS
微软媒体服务器协议(Microsoft Media Server Protocol)是用来访问并流式接收Window Media服务器中.asf文件的一种协议。MMS协议用于访问Windows Media发布点上的单播内容。MMS是连接Windows Media单播服务的默认方法。若观众在Windows Media Player中键入一个URL以连接内容,而不是通过超级链接访问内容,则他们必须是MMS协议引用该流。MMS的预设端口是1755。
三、流媒体传输协议共同点
1、协议都属于互联网 TCP/IP 五层体系结构中应用层的协议。
2、理论上都可以做直播和点播,但一般做直播用RTSP、RTMP,做点播用HTTP。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。
四、常见流媒体协议区别
1、HTTP
即超文本传送协议,HTTP协议会将所有的数据作为文件做处理。
(1)不是流媒体协议。
(2)HTTP协议是共有协议,并有专门机构做维护。
(3)HTTP协议没有特定的传输流。
(4)HTTP传输一般需要 2-3 个通道,命令和数据通道分离。
采用HTTP传输协议的方式,先通过服务器将FLV下载到本地缓存,然后再通过NetConnection的本地连接来播放这个FLV,这种方法是播放本地的视频,并不是播放服务器的视频。因此在本地缓存里可以找到这个FLV。
优点:服务器下载完这个FLV,服务器就没有消耗了,节省服务器消耗。HTTP相比于RTMP省去了一些协议交互时间,首屏时间更短。HTTP可拓展的功能更多。
缺点:FLV会缓存在客户端,对FLV的保密性不好。 是一种将直播流模拟成FLV文件,通过HTTP协议进行下载的模式来实现流媒体传输的协议,端口号80。一般建议使用HTTP-FLV,实时性和RTMP相等。
2、RTMP
实时消息传输协议(Real Time Messaging Protocol)。
(1)是流媒体协议。
(2)RTMP协议是 Adobe 的私有协议,未完全公开,因此对 Adobe 支持得很好。
(3)RTMP协议一般传输的是 flv,f4v 格式流,可以做到flash播放RTMP流长时间不断流,适合长时间播放。
(4)RTMP一般在 TCP 1个通道上传输命令和数据,延迟较低。
(5)RTMP基于TCP不会丢包,当网络状态差时,服务器会将包缓存起来,导致累积的延迟
采用RTMP协议方式,通过NetConnection连接到FMS(Flash Media Server)或Red5服务器,并实时播放服务器的FLV文件,这种方式可以任意选择视频播放点,并不象HTTP方式需要缓存完整个FLV文件到本地才可以任意选择播放点。
优点:在本地缓存里是找不到这个FLV文件的,FLV不会缓存在客户端,FLV的保密性好,防HTTP下载,延时短
缺点:消耗服务器资源,连接始终是实时的。
Http方式是本地播放,而RTMP方式是服务器实时播放,Adobe公司的流媒体传输协议,端口号1935,普通网络用户均可使用,包括非IOS平台用户,对非80端口(如1935)无限制的网络环境用户。
3、RTSP
实时流传输协议(Real Time Streaming Protocol)
(1)是流媒体协议。
(2)RTSP协议是共有协议,并有专门机构做维护。.
(3)RTSP协议一般传输的是 ts、mp4 格式的流。
(4)RTSP传输一般需要 2-3 个通道,命令和数据通道分离。
(5)RTSP通常用于 IP 摄像头和监控系统。RTSP 本身并不传输数据,而是负责控制流的播放。
采用RTSP协议方式,因为RTSP 1.0标准的制订者没有充分预测到互联网带宽的快速增长,以及由于IPv4地址短缺导致的NAT技术的广泛使用,还有代理服务器的大量存在,它在传输可靠性和易用性上都存在一定的缺陷。虽然各家厂商都做了一定程度的修补,比如支持RTSP over HTTP,支持NAT穿透等,但仍然于事无补。在2005之后网络视频大爆炸的几年中,RTSP 1.0并没有得到youtube, hulu, 土豆,优酷等视频服务提供商的青睐,相反,Adobe公司开发的私有流媒体技术RTMP以其优秀的易用性和富媒体的一体化集成,得到了多数视频服务提供商的追捧,成为了事实上的标准。
缺点:web端播放rtsp流的话,需要写插件,而且对浏览器也很挑剔,flash不支持rtsp,需要做activeX插件,所以目前的CDN都是基于RTMP的
4、HLS
HTTP Live Streaming
(1)是流媒体协议。
(2)HLS协议是苹果公司实现的基于HTTP的流媒体传输协议。
(3)HLS协议一般传输的是 ts 格式的流。
(4)HLS协议延时比较大,对存储I/O要求相当苛刻
采用HLS协议的方式,本质上跟基于HTTP的文件分段下载很接近。在带宽充裕的前提下,live HTTP能够实现跟RTSP和RTMP同样的流媒体播放效果,同时得到了更好的易用性,更简单的控制。在最新一代的超文本标识语言HTML5中,视频文件的点播,同样也采用了HTTP作为其承载协议,HLS是IOS平台下的流媒体传输协议 ,端口号80。
优点:H5浏览器支持比较好,IOS,安卓原生支持。
缺点:延迟性比较大。
五、常见几种流媒体协议的简单对比(表格)
协议 | httpflv | rtmp | hls | dash |
传输方式 | http流 | tcp流 | http | http |
视频封装格式 | flv | flv tag | Ts文件 | Mp4 3gp webm |
延时 | 低 | 低 | 高 | 高 |
数据分段 | 连续流 | 连续流 | 切片文件 | 切片文件 |
Html5播放 | 可通过html5解封包播放(flv.js) | 不支持 | 可通过html5解封包播放(hls.js) | 如果dash文件列表是mp4webm文件,可直接播放 |