目录

一、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 ProtocolSession Description Protocol Version (v): 0Owner/Creator, Session Id (o): - 1643463269938008 1 IN IP4 192.168.31.222Owner Username: -Session ID: 1643463269938008Session Version: 1Owner Network Type: INOwner Address Type: IP4Owner Address: 192.168.31.222Session Name (s): H.264 Video, streamed by the LIVE555 Media ServerSession Information (i): test.264Time Description, active time (t): 0 0Session Start Time: 0Session Stop Time: 0Session Attribute (a): tool:LIVE555 Streaming Media v2022.01.21Session Attribute Fieldname: toolSession Attribute Value: LIVE555 Streaming Media v2022.01.21Session Attribute (a): type:broadcastSession Attribute Fieldname: typeSession Attribute Value: broadcastSession Attribute (a): control:*Session Attribute Fieldname: controlSession Attribute Value: *Session Attribute (a): range:npt=now-Session Attribute Fieldname: rangeSession Attribute Value: npt=now-Session Attribute (a): x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media ServerSession Attribute Fieldname: x-qt-text-namSession Attribute Value: H.264 Video, streamed by the LIVE555 Media ServerSession Attribute (a): x-qt-text-inf:test.264Session Attribute Fieldname: x-qt-text-infSession Attribute Value: test.264Media Description, name and address (m): video 0 RTP/AVP 96Media Type: videoMedia Port: 0Media Protocol: RTP/AVPMedia Format: DynamicRTP-Type-96Connection Information (c): IN IP4 0.0.0.0Connection Network Type: INConnection Address Type: IP4Connection Address: 0.0.0.0Bandwidth Information (b): AS:500Bandwidth Modifier: AS [Application Specific (RTP session bandwidth)]Bandwidth Value: 500 kb/sMedia Attribute (a): rtpmap:96 H264/90000Media Attribute Fieldname: rtpmapMedia Format: 96MIME Type: H264Sample Rate: 90000Media Attribute (a): fmtp:96 packetization-mode=1;profile-level-id=4D4033;sprop-parameter-sets=Z01AM5JUDAS0IAAAAwBAAAAM0eMGVA==,aO48gA==Media Attribute Fieldname: fmtpMedia Format: 96 [H264]Media format specific parameters: packetization-mode=1[Packetization mode: Non-interleaved mode (1)]Media format specific parameters: profile-level-id=4D4033Profile: 4d40330100 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: 00011 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: 674d403392540c04b420000003004000000cd1e306540... .... = 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: 00011 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: 00000 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: 00... .... = 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: 30000 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: 68ee3c80Media Attribute (a): control:track1Media Attribute Fieldname: controlMedia 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协议【详解】相关推荐

  1. 流媒体协议之RTSP详解

    1 流媒体协议之RTSP详解 文章目录 1 流媒体协议之RTSP详解 1.1 RTSP概述 1.2 RTSP协议交互过程 1.2.1 RTSP基于TCP交互过程 1.2.2 RTSP基于HTTP的交互 ...

  2. HTTP协议状态码详解(HTTP Status Code)

    HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 ...

  3. SSL / TLS 协议运行机制详解

    转载自  SSL / TLS 协议运行机制详解 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想 ...

  4. HTTP协议状态码详解(HTTP Status Code)(转)

    原文链接:HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为:  200 – 服务器 ...

  5. 流媒体协议之RTMP详解

    流媒体协议之RTMP详解 文章目录 流媒体协议之RTMP详解 1 RTMP概述 2 RTMP交互过程 2.1 握手协议 2.2 RTMP分块(chunk) 2.3 协议控制消息(Protocol Co ...

  6. 虚拟路由器冗余协议VRRP原理详解!

    虚拟路由器冗余协议VRRP原理详解! https://virtual.51cto.com/art/201905/596666.htm?pc 我们知道,为了实现不同子网之间的设备通信,需要配置路由.目前 ...

  7. 传输协议之ICMP详解

    文章目录 TCP和UDP ICMP 简介 ICMP出现的原因 ICMP的用途 ICMP作为IP的上层协议在工作(报文) ICMP实现之MTU探索 ICMP实现之改变路由 ICMP实现之源点抑制 ICM ...

  8. STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解

    STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解 上一次我们讲了OneNet平台的注册,这次我们来讲一下MQTT的常用报文用法 上一篇地址https ...

  9. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

最新文章

  1. c++ STL 常用容器元素类型相关限制 指针 引用
  2. 你还不会创建jQuery插件 ?
  3. java 过滤攻击报文_Spring Boot XSS 攻击过滤插件使用
  4. JZOJ 5431. 【NOIP2017提高A组集训10.28】序列操作
  5. boost::multi_array模块index_base 修改工具的测试
  6. php转换图片为.bin文件
  7. mysql date string类型_mysql date类型与string转换
  8. Linux编程 3 (初识bash shell与man查看手册)
  9. 云服务器怎么把软件装上去_服务器:云服务器怎么设置301
  10. 由一道习题看如何设计浮点数
  11. 用mysql做宠物商店项目_使用Java实现数据库编程 项目(宠物商店)
  12. java接口的实现原理_Java接口和抽象类原理详解
  13. matlab批量写入文件,matlab批量合并txt文件
  14. 计算机excel中百分比怎么算,excel如何自动算百分比
  15. C函数篇(recv函数)
  16. Linux环境变量PATH
  17. Codeforces 1326 E. Bombs (线段树)
  18. ps怎么抠地图线路_用Photoshop怎么抠地图?
  19. Python实战技巧系列
  20. JUnit version 3.8 or later expected

热门文章

  1. 分析游戏《明日方舟》的成功要素
  2. Android中免root的hook框架学习——whale(一)下载和基本介绍
  3. SoftReference的使用
  4. DMCNN–2018TIP
  5. 如何恢复您忘记的WhatsApp PIN码
  6. 2021年用于开发构建本机原生Windows应用程序软件的6大C ++ IDE开发工具简介
  7. 官网下载不同版本的AndroidStudio
  8. cesium 开发记录报错:DeveloperError: Appearance/Geometry mismatch.
  9. Android 创建垃圾代码
  10. php curl post get请求header头带参数