RTSP技术讨论_第1页
RTSP技术讨论_第2页
RTSP技术讨论_第3页
RTSP技术讨论_第4页
RTSP技术讨论_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、RTSP流媒体技术讨论周鉴刚2009-04-17摘要 流媒体概述 RTSP协议 RTP协议 H264 payload格式 Mpeg4 payload格式 相关的程序和库流媒体协议概述 起源:流式播放 vs 下载 协议:RTP、RTSP,强调实时性 应用: 微软的MMS,以及RTSP的变种 Real的RM,以及RTSP的变种 Adobe(收购自MicroMedia)的flv,rtmp 规范化:ISMA协会,整合现有协议,强调互操作性流媒体播放框架 应用层获取RTSP URL RTSP协议进行播放控制 SDP协议进行描述 RTP/RTCP协议数据传输 Payload层封装数据格式RTSP协议:概述

2、 一般基于TCP传输 使用类似HTTP的协议结构 请求first-line:新增DESCRIBE、SETUP等 应答first-line:例如 RTSP/1.0 200 OK Header字段:“key : value rn”格式,以空行“rn”结束 Body内容:格式不限,通过Content-Length确定大小 允许双向发送命令RTSP协议:例子SET_PARAMETER rtsp:/:8888/sample.mp4 RTSP/1.0CSeq: 5x-transport-options: late-tolerance=1.400000Session: 515440

3、4056653789650User-Agent: QuickTime/7.5.5 (qtver=7.5.5;os=Windows NT)RTSP/1.0 200 OKServer: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development; )Cseq: 5Session: 5154404056653789650RTSP协议:常用header字段 常用Header字段: CSeq:顺序号,每次递增 User-Agent:客户程序信息 Server:服务程序信息 Sessi

4、on:标记一次点播过程 某些命令特有的Header字段: Transport:SETUP时协商通道信息 Range:PLAY时标记播放位置 应用自定义字段(x-开头): x-retransmit:Darwin的RUDP重传协商标记RTSP协议:常用命令DESCRIBE询问媒体信息,SETUP创建传输通道PLAY开始播放PAUSE暂停播放TEARDOWN结束播放OPTIONS询问能力ANNOUNCE主动发布媒体GET_PARAMETER 查询参数SET_PARAMETER 设置参数RTSP协议:DESCRIBE命令 获取媒体的描述信息:有哪些获取媒体的描述信息:有哪些track,各个,各个tra

5、ck的格式,控制方式等的格式,控制方式等DESCRIBE rtsp:/:8888/sample.mp4 RTSP/1.0CSeq: 1Accept: application/sdpBandwidth: 384000Accept-Language: hr-HRUser-Agent: QuickTime/7.5.5 (qtver=7.5.5;os=Windows NT 5.2Service Pack 2)RTSP协议:DESCRIBE命令应答 Content-Base用于后续用于后续SETUP命令构建命令构建URL BODY信息中是信息中是SDP描述描述RTSP/1.0

6、200 OKServer: DSS/6.0.3Cseq: 1Content-length: 753Content-Type: application/sdpContent-Base: rtsp:/:8888/sample.mp4/v=0SDP协议(1) 一份全局信息,多份媒体信息v=0o=StreamingServer 3440750359 1231761553000 IN IP4 s=/home/drangon/sample_h264_100kbit.mp4u=http:/e=adminc=IN IP4 b=AS:209717

7、2t=0 0a=control:*a=isma-compliance:2,2.0,2a=range:npt=0- 70.00000SDP协议(2) rtpmap:RTP包说明,封装格式(h264),timestamp单位 control:track的控制信息 fmtp:媒体格式相关的参数,封装、解码相关m=video 0 RTP/AVP 96a=3GPP-Adaptation-Support:1a=rtpmap:96 H264/90000a=control:trackID=3a=framesize:96 192-242a=fmtp:96 packetization-mode=1;profile

