概述
目录
一、SDP协议简介
二、SDP协议格式
三、会话描述参数
1.Version(必选)
2、origion(必选)
3.Session Name(必选)
4.Connection Data(可选)
5.Bandwidth(可选)
6.Times(必选)
7.Media Announcements (必选)
8.rtpmap(可选)
四、SDP示例
1.媒体级会话VLC播放264视频的sdp文件
2.媒体级会话VLC播放g711音频的sdp文件
3.点播mp4文件,MS_H返回给终端的sdp信息
4.直播
五、抓包示例
一、SDP协议简介
SDP(Session Description Protocol)是一个用来描述多媒体会话的应用层控制协议,为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述,例如会话声明、会话邀请、会话初始化等。它是一个基于文本的协议。
官方指导文档参考:https://datatracker.ietf.org/doc/html/rfc4566
二、SDP协议格式
SDP 协议格式非常简单,就是多行的 key-value
组成:
<type>=<value>
其中:
<type>
:属性(大小写敏感),例如v
代表版本;<value>
:内容,它是结构化文本,对应的格式和属性关联,采用 UTF8 编码;-
=
:符号,两边不能存在空格; =*
:表示可选。
三、会话描述参数
SDP会话描述由一个会话级描述(session_level description)和多个媒体级描述(media_level description)组成。
会话级(session_level)的作用域是整个会话。其位置是从’v=’行开始到下一个媒体描述为止。
媒体级(media_level)描述是对单个的媒体流进行描述,其位置是从’m=’行开始到下一个媒体描述为止。
总之,除非媒体部分重载,会话级的值是各个媒体的缺省默认值(就是说媒体级描述其实也是一个会话级描述,只不过没写出来的会话级描述参数都用的缺省值)。
1.Version(必选)
协议版本,不包括次版本号,格式如下:
v=0
2、origion(必选)
对会话的发起者进行了描述
o=<username> <sessionid> <version> <network type> <address type> <address>
- <username>:用户的登录名。如果主机不支持<username>,则为 ”-”。注意:<username>不能含空格。
- <session id>::会话ID。在整个会话中,必须是唯一的
- <version>:该会话公告的版本,供公告代理服务器检测同一会话的若干个公告哪个是最新公告.基本要求是会话数据修改后该版本值递增,建议用NTP时戳。
- <networktype>:网络类型,一般为”IN”,表示”internet”
- <address type>:地址类型,一般为IP4
- <address>:地址
3.Session Name(必选)
会话名称,在整个会话中有且只有一个”s=”
s=<sessionname>
4.Connection Data(可选)
表示媒体的连接信息, 一个会话声明中,会话级描述中必须有”c=”项或者在每个媒体级描述中有一个”c=”项。也有可能在会话级描述和每个媒体级描述中都有”c=”项。
c=<networktype> <address type> <connection address>
- <network type>:网络类型,一般为”IN”,表示”internet”
- <address type>:地址类型,一般为IP4。
- <connection address>:应用程序必须处理域名和ip地址两种情形。单播时,为域名或ip地址,推荐使用域名;多播,为ip地址,且ip后面必须有TTL(取值范围是0-255),地址和TTL决定了多播包被传播的范围。
5.Bandwidth(可选)
带宽信息,单位kilobits per second
b=<modifier>:<bandwidth-value>
- <modifier>:包括两种CT和AS。CT:ConferenceTotal,总带宽。AS:Application-SpecificMaximum,单个媒体带宽的最大值
6.Times(必选)
描述了会话的开始时间和结束时间
t=<start time> <stop time>
<start time> 和<stop time> 为NTP时间,单位是秒。假如<stop time>为零,表示过了<start time>时间后会话一直持续。当<start time> 和<stoptime>均为零时表示持久会话。建议start time和stoptime不要设为0。因为不知道此会话的开始和结束时间,增加了调度(scheduling)的难度。
7.Media Announcements (必选)
媒体名称和传输地址。一个媒体描述以”m=”开始到下一个”m=”结束。
m=<media><port> <transport> <fmt list>
<media>:表示媒体类型。有"audio"、 "video"、"application"(例白板信息)、"data"(不向用户显示的数据)和"control"(描述额外的控制通道)。
<port>:媒体流发往传输层的端口。取决于c=行规定的网络类型和接下来的传送层协议:对UDP为1024-65535;对于RTP为偶数。当分层编码流被发送到一个单播地址时,需要列出多个端口。
对于RTP,偶数端口被用来传输数据,奇数端口用来传输RTCP包。例:
/*
端口49170和49171为第一对RTP/RTCP端口,49172和49173为第二对的端口。传输协议是RTP/AVP,媒体格式为31(媒体格式是rtp头中payload参数对应的)
*/
m=video49170/2 RTP/AVP 31
<transport>:传输协议,与c=行的地址类型有关。两种: RTP/AVP,表示RealtimeTransport Protocol using the Audio/Video profile carried over UDP;
<fmt list>:媒体格式。对于音频和视频就是在RTP Audio/Video Profile定义的负载类型(payload type)。但第一个为缺省值,分为静态绑定和动态绑定:静态绑定即媒体编码方式与RTP负载类型有确定的一一对应关系,动态绑定即媒体编码方式(如时钟频率,音频信道数等)没有完全确定,需要进一步的属性说明(用rtpmap)。静态绑定举例如下:
//u_law的PCM编码单信道Audio,采样率8KHZ。在RTPAudio/Video profile中对应的payload type为0
m=audio49232 RTP/AVP 0
动态绑定的例子:16位线形编码,采样率为16KHZ,假如我们希望动态RTP/AVP 类型98表示此此流,写法如下:
m=video49232 RTP/AVP 98 a=rtpmap:98 L16/16000/2
8.rtpmap(可选)
0 个或多个会话属性行
a=rtpmap:<payload type><encoding name>/<clock rate>[/<encodingparameters>]
四、SDP示例
1.媒体级会话VLC播放264视频的sdp文件
m=video 1234 RTP/AVP 96
a=rtpmap:96 H264
a=framerate:15
c=IN IP4 172.18.168.45
2.媒体级会话VLC播放g711音频的sdp文件
m=audio 8888 RTP/AVP 0
a=rtpmap:0 pcma/8000/1 这地方是a率压缩方式;pcmu就是u率型
a=framerate:25 8000/25=320Byte 每个rtp包的音频数据为320byte 时间戳增值为320
c=IN IP4 192.168.1.230
注意:如果是同时播放音频和视频流只要把这两个媒体级会话合在一个sdp文件中就好了
3.点播mp4文件,MS_H返回给终端的sdp信息
v=0
o=HWPSS 3427743244 1084119141 IN IP4 127.0.0.1
s=test1.mp4 // test1.mp4:媒体文件名
c=IN IP4 0.0.0.0
t=0 0
a=control:*
a=range:npt=0-44.000000
m=video 0 RTP/AVP 96 // 96:track->payload_type 视频:96音频:97
a=control:trackID=101 // 101:轨道ID。 视频:101,102, 103 音频: 201,202, 203,204, 205
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=2;config=000001b0020;
m=audio 0 RTP/AVP 97
a=control:trackID=201
a=rtpmap:97 mpeg4-generic/24000/1
a=fmtp:97 streamtype=5;profile-level-id=15; mode=AAC-hbr; config=1308; SizeLength=13; IndexLength=3;IndexDeltaLength=3; Profile=1;
4.直播
v=0
o=- 2545495921 1885424500 IN IP4 192.168.225.158
s=111
c=IN IP4 192.168.225.153
b=RR:0
t=0 0
m=video 5088RTP/AVP 96
b=AS:949
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=4D4015;sprop-parameter-sets=Z01AFZZWCwSbCEiAAAH0AAAw1DBgAHP2AOg1cABQ,aO88gA==;packetization-mode=1
a=cliprect:0,0,576,352
a=framerate:25.
a=mpeg4-esid:201
a=x-envivio-verid:0002229D
m=audio 5090 RTP/AVP 97
b=AS:50
a=rtpmap:97 mpeg4-generic/24000/2
a=fmtp:97 profile-level-id=15; config=1310;streamtype=5; ObjectType=64; mode=AAC-hbr; SizeLength=13; IndexLength=3;IndexDeltaLength=3
a=mpeg4-esid:101
a=lang:eng
a=x-envivio-verid:0002229D
五、抓包示例
详细内容如下:
Session Description Protocol
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): - 1643463269938008 1 IN IP4 192.168.31.222
Owner Username: -
Session ID: 1643463269938008
Session Version: 1
Owner Network Type: IN
Owner Address Type: IP4
Owner Address: 192.168.31.222
Session Name (s): H.264 Video, streamed by the LIVE555 Media Server
Session Information (i): test.264
Time Description, active time (t): 0 0
Session Start Time: 0
Session Stop Time: 0
Session Attribute (a): tool:LIVE555 Streaming Media v2022.01.21
Session Attribute Fieldname: tool
Session Attribute Value: LIVE555 Streaming Media v2022.01.21
Session Attribute (a): type:broadcast
Session Attribute Fieldname: type
Session Attribute Value: broadcast
Session Attribute (a): control:*
Session Attribute Fieldname: control
Session Attribute Value: *
Session Attribute (a): range:npt=now-
Session Attribute Fieldname: range
Session Attribute Value: npt=now-
Session Attribute (a): x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media Server
Session Attribute Fieldname: x-qt-text-nam
Session Attribute Value: H.264 Video, streamed by the LIVE555 Media Server
Session Attribute (a): x-qt-text-inf:test.264
Session Attribute Fieldname: x-qt-text-inf
Session Attribute Value: test.264
Media Description, name and address (m): video 0 RTP/AVP 96
Media Type: video
Media Port: 0
Media Protocol: RTP/AVP
Media Format: DynamicRTP-Type-96
Connection Information (c): IN IP4 0.0.0.0
Connection Network Type: IN
Connection Address Type: IP4
Connection Address: 0.0.0.0
Bandwidth Information (b): AS:500
Bandwidth Modifier: AS [Application Specific (RTP session bandwidth)]
Bandwidth Value: 500 kb/s
Media Attribute (a): rtpmap:96 H264/90000
Media Attribute Fieldname: rtpmap
Media Format: 96
MIME Type: H264
Sample Rate: 90000
Media Attribute (a): fmtp:96 packetization-mode=1;profile-level-id=4D4033;sprop-parameter-sets=Z01AM5JUDAS0IAAAAwBAAAAM0eMGVA==,aO48gA==
Media Attribute Fieldname: fmtp
Media Format: 96 [H264]
Media format specific parameters: packetization-mode=1
[Packetization mode: Non-interleaved mode (1)]
Media format specific parameters: profile-level-id=4D4033
Profile: 4d4033
0100 1101 = Profile_idc: Main profile (77)
0... .... = Constraint_set0_flag: 0
.1.. .... = Constraint_set1_flag: 1
..0. .... = Constraint_set2_flag: 0
...0 .... = Constraint_set3_flag: 0
.... 0... = Constraint_set4_flag: 0
.... .0.. = Constraint_set5_flag: 0
.... ..00 = Reserved_zero_2bits: 0
0011 0011 = Level_id: 51 [Level 5.1 240 Mb/s]
Media format specific parameters: sprop-parameter-sets=Z01AM5JUDAS0IAAAAwBAAAAM0eMGVA==,aO48gA==
NAL unit 1 string: Z01AM5JUDAS0IAAAAwBAAAAM0eMGVA==
NAL unit: 674d403392540c04b420000003004000000cd1e30654
0... .... = Forbidden_zero_bit: 0
.11. .... = Nal_ref_idc: 3
...0 0111 = Nal_unit_type: Sequence parameter set (7)
0100 1101 = Profile_idc: Main profile (77)
0... .... = Constraint_set0_flag: 0
.1.. .... = Constraint_set1_flag: 1
..0. .... = Constraint_set2_flag: 0
...0 .... = Constraint_set3_flag: 0
.... 0... = Constraint_set4_flag: 0
.... .0.. = Constraint_set5_flag: 0
.... ..00 = Reserved_zero_2bits: 0
0011 0011 = Level_id: 51 [Level 5.1 240 Mb/s]
1... .... = seq_parameter_set_id: 0
.001 00.. = log2_max_frame_num_minus4: 3
.... ..1. = pic_order_cnt_type: 0
.... ...0 0101 .... = log2_max_pic_order_cnt_lsb_minus4: 4
.... 010. = num_ref_frames: 1
.... ...0 = gaps_in_frame_num_value_allowed_flag: 0
0000 1100 0... .... = pic_width_in_mbs_minus1: 23
.000 0100 10.. .... = pic_height_in_map_units_minus1: 17
..1. .... = frame_mbs_only_flag: 1
...1 .... = direct_8x8_inference_flag: 1
.... 0... = frame_cropping_flag: 0
.... .1.. = vui_parameters_present_flag: 1
.... ..0. = aspect_ratio_info_present_flag: 0
.... ...0 = overscan_info_present_flag: 0
0... .... = video_signal_type_present_flag: 0
.0.. .... = chroma_loc_info_present_flag: 0
..1. .... = timing_info_present_flag: 1
...0 0000 0000 0000 0000 0000 0000 0011 000. .... = num_units_in_tick: 24
...0 0000 0100 0000 0000 0000 0000 0000 000. .... = time_scale: 33554432
...0 .... = fixed_frame_rate_flag: 0
.... 1... = nal_hrd_parameters_present_flag: 1
.... .1.. = cpb_cnt_minus1: 0
.... ..00 11.. .... = bit_rate_scale: 3
..01 00.. = cpb_size_scale: 4
.... ..01 1... .... = bit_rate_value_minus1: 2
.1.. .... = cpb_size_value_minus1: 0
..1. .... = cbr_flag: 1
...0 0011 = initial_cpb_removal_delay_length_minus1: 3
0000 0... = cpb_removal_delay_length_minus1: 0
.... .110 01.. .... = dpb_output_delay_length_minus11: 25
..01 010. = time_offset_length: 10
.... ...0 = vcl_hrd_parameters_present_flag: 0
[Malformed Packet: SDP]
[Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]
[Malformed Packet (Exception occurred)]
[Severity level: Error]
[Group: Malformed]
NAL unit 2 string: aO48gA==
NAL unit: 68ee3c80
Media Attribute (a): control:track1
Media Attribute Fieldname: control
Media Attribute Value: track1
文本内容如下:
v=0
o=- 1643463269938008 1 IN IP4 192.168.31.222
s=H.264 Video, streamed by the LIVE555 Media Server
i=test.264
t=0 0
a=tool:LIVE555 Streaming Media v2022.01.21
a=type:broadcast
a=control:*
a=range:npt=now-
a=x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media Server
a=x-qt-text-inf:test.264
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:500
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4D4033;sprop-parameter-sets=Z01AM5JUDAS0IAAAAwBAAAAM0eMGVA==,aO48gA==
a=control:track1
最后
以上就是安详世界为你收集整理的会话描述协议---SDP协议【详解】一、SDP协议简介二、SDP协议格式三、会话描述参数四、SDP示例五、抓包示例的全部内容,希望文章能够帮你解决会话描述协议---SDP协议【详解】一、SDP协议简介二、SDP协议格式三、会话描述参数四、SDP示例五、抓包示例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复