RTP(Real-time Transport Protocol)实时传输协议
RTP是用于Internet上针对多媒体数据流的一种传输协议。RTP由两个紧密链接部分组成:RTP----传送具有实时属性的数据;RTCP控制协议(RTCP)----监控服务质量并传送正在进行的会话参与者的相关信息。
RTP协议是建立在UDP协议上的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议)、视频会议。和一键通(Push to Talk)系统(配合H.323或SIP),使它成为了IP电话产业的技术基础。
RTCP(Real-time Transport Control Protocol)实时传输控制协议
通常RTCP会采用与RTP相同的分发机制,向会话中的所有成员周期性地发送控制信息,应用程序通过接收这些数据,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进行控制或者对网络状况进行诊断。
RTMP(Real Time Messaging Protocol)实时消息传输协议
RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。
RTMP协议有三个分支,第一种是工作在TCP协议上的明文传输,它使用的端口是1935;第二种是RTMPT,RTMPT被封装在HTTP请求之中,可以穿越防火墙进行传输;第三种是RTMPS,它也是封装在HTTP之中,不过与RTMPT不同的是,它使用HTTPS安全连接,可以保证传输的安全。本文介绍的是第一种分支。
RTMP协议是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的,默认使用端口1935。在基于传输层协议的链接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP Connection链接。RTMP Connection成功后会传输一些控制信息,如CreateStream命令会创建一个Stream链接,用于传输具体的音视频数据和控制这些信息传输的命令信息。
RTMP协议中基本的数据单元称为消息(Message),即封装、解封装都是以Message为单位进行操作。当RTMP协议在互联网中传输数据的时候,为了更好地实现多路复用、分包和信息的公平性,发送端会把Message划分为带有Message ID的Chunk,每个Chunk可能是一个单独的Message,也可能是Message的一部分,在接受端会根据chunk中包含的data的长度,message id和message的长度把chunk还原成完整的Message,从而实现信息的收发。
HLS (HTTP Live Streaming)
HTTP Live Streaming(HLS)是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用于iOS系统。HLS点播是分段HTTP点播,不同在于它的分段非常小。要实现HLS点播,重点在于对媒体文件分段,目前有不少开源工具可以使用。
相对于常见的流媒体直播协议,HLS直播最大的不同在于,直播客户端获取到的并不是一个完整的数据流。HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息。
HLS是以点播的技术方式实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。
直播应用中,RTMP和HLS可以基本支持各类客户端需求,
HLS延时比较大,RTMP主要优势在于延时低。