目录浏览器
RTP传输流媒体数据、RTCP对RTP进行控制,同步、RTSP发起/终止流媒体
RTP和RTCP互为姐妹关系,RTSP可使用RTP来传输数据,但并无绑定关系也可使用TCP/UDP
RTSP、RTMP、HLS均可以作直播和点播,它们是三种不一样的应用层协议
服务器
关于RTP(RTCP)协议位置的理解:
RTP实际上介于应用层和传输层之间。同时具备应用层和传输层的各类特色。这个特色须要仔细甄别。网络
从应用开发者的角度看,RTP应该是应用层的一个部分。在应用程序的发送端,开发者必须编写用RTP封装分组(数据包)的程序代码,而后把该RTP分组交给UDP套接字接口。在接收端设备,RTP分组经过UDP套接字接口进入应用层程序后,会利用开发者编写的程序代码把RTP分组从应用数据块提取出来。RTP实际上为视频程序的开发者提供了一个开发平台。tcp
RTP也能够理解为运输层协议,实际上RTP协议偏重于传输层,是UDP协议(用户数据报)上边的一层协议。由于RTP封装了多媒体应用(包括视频流、音频流)的数据块,关键是提供运输层的服务(时间戳,序号、同步源标识符等),所以能够把RTP当作一层UDP上的运输层子层协议,特别要注意是子层协议。加密
综合来看,RTP协议其实是一个介于传输层和应用层之间的协议,做用是在UDP协议之上完成一次对媒体流的封装。url
流式传输是实现流媒体的关键技术。使用流式传输能够边下载边观看流媒体节目。因为Internet是基于分组传输的,因此接收端收到的数据包每每有延迟和乱序(流式传输构建在UDP上)插件
要实现流式传输,就要从下降延迟和恢复数据包时序入手。ssr
「在发送端,为下降延迟,每每对传输数据进行预处理(下降质量和高效压缩(常见压缩格式如aac/h264...))」
3d
「在接收端为了恢复时序,常采用接收缓冲,而为了实现媒体的流畅播放,通常会使用播放缓冲」
代理
RTP(Real-time Transport Protocol)协议建立在UDP协议上常配合RTSP和RTCP一块儿使用。用于实时传输网络中的多媒体数据,提供端到端的实时传输服务,但并不保证服务质量,服务质量由RTCP来提供。
RTP是流媒体协议族中最基础的一个协议了,它是IETF提出的一个标准,对应RFC文档RFC3550,RFC3550不只定义了RTP还定义了配套相关协议RTCP。
RTP协议主要职责就是负责流媒体数据包和媒体流的实时传输,每一个RTP数据报文由头(header)和装载(Payload)两部分组成,其中头的前12个字节的含义是固定的,装载的数据能够是音频或视频数据。RTP数据报的报头格式以下所示:
「能够将RTP比做一辆货车,货车里面能够随意装东西,可是容积有限制,若是太大你就须要分包,一辆一辆装车发送过,另外可能也不必定按序到达对端,甚至可能失踪」
RTP载荷类型
由于有些类型因为诞生的较晚,没有具体的PT值,只能使用动态(dynamic)PT值,即96-127,这就是为何你们广泛指定H264的PT值为96。
rtp_payload_types[] = { {0, "PCMU", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW, 8000, 1}, {3, "GSM", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1}, {4, "G723", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_G723_1, 8000, 1}, {5, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1}, {6, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 16000, 1}, {7, "LPC", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1}, {8, "PCMA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW, 8000, 1}, {9, "G722", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_ADPCM_G722, 8000, 1}, {10, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 2}, {11, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 1}, {12, "QCELP", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_QCELP, 8000, 1}, {13, "CN", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1}, {14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP2, -1, -1}, {14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3, -1, -1}, {15, "G728", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1}, {16, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 11025, 1}, {17, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 22050, 1}, {18, "G729", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1}, {25, "CelB", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1}, {26, "JPEG", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MJPEG, 90000, -1}, {28, "nv", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1}, {31, "H261", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H261, 90000, -1}, {32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG1VIDEO, 90000, -1}, {32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO, 90000, -1}, {33, "MP2T", AVMEDIA_TYPE_DATA, AV_CODEC_ID_MPEG2TS, 90000, -1}, {34, "H263", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H263, 90000, -1}, {-1, "", AVMEDIA_TYPE_UNKNOWN, AV_CODEC_ID_NONE, -1, -1} };
RTCP(Real-time Transport Control Protocol或RTP Control Protocol)是实时传输协议(RTP)的一个姐妹协议。
RTCP常与RTP联合工做,RTP实施实际数据的传输,RTCP则负责将控制包送至电话中的每一个人。其主要功能就是为RTP提供的服务质量作出反馈,同时同步音视频数据,它自己没不传递任何数据
。它们能以有效的反馈和最小的开销使传输效率最佳化,于是特别适合传送网上的实时数据。
在RTP会话期间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,所以,服务器能够利用这些信息动态地改变传输速率,甚至改变有效载荷类型。
RTCP根据所携带的控制信息不一样RTCP信息包可分为RR
(接收者报告包)、SR
(源报告包)、SE
DS
(源描述包)、BYE
(离开申明)和APP
(特殊应包)5类
实时流协议(RTSP,Real-time Streaming Protocol)是一种用于控制声音或图像的流媒体议,而且容许控制多条流,但RTSP链接并无被绑定传输层的链接(如RTP),服务器甚至能够选择TCP
或者UDP
来传输流内容。
它的语法相似于HTTP 1.1,但不强调时间的同步,所以比较能够容忍网络延迟,是一种基于文本的多媒体播放控制协议。RTSP定义流格式,流数据可经由RTP传输;因此RTSP的实时效果很是好,适合视频聊天,视频监控等方向。
RTSP的请求主要包括,如「描述(describe),设置(setup),播放(play),暂停(pause),回放(teardown),选项(options)」
等,在RTSP对话期间,Setup
能够指定RTP/RTCP使用的端口,「play
,pause
,teardown
」能够开始和暂停RTP的发送。
SETUP 请求
SETUP请求指定如何传输单个媒体流。这必须在发送PLAY请求以前完成。请求包含媒体流URL和传输说明符。该说明符一般包括用于接收RTP数据(音频或视频)的本地端口,另外一个用于RTCP数据(元信息))。服务器回复一般会确认所选参数,并填写缺乏的部分,例如服务器选择的端口。必须在发送聚合播放请求以前,使用SETUP配置每一个媒体流。
C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=8000-8001
S->C: RTSP/1.0 200 OK
CSeq: 3
Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD
Session: 12345678
Play 播放请求
Play 播放请求 将致使播放一个或全部媒体流。能够经过发送多个播放请求来堆叠播放请求。URL能够是聚合URL(播放全部媒体流)或单个媒体流URL(仅播放该流)。能够指定范围。若是没有指定范围,流将从头开始播放,并播放到最后,或者若是流暂停,则在暂停点恢复播放。
C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 4
Range: npt=5-20
Session: 12345678
S->C: RTSP/1.0 200 OK
CSeq: 4
Session: 12345678
RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012
PAUSE 暂停请求
PAUSE 暂停请求 暂时中止一个或全部媒体流,所以稍后能够经过播放请求恢复。请求包含聚合或媒体流URL。PAUSE请求中的范围参数指定什么时候暂停。当省略范围参数时,暂停会当即无限期地发生。
C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 5
Session: 12345678
S->C: RTSP/1.0 200 OK
CSeq: 5
Session: 12345678
RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放应用层协议.
RTMP传输层是TCP协议,不过这种可靠的保障也会形成一些问题,也就是说前面的数据包没有交付到目的地,后面的数据也没法进行传输。幸运的是,目前的网络带宽基本上能够知足RTMP协议传输普通质量视频的要求,并且通常延迟在延迟在1-3秒内。
RTMP传输的数据的基本单元为Message,可是实际上传输的最小单元是Chunk(消息块),由于RTMP协议为了提高传输速度,在传输数据的时候,会把Message拆分开来,造成更小的块,这些块就是Chunk。
RTMP是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种:
・工做在TCP之上的明文协议,使用端口1935;
・RTMPE在RTMP的基础上增长了加密功能;
・RTMPT封装在HTTP请求之中,可穿越防火墙;
・RTMPS相似RTMPT,但使用的是HTTPS链接;
RTMP协议(Real Time Messaging Protocol)是被Flash用于对象,视频,音频的传输.这个协议创建在TCP协议或者轮询HTTP协议之上.
RTMP协议就像一个用来装数据包的容器,这些数据既能够是AMF格式的数据,也能够是FLV中的视/音频数据.一个单一的链接能够经过不一样的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的.
HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。HLS点播,基本上就是常见的分段HTTP点播,不一样在于,它的分段很是小。
相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不一样在于,「直播客户端获取到的,并非一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,由于服务器端老是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。」
因而可知,基本上能够认为,HLS是以点播的技术方式来实现直播。因为数据经过HTTP协议传输,因此彻底不用考虑防火墙或者代理的问题,并且分段文件的时长很短,客户端能够很快的选择和切换码率,以适应不一样带宽条件下的播放。不过HLS的这种技术特色,决定了它的延迟通常老是会高于普通的流媒体直播协议。
HLS提供一个m3u8地址,Apple的Safari浏览器直接就能打开m3u8地址,譬如
香港卫视:http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8
RTP传输流媒体数据、RTCP对RTP进行控制,同步、RTSP发起/终止流媒体
RTP和RTCP互为姐妹关系,RTSP可使用RTP来传输数据,但并无绑定关系也可使用TCP/UDP
RTSP、RTMP、HLS均可以作直播和点播,它们是三种不一样的应用层协议
RTSP、RTMP、HLS均可以作直播和点播,它们是三种不一样的应用层协议
・HLS 延迟大,适合视频点播
・RTSP实时性最好,可是实现复杂,适合视频聊天和视频监控
・RTMP强在浏览器支持好,加载flash插件后就能直接播放,很是火,相反在浏览器里播放rtsp就很困难了
直播应用中,RTMP和HLS基本上能够覆盖全部客户端观看。
・RTSP优点主要在于传输层可使用udp/rtp,实时性好,延迟可控制到1s内,
・RTMP主要优点在于延时相对较低(1-3s),并且RTMP支持的很完善,能作到flash播放RTMP流长时间不断流,之前不少SIP的视频会议已被RTMP所取代。
・HLS的优点就是直接使用http协议请求流数据,能够在不一样速率的版本间自由切换,实现无缝播放,缺点是延时比较大(10s以上)。
三种协议各有各的优点,主要仍是看场景选择,固然大点公司,能够作些私有协议来提供更好更符合场景的服务。