收藏 分销(赏)

流媒体相关内容总结知识分享.doc

上传人:w****g 文档编号:4016380 上传时间:2024-07-25 格式:DOC 页数:22 大小:234KB 下载积分:10 金币
下载 相关 举报
流媒体相关内容总结知识分享.doc_第1页
第1页 / 共22页
流媒体相关内容总结知识分享.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
流媒体相关内容总结 精品文档 流媒体相关内容总结 1 RTSP协议 RTSP(Real Time Stream Protocol,实时流协议[RFC 2326])是研究如何有效地在IP网络上传输流媒体数据的应用层协议。 RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同. 请求消息:       方法 URI RTSP版本 CR LF       消息头 CR LF CR LF                消息体 CR LF 回应消息:        RTSP版本 状态码 解释 CR LF        消息头 CR LF CR LF        消息体 CR LF 其中RTSP版本一般都是RTSP/1.0,状态码是一个数值,200表示成功,解释是与状态码对应的文本解释。 1.1 流媒体服务器 Windows Media Server:支持mms协议 Helix Server:推送协议为私有协议,播放协议使用RTSP Darvin Streaming Server:支持RTSP推送和播放。如果是点播播放,本地文件需要索引化。 1.2 SDP格式 sdp的格式 v=<version> o=<username> <session id> <version> <network type> <address type> <address> s=<session name> i=<session description> u=<URI> e=<email address> p=<phone number> c=<network type> <address type> <connection address> b=<modifier>:<bandwidth-value> t=<start time> <stop time> r=<repeat interval> <active duration> <list of offsets from start-time> z=<adjustment time> <offset> <adjustment time> <offset> .... k=<method> k=<method>:<encryption key> a=<attribute> a=<attribute>:<value> m=<media> <port> <transport> <fmt list> v = (协议版本) o = (所有者/创建者和会话标识符) s = (会话名称) i = * (会话信息) u = * (URI 描述) e = * (Email 地址) p = * (电话号码) c = * (连接信息) b = * (带宽信息) z = * (时间区域调整) k = * (加密密钥) a = * (0 个或多个会话属性行)  时间描述: t = (会话活动时间) r = * (0或多次重复次数) 媒体描述: m = (媒体名称和传输地址) i = * (媒体标题) c = * (连接信息 — 如果包含在会话层则该字段可选) b = * (带宽信息) k = * (加密密钥) a = * (0 个或多个媒体属性行) 1.3 例子 以AAC推送流为例。具体代码:DeviceHandler/AACHandler && StreamSender 1.3.1 推送过程 [2009-12-29 9:58:02:234] ANNOUNCE rtsp://202.102.126.10/0123456789ABCDEF.sdp RTSP/1.0 CSeq:3452816846 Content-Type:application/sdp Content-Length:303 v=0 o=streamsender 0 0 IN IP4 0.0.0.0 c=IN IP4 202.102.126.10 a=tool:sdr v2.4a6 m=audio 0 RTP/AVP 96 a=control:trackID=0 a=rtpmap:96 mpeg4-generic/44100/2 a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1210; SizeLength=13; IndexLength=3; IndexDeltaLength=3; a=mpeg4-esid:101 [2009-12-29 9:58:02:265] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 3452816846 [2009-12-29 9:58:02:265] SETUP rtsp://202.102.126.10/0123456789ABCDEF.sdp/trackID=0 RTSP/1.0 CSeq:3452816847 Transport:RTP/AVP/TCP;unicast;mode=record;interleaved=0-1 [2009-12-29 9:58:02:265] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 3452816847 Cache-Control: no-cache Session: 134866268081914 Date: Tue, 29 Dec 2009 01:58:17 GMT Expires: Tue, 29 Dec 2009 01:58:17 GMT Transport: RTP/AVP/TCP;unicast;mode=record;interleaved=0-1 [2009-12-29 9:58:02:265] RECORD rtsp://202.102.126.10/0123456789ABCDEF.sdp RTSP/1.0 CSeq: 3452816848 Session: 134866268081914 [2009-12-29 9:58:02:281] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 3452816848 Session: 134866268081914 RTP-Info: url=rtsp://202.102.126.10/0123456789ABCDEF.sdp/trackID=0 1.3.2 播放过程 [2009-12-29 9:58:47:765] OPTIONS rtsp://202.102.126.10:1554/0123456789ABCDEF RTSP/1.0 CSeq: 6 User-Agent: VLC media player (LIVE555 Streaming Media v2009.04.20) [2009-12-29 9:58:47:765] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 6 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD [2009-12-29 9:58:47:765] DESCRIBE rtsp://202.102.126.10:1554/0123456789ABCDEF RTSP/1.0 CSeq: 7 Accept: application/sdp User-Agent: VLC media player (LIVE555 Streaming Media v2009.04.20) [2009-12-29 9:58:47:765] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 7 Cache-Control: no-cache Content-length: 341 Date: Tue, 29 Dec 2009 01:59:02 GMT Expires: Tue, 29 Dec 2009 01:59:02 GMT Content-Type: application/sdp x-Accept-Retransmit: our-retransmit x-Accept-Dynamic-Rate: 1 Content-Base: rtsp://202.102.126.10:1554/0123456789ABCDEF/ v=0 o=streamsender 0 0 IN IP4 0.0.0.0 s=\0123456789ABCDEF.sdp c=IN IP4 0.0.0.0 t=0 0 a=tool:sdr v2.4a6 a=control:* m=audio 0 RTP/AVP 96 a=control:trackID=0 a=rtpmap:96 mpeg4-generic/44100/2 a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1210; SizeLength=13; IndexLength=3; IndexDeltaLength=3; a=mpeg4-esid:101 [2009-12-29 9:58:47:781] SETUP rtsp://202.102.126.10:1554/0123456789ABCDEF/trackID=0 RTSP/1.0 CSeq: 8 Transport: RTP/AVP/TCP;unicast;interleaved=0-1 User-Agent: VLC media player (LIVE555 Streaming Media v2009.04.20) [2009-12-29 9:58:47:781] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 8 Cache-Control: no-cache Session: 14027363211279 Date: Tue, 29 Dec 2009 01:58:17 GMT Expires: Tue, 29 Dec 2009 01:58:17 GMT Transport: RTP/AVP/TCP;unicast;interleaved=0-1 [2009-12-29 9:58:47:781] PLAY rtsp://202.102.126.10:1554/0123456789ABCDEF/ RTSP/1.0 CSeq: 9 Session: 14027363211279 Range: npt=0.000- User-Agent: VLC media player (LIVE555 Streaming Media v2009.04.20) [2009-12-29 9:58:47:796] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 9 Session: 14027363211279 Range: npt=now- RTP-Info: url=rtsp://202.102.126.10:1554/0123456789ABCDEF/trackID=0 2 RTP协议 RTP(Real-time Transport Protocol,实时传输协议[RFC 1889]、[RFC 3550]、[RFC 3551]),它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的。RTP 本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。 RTP 并不保证传送或防止无序传送,也不确定底层网络的可靠性。 RTP 实行有序传送, RTP 中的序列号允许接收方重组发送方的包序列。 参考StreamSender项目。 /* tcp通道中传输rtp数据。size:4 */ struct _rtpTcpHead { u_int8 symbol; //$,0x24 u_int8 channelId; //interlevel u_int16 len; //rtp包长度,不包括_rtpTcpHead的长度。 }; /* rtp包头。size:12 */ struct _rtpHead { /* rtp */ u_int8 RTP_CC:4; //0 u_int8 RTP_PX:2; //0 u_int8 RTP_VER:2; //版本号:2 u_int8 RTP_PT:7; //负载类型 u_int8 RTP_MARK:1; //是否是帧的最后分片 u_int16 RTP_SEQUENCE; //序列号,网络序 u_int32 RTP_TIMESTAMP; //时间戳,网络序,时间戳增量和采样率关系很大 u_int32 RTP_SSRC; //同步源标识,网络序 }; 图形表示为: 3 RTP负载 首先要说明的是,音频帧的固定长度是1024(编码前)。 3.1 H264 参考[RFC 3984],代码参考DeviceHandler/StreamSender。 H264原始流以00 00 00 01(4字节)或00 00 01(3字节)开头,紧跟的是1字节的网络抽象层单元NALU。RTP传输H264流的时候,将“0001”头去掉。 SDP有两个参数profile-level-id和sprop-parameter-sets,这两个参数由0x67…0x68…结构的数据生成,生成方法参考StreamH264。 3.1.1 结构定义 下面定义了单帧、分片的结构,组包的结构复杂些。 /* * H264头, FU-A */ /* 网络抽象层单元NALU*/ struct _nalu { u_int8 Type:5; u_int8 NRI:2; u_int8 F:1; }; 单帧模式就是原h264流 /* 单一NAL 单元模式*/  typedef _nalu _h264SingleFrameHead; /* 分片模式*/ 分片模式有两种类型: 28 | FU-A | Fragmentation unit 29 | FU-B | Fragmentation unit 一般使用的是FU-A类型。 typedef _nalu _fuIndicator; struct _fuHeader { u_int8 Type:5; u_int8 R:1;//0 u_int8 E:1;//结束位 u_int8 S:1;//开始位 }; struct _h264FUHead { _fuIndicator fuIndicator; _fuHeader fuHeader; }; /* 组包模式*/ 组包模式有四种,两种单时间组合包, 24 | STAP-A | Single-time aggregation packet 25 | STAP-B | Single-time aggregation packet 和两种多时间组合包, 26 | MTAP16 | Multi-time aggregation packet 27 | MTAP24 | Multi-time aggregation packet 一般使用的是STAP-A,这种模式的格式为: RTPHeader(12字节) – STAP-A NALU(1字节) – frameSize(2)—frame—frameSize—frame--…,与MPEG4组包是不同的,可对比着看。 3.1.2 推送过程 [2009-12-30 15:09:45:843] ANNOUNCE rtsp://202.102.126.10/0123456789ABCDEF.sdp RTSP/1.0 CSeq:1 Content-Type:application/sdp Content-Length:328 v=0 o=streamsender 0 0 IN IP4 0.0.0.0 c=IN IP4 202.102.126.10 a=tool:sdr v2.4a6 m=video 554 RTP/AVP 96 a=control:trackID=0 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1;profile-level-id=42e014;sprop-parameter-sets=Z0LgFNoFglE=,aM4wpA== a=mpeg4-esid:201 a=Width:integer;352 a=Height:integer;288 a=framerate:5 [2009-12-30 15:09:45:843] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 1 [2009-12-30 15:09:45:875] SETUP rtsp://202.102.126.10/0123456789ABCDEF.sdp/trackID=0 RTSP/1.0 CSeq:2 Transport:RTP/AVP/TCP;unicast;mode=record;interleaved=0-1 [2009-12-30 15:09:45:890] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 2 Cache-Control: no-cache Session: 26813480845923 Date: Wed, 30 Dec 2009 07:10:00 GMT Expires: Wed, 30 Dec 2009 07:10:00 GMT Transport: RTP/AVP/TCP;unicast;mode=record;interleaved=0-1 [2009-12-30 15:09:45:906] RECORD rtsp://202.102.126.10/0123456789ABCDEF.sdp RTSP/1.0 CSeq: 3 Session: 26813480845923 [2009-12-30 15:09:45:906] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 3 Session: 26813480845923 RTP-Info: url=rtsp://202.102.126.10/0123456789ABCDEF.sdp/trackID=0 3.1.3 播放过程 [2009-12-30 15:10:30:859] OPTIONS rtsp://202.102.126.10:1554/0123456789ABCDEF RTSP/1.0 CSeq: 1 User-Agent: VLC media player (LIVE555 Streaming Media v2009.04.20) [2009-12-30 15:10:30:859] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 1 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD [2009-12-30 15:10:30:859] DESCRIBE rtsp://202.102.126.10:1554/0123456789ABCDEF RTSP/1.0 CSeq: 2 Accept: application/sdp User-Agent: VLC media player (LIVE555 Streaming Media v2009.04.20) [2009-12-30 15:10:30:875] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 2 Cache-Control: no-cache Content-length: 364 Date: Wed, 30 Dec 2009 07:10:00 GMT Expires: Wed, 30 Dec 2009 07:10:00 GMT Content-Type: application/sdp x-Accept-Retransmit: our-retransmit x-Accept-Dynamic-Rate: 1 Content-Base: rtsp://202.102.126.10:1554/0123456789ABCDEF/ v=0 o=streamsender 0 0 IN IP4 0.0.0.0 s=\0123456789ABCDEF.sdp c=IN IP4 0.0.0.0 t=0 0 a=tool:sdr v2.4a6 a=control:* m=video 0 RTP/AVP 96 a=control:trackID=0 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1;profile-level-id=42e014;sprop-parameter-sets=Z0LgFNoFglE=,aM4wpA== a=mpeg4-esid:201 a=Width:integer;352 a=Height:integer;288 a=framerate:5 [2009-12-30 15:10:30:906] SETUP rtsp://202.102.126.10:1554/0123456789ABCDEF/trackID=0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port=2770-2771 User-Agent: VLC media player (LIVE555 Streaming Media v2009.04.20) [2009-12-30 15:10:30:921] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 3 Cache-Control: no-cache Session: 60374355309628 Date: Wed, 30 Dec 2009 07:10:45 GMT Expires: Wed, 30 Dec 2009 07:10:45 GMT Transport: RTP/AVP;unicast;source=202.102.126.10;client_port=2770-2771;server_port=6970-6971 [2009-12-30 15:10:30:921] PLAY rtsp://202.102.126.10:1554/0123456789ABCDEF/ RTSP/1.0 CSeq: 4 Session: 60374355309628 Range: npt=0.000- User-Agent: VLC media player (LIVE555 Streaming Media v2009.04.20) [2009-12-30 15:10:30:921] RTSP/1.0 200 OK Server: DSS/5.5.5 (Build/489.16; Platform/Win32; Release/Darwin; state/beta; ) Cseq: 4 Session: 60374355309628 Range: npt=now- RTP-Info: url=rtsp://202.102.126.10:1554/0123456789ABCDEF/trackID=0 3.2 MPEG4 MPEG4传输参考[RFC 3016]、[RFC 3640]两篇文档,其中,[RFC 3016]支持“mp4V-ES”视频传输方式,还支持“mp4A-LATM”AAC音频传输方式,但是,据说它没有使用MPEG4的同步技术和流管理技术;[RFC 3640]支持“mpeg4-generic”方式传输音视频,还支持传输其它的ES流,如系统流等。 MPEG4视频一般采用mp4V-ES方式,AAC一般采用mpeg4-generic方式。 图3-2 MPEG4的RTP负载结构 图3-2是MPEG4的RTP负载结构,其中,AU Header Length是2字节长度,表示AU Header的总位数,并且是网络字节序。AU Header包含一些可选的字段,长度不固定,包含字段具体在SDP头中指定。如果AU Header的总位数不是8的倍数,那么AU Header最后要添加填充位,位值为0,这时AU Header Length长度不包括填充位的长度。 另外,[RFC 3640]上面还指出“The Auxiliary Section”段,因为这个段一般不用,所以没有考虑。 [RFC 3640] “3.2.1.1 The AU-header”一节中详细的介绍了AU Header的字段。 3.2.1 AAC 参考[RFC 3640]。[RFC 3640]介绍了负载AAC的两种模式,Low Bit-rate AAC和High Bit-rate AAC,我使用的是High Bit-rate AAC。High Bit-rate AAC模式支持AAC帧大小可变,帧最大长度是8191字节。 High Bit-rate AAC模式需要在SDP中指定mode=AAC-hbr, AU Header只包含了两个字段AU-size(13位)和AU-Index(3位),这样AU Header的长度正好为2字节,AU-Index填充为0, AU-size是网络字节序。 传输AAC帧不需要包含ADTS头,RTP单帧、分片、组包传输除了RTP头字段中的RTP_MARK没有特别需要注意的地方。 AAC网络流使用ADTS格式保存,ADTS指Audio Data Transport Stream,它依次包含固定头(28位)和可变头(28位)两部分,它们的具体结构如下: adts_fixed_header() { syncword; 12位 ID; 1位 layer; 2位 protection_absent; 1位 profile; 2位 sampling_frequency_index; 4位 private_bit; 1位 channel_configuration; 3位 original/copy; 1位 home; 1位 } adts_variable_header() { copyright_identification_bit; 1位 copyright_identification_start; 1位 frame_length; 13位 adts_buffer_fullness; 11位 number_of_raw_data_blocks_in_frame; 2位 } 详细说明下ADTS头的重要数据部分: syncword 同步字The bit string ‘1111 1111 1111’,说明一个ADTS帧的开始。 ID MPEG 标示符, 设置为1. layer Indicates which layer is used. Set to ‘00’ protection_absent 表示是否误码校验 profile 表示使用哪个级别的AAC,如01 Low Complexity(LC)--- AACLC 0  Main profile   1  Low Complexity profile (LC)   2  Scalable Sampling Rate profile (SSR)   3  (reserved) sampling_frequency_index 表示使用的采样率下标 sampling_frequency_index sampling frequeny [Hz] 0x0 96000 0x1 88200 0x2 64000 0x3 48000 0x4 44100 0x5 32000 0x6 24000 0x7 22050 0x8 16000 0x9 2000 0xa 11025 0xb 8000 0xc reserved 0xd reserved 0xe reserved 0xf reserved channel_configuration 表示声道数 frame_length 一个ADTS帧的长度包括ADTS头和raw data block. adts_buffer_fullness 0x7FF 说明是码率可变的码流 number_of_raw_data_blocks_in_frame 表示ADTS帧中有 number_of_raw_data_blocks_in_frame + 1个AAC原始帧. 所以说number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有一个AAC数据块并不是说没有。(一个AAC原始帧包含一段时间内1024个采样及相关数据) AAC的RTP推送过程、播放过程及SDP的例子参见1.2节,RTP数据传输参考DeviceHandler/StreamSender/StreamAAC.cpp和DeviceHandler/AACHandler/aacHander.cpp。 SDP中有个参数config,它对应AudioSpecificConfig结构: AudioSpecificConfig两字节,它的16进制的字符串就是config。 3.2.2 视频 参考[RFC 3016]、[live555 MPEG4…]和[ISO-IEC-14496-2_2001_MPEG4_Visual],MPEG4视频采用MP4V-ES方式。 MPEG4编码的主要概念是对象(Object)和背景,还有VS、VO、VOL、VOP、GOP等。 使用RTP推送MPEG4视频主要考虑两个关键点: 1、参数: profile_level_id: 000001B0F3,其中F3就是profile_level_id,它紧跟在VS起始码之后 config: 000001B6(VOP)之前的数值的16进制表示。 2、RTP封包: 直接封包:MPEG4直接封包 分片:MPEG4可以直接分片,防止包丢失可以copy Vop头。 3.2.2.1 推送过程 [2010-5-7 10:22:13:625] ANNOUNCE rtsp://202.102.126.10/0123456789ABCDEF.sdp RTSP/1.0 CSeq:3452816846 Content-Type:application/sdp Content-Length:351 v=0 o=streamsender 0 0 IN IP4 0.0.0.0 c=IN IP4 202.102.126.10 a=tool:sdr v2.4a6 m=video 554 RTP/AVP 96 a=control:trackID=0 a=rtpmap:96 MP4V-ES/90000 a=fmtp:96 profile-level-id=224;config=000001B0F4000001B50900000100000001200086C400670C161048518F000001B2587669443030 a=mpeg4-esid:201 a=Width:integer;352 a=Height:integer;288 a=framerate:25 [2010-5-7 10:22:13:656] RTSP/1.0 200 OK
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服