流媒体相关内容总结文档格式.docx
《流媒体相关内容总结文档格式.docx》由会员分享,可在线阅读,更多相关《流媒体相关内容总结文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
<
sessionid>
networktype>
addresstype>
address>
s=<
sessionname>
i=<
sessiondescription>
u=<
URI>
e=<
emailaddress>
p=<
phonenumber>
c=<
connectionaddress>
b=<
modifier>
:
<
bandwidth-value>
t=<
starttime>
stoptime>
r=<
repeatinterval>
activeduration>
listofoffsetsfromstart-time>
z=<
adjustmenttime>
offset>
....
k=<
method>
encryptionkey>
a=<
attribute>
value>
m=<
media>
port>
transport>
fmtlist>
v=(协议版本)
o=(所有者/创建者和会话标识符)
s=(会话名称)
i=*
(会话信息)
u=*(URI描述)
e=*(Email地址)
p=*(电话号码)
c=*(连接信息)
b=*(带宽信息)
z=*(时间区域调整)
k=*(加密密钥)
a=*(0个或多个会话属性行)
时间描述:
t=(会话活动时间)
r=*(0或多次重复次数)
媒体描述:
m=(媒体名称和传输地址)
i=*(媒体标题)
c=*(连接信息—如果包含在会话层则该字段可选)
a=*(0个或多个媒体属性行)
例子
以AAC推送流为例。
具体代码:
DeviceHandler/AACHandler&
&
StreamSender
1.3.1推送过程
[2009-12-299:
58:
02:
234]
ANNOUNCErRTSP/
CSeq:
46
Content-Type:
application/sdp
Content-Length:
303
v=0
o=streamsender00INIP40.0.0.0
c=INIP4v2.4a6
m=audio0RTP/AVP96
a=control:
trackID=0
a=rtpmap:
96mpeg4-generic/44100/2
a=fmtp:
96streamtype=5;
profile-level-id=15;
mode=AAC-hbr;
config=1210;
SizeLength=13;
IndexLength=3;
IndexDeltaLength=3;
a=mpeg4-esid:
101
265]
RTSP/200OK
Server:
DSS/5.5.5(Build/;
Platform/Win32;
Release/Darwin;
state/beta;
)
Cseq:
46
SETUPrRTSP/
47
Transport:
RTP/AVP/TCP;
unicast;
mode=record;
interleaved=0-1
47
Cache-Control:
no-cache
Session:
14
Date:
Tue,29Dec200901:
17GMT
Expires:
RTP/AVP/TCP;
RECORDrRTSP/
48
281]
RTP-Info:
url=r1.3.2播放过程
47:
765]
OPTIONSrRTSP/
6
User-Agent:
VLCmediaplayer(LIVE555StreamingMedia9:
Public:
DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,OPTIONS,ANNOUNCE,RECORD
DESCRIBErRTSP/
7
Accept:
application/sdp
Content-length:
341
59:
02GMT
x-Accept-Retransmit:
our-retransmit
x-Accept-Dynamic-Rate:
1
Content-Base:
r00INIP40.0.0.0
s=\
c=INIP40.0.0.0
t=00
a=tool:
sdrv2.4a6
*
781]
8
9
PLAYrRTSP/
Range:
npt=
796]
npt=now-
url=rRTP协议
RTP(Real-timeTransportProtocol,实时传输协议[RFC1889]、[RFC3550]、[RFC3551]),它是由IETF的多媒体传输工作小组1996年在RFC1889中公布的。
RTP本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。
RTP并不保证传送或防止无序传送,也不确定底层网络的可靠性。
RTP实行有序传送,RTP中的序列号允许接收方重组发送方的包序列。
参考StreamSender项目。
/*tcp通道中传输rtp数据。
size:
4*/
struct_rtpTcpHead
{
u_int8symbol;
0001”3.1.18F
3.1.20IN0.0.0
m=video554RTP/AVP96
96H264/90000
96packetization-mode=1;
profile-level-id=42e014;
sprop-parameter-sets=Z0LgFNoFglE=,aM4wpA==
201
a=Width:
integer;
352
a=Height:
288
a=framerate:
5
[2009-12-3015:
09:
45:
843]
875]
2
890]
2
268
Wed,30Dec200907:
10:
00GMT
906]
3
url=r3.1.3播放过程
30:
859]
VLCmediaplayer(LIVE555StreamingMedia15:
364
m=video0RTP/AVP96
RTP/AVP;
client_port=2770-2771
921]
309628
45GMT
source=15:
4
url=rMPEG4
MPEG4传输参考[RFC3016]、[RFC3640]两篇文档,其中,[RFC3016]支持“mp4V-ES”视频传输方式,还支持“mp4A-LATM”AAC音频传输方式,但是,据说它没有使用MPEG4的同步技术和流管理技术;
[RFC3640]支持“mpeg4-generic”方式传输音视频,还支持传输其它的ES流,如系统流等。
MPEG4视频一般采用mp4V-ES方式,AAC一般采用mpeg4-generic方式。
图3-2MPEG4的RTP负载结构
图3-2是MPEG4的RTP负载结构,其中,AUHeaderLength是2字节长度,表示AUHeader的总位数,并且是网络字节序。
AUHeader包含一些可选的字段,长度不固定,包含字段具体在SDP头中指定。
如果AUHeader的总位数不是8的倍数,那么AUHeader最后要添加填充位,位值为0,这时AUHeaderLength长度不包括填充位的长度。
另外,[RFC3640]上面还指出“TheAuxiliarySection”段,因为这个段一般不用,所以没有考虑。
[RFC3640]“3.2.1.1TheAU-header”一节中详细的介绍了AUHeader的字段。
3.2.1AAC
参考[RFC3640]。
[RFC3640]介绍了负载AAC的两种模式,LowBit-rateAAC和HighBit-rateAAC,我使用的是HighBit-rateAAC。
HighBit-rateAAC模式支持AAC帧大小可变,帧最大长度是8191字节。
HighBit-rateAAC模式需要在SDP中指定mode=AAC-hbr,AUHeader只包含了两个字段AU-size(13位)和AU-Index(3位),这样AUHeader的长度正好为2字节,AU-Index填充为0,AU-size是网络字节序。
传输AAC帧不需要包含ADTS头,RTP单帧、分片、组包传输除了RTP头字段中的RTP_MARK没有特别需要注意的地方。
AAC网络流使用ADTS格式保存,ADTS指AudioDataTransportStream,它依次包含固定头(28位)和可变头(28位)两部分,它们的具体结构如下:
adts_fixed_header()
syncword;
12位
ID;
1位
layer;
2位
protection_absent;
profile;
sampling_frequency_index;
4位
private_bit;
channel_configuration;
3位
original/copy;
home;
}
adts_variable_header()
copyright_identification_bit;
copyright_identification_start;
frame_length;
13位
adts_buffer_fullness;
11位
number_of_raw_data_blocks_in_frame;
详细说明下ADTS头的重要数据部分:
syncword同步字Thebitstring‘111111111111’,说明一个ADTS帧的开始。
IDMPEG标示符,设置为1.
layerIndicateswhichlayerisused.Setto‘00’
protection_absent表示是否误码校验
profile表示使用哪个级别的AAC,如01LowComplexity(LC)---AACLC
0
Mainprofile
1
LowComplexityprofile(LC)
2
ScalableSamplingRateprofile(SSR)
3
(reserved)
sampling_frequency_index表示使用的采样率下标
sampling_frequency_indexsamplingfrequeny[Hz]
0x096000
0x188200
0x264000
0x348000
0x444100
0x532000
0x624000
0x722050
0x816000
0x92000
0xa11025
0xb8000
0xcreserved
0xdreserved
0xereserved
0xfreserved
channel_configuration表示声道数
frame_length一个ADTS帧的长度包括ADTS头和rawdatablock.
adts_buffer_fullness0x7FF说明是码率可变的码流
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的例子参见节,RTP数据传输参考DeviceHandler/StreamSender/和DeviceHandl