会话描述协议---SDP协议【详解】

 

目录

一、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

  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值