8、-level-id=4D400C;sprop-parameter-sets=J01ADKkYYELxCA=,KM4JiA=a=mpeg4-esid:201RTSP协议:SETUP命令URL的计算,如何指定track?DESCRIBE应答中:Content-Base: rtsp:/:8888/sample.mp4/SDP中:a=control:trackID=3Transport,UDP传输方式,unicast,client_portSETUP rtsp:/:8888/sample.mp4/trackID=3 RTSP/1.0CSeq: 3Tr

9、ansport: RTP/AVP;unicast;client_port=6972-6973x-retransmit: our-retransmitx-dynamic-rate: 1x-transport-options: late-tolerance=1.400000Session: 5154404056653789650User-Agent: QuickTime/7.5.5RTSP协议:SETUP命令的应答Transport,传输方式的协商结果,确认client_port,增加server_portRTSP/1.0 200 OKServer: DSS/6.0.3Cseq: 3Session

10、: 5154404056653789650Transport: RTP/AVP;unicast;source=;client_port=6972-6973;server_port=6970-6971;ssrc=18512542x-Transport-Options: late-tolerance=1.400000 x-Retransmit: our-retransmitx-Dynamic-Rate: 1RTSP协议:SETUP的TCP传输 SETUP命令协商使用TCP方式Transport: RTP/AVP/TCP;interleaved=2-3 RTSP连接中,内嵌

11、二进制数据 四字节头,首字节“$”(0 x24),用来区分正常RTSP请求还是内嵌二进制数据 第二字节是channel值,(interleaved时协商) 第三、四字节是长度,network order 后面是二进制数据(RTP、RTCP包)RTSP协议:PLAY命令 Range,指定播放位置,实现SEEK操作,实时监视不支持 Speed,指定播放速度,实现快放慢放 连续多个PLAY的语义播放列表PLAY rtsp:/:8888/sample.mp4 RTSP/1.0CSeq: 4Range: npt=5.000000-70.000000 x-prebuffer: m

12、axtime=2.000000 x-transport-options: late-tolerance=10Session: 5154404056653789650User-Agent: QuickTime/7.5.5RTSP协议:其他命令 PAUSE命令:暂停(直播不支持) OPTIONS命令:查询支持能力,返回支持的命令清单。有时会用来做TCP保活 SET_PARAMETER和GET_PARAMETER:参数读写,一般用于应用层 ANNOUNCE命令,一般用于录制,类似DESCRIBE,但方向不同,请求者直接提供SDP信息RTP协议 UDP传输(或者内嵌于RTSP连接中) 强调实时性,没有

13、重传(应用层可自定义) 不同类型的payload有各自封装格式 四部分组成,extension和padding可选RTPHeaderExtension(可选)Payload(根据类型封装)Padding(可选)RTP协议:Header V:版本号,2 P:padding位,附在最后,末字节表示长度 X:extension位,扩展内容,紧跟header,2字节profile,2字节length,然后是扩展内容RTP协议 CC:CSRC数量,可选,一般为0 M:mark位,一般一帧数据最后一包为1 PT:payload类型,自定义从96开始 Seqence Num:顺序号,连续计数 Timesta

14、mp:时间戳,根据SDP单位递增 SSRC:同步源(略) CSRC:贡献源(略)RTCP协议 在另外一个UDP(channel)中双向传输 一个UDP包内可以有多个RTCP包 SR、RR用来报告发送和接收统计,并且可以用来计算round-trip,没几个正确实现 BYE包报告源结束RTP载荷:MPEG4帧格式 一些基本概念:YUV输入、编码输出、I帧、P帧 I帧的码流: 000001b003000001b508000001000000012000c888ffffe11150b042414183000001b610000c23202. P帧的码流 000001b65088ac0cb B6后一字节

15、高两位:00=I帧,01=P,10=BRTP载荷:MPEG4的SDP描述 Mpeg4视频一般使用RFC3016(音频RFC3640) SDP描述: MP4V-ES是封装类型,有对应的RFC描述 90000是timestamp单位,25帧时每帧递增90000/25=3600 Profile-level-id,config是解码参数m=video 0 RTP/AVP 96a=rtpmap:96 MP4V-ES/90000a=control:trackID=0a=mpeg4-esid:1a=fmtp:96 profile-level-id=1; config=000001b003000001b508

16、000001000000012000c888ffffe11150b042414183;RTP载荷:MPEG4的payload封装 Mpeg4视频的RTP payload封装 通常只考虑两种情况(没必要使用复杂的组合拆分) (1)如果一个帧小于RTP最大payload大小,则直接把整个帧作为RTP的payload发送。 (2)如果一个帧大于RTP最大payload大小,可以拆分成多个分片(fragment),每个分片大小不超过RTP最大payload的大小。这些所有的RTP包,timestamp都一样,mark位除最后一个包为1,前面所有包均为0RTP载荷:H264帧格式 NAL的基本概念,一个

17、帧可以有多个NAL NAL header格式(一个字节): Forbidden_zero_bit:一个bit,必须为0 Nal_ref_idc:两个bit,I帧非0 Type:五个bit,帧类型 常见NAL类型: 1:non-IDR picture,非I帧 5:IDR picture,I帧 6:SEI 7:SPS,sequence参数 8:PPS,picture参数RTP载荷:H264帧格式(2) Byte stream format 解决连续码流的帧分界问题,但如果有其他分界方式,可以不采用这种方式 具体实现,简单来说,在每个NAL头部添加000001前缀,NAL内部已经避免出现这个前缀 R

18、TP payload本身已经能够做帧分界,规范要求不能有000001前缀RTP载荷:h264的帧格式(3) I帧的码流: 0000016742e00d56a2c4c40000016868e3c800000106e001008000000165b6000038754fc6e224452d P帧的码流 00000161d88377fe4e3e07RTP载荷:h264的SDP描述 h264视频使用RFC 3984 SDP描述: H264是封装类型,有对应的RFC描述 90000是timestamp单位,必须为90000 Packetization-mode是可使用的打包格式 Profile-leve

19、l-id、sprop-parameter-sets是解码参数(SPS、PPS)m=video 0 RTP/AVP 96a=3GPP-Adaptation-Support:1a=rtpmap:96 H264/90000a=control:trackID=3a=fmtp:96 packetization-mode=1;profile-level-id=4D400C;sprop-parameter-sets=J01ADKkYYELxCA=,KM4JiA=RTP载荷:h264的payload封装 Packetization-mode一般取值1,Non-Interleaved mode packet格式

20、,NAL unit、FU-ARTP载荷:h264的payload封装(2) NAL unit格式,NAL大小小于一个RTP最大payload大小,直接将NAL作为RTP的payload STAP-A格式,将多个NAL放入一个RTP包中,总长度不超过一个RTP最大payload大小RTP载荷:h264的payload封装(2) FU-A格式,一个NAL拆分成多个RTP包RTP载荷:h264的payload封装(3)假设一个NAL大小是5000字节,开头的NAL header字节为0 x65,RTP payload大小为1400字节。那么这个NAL将分拆成4个RTP包的payload中。 char

21、 nal_data5000; / nal 的数据 unsigned char nal_header = nal_data0;第一个RTP的payload(共1400字节):payload0 的值:( 0 x1C | ( nal_header & 0 x60 ) )payload1 的值:( 0 x80 | ( nal_header & 0 x1F ) )payload2到payload1399的值: nal_data1 到 nal_data1398第二个RTP的payload(共1400字节):payload0 的值:( 0 x1C | ( nal_header & 0 x60 ) )payload1 的值:( nal_header & 0 x1F )payload2到payload1399的值: nal_data1399 到 nal_data2796第三个RTP的payload(共1400字节):p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论