文章目录

  • 一 概述
  • 二 sdp规格
  • 三 各个字段的描述
    • 1. Version(必选)
    • 2.origion(必选)
    • 3.Session Name(必选)
    • 4.Connection Data(可选)
    • 5.Bandwidth(可选)
    • 6.Times(必选), RepeatTimesand Time Zones
    • 7.Media Announcements (必选)
    • 8.rtpmap(可选)
    • 9.SuggestedAttributes(可选)
  • 四 举例
    • 1.媒体级会话VLC播放264视频的sdp文件
    • 2.媒体级会话VLC播放g711音频的sdp文件
    • 3.点播mp4文件,MS_H返回给终端的sdp信息
    • 4.直播
      • 编码器生成的sdp文件
      • 点播上面的sdp文件,MS_H传给终端的sdp信息

一 概述

SDP目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话。SDP基本上在internet上工作。他定义了会话描述的统一格式,但并不定义多播地址的分配和SDP消息的传输,也不支持媒体编码方案的协商,这些功能均由下层传送协议完成。典型的会话传送协议包括:SAP(Session Announcement Protocol会话公告协议),SIP(Session Initiation Protocol,会话初始协议),RTSP,HTTP,和使用MIME的E-Mail。

SDP包括以下一些方面:

(1)会话的名称和目的

(2)会话存活时间

(3)包含在会话中的媒体信息,包括:

媒体类型(video,audio, etc)

传输协议(RTP/UDP/IP,H.320, etc)

媒体格式(H.261video, MPEG video, etc)

多播或远端(单播)地址和端口

(4)为接收媒体而需的信息(addresses, ports, formats and so on)

(5)使用的带宽信息

(6)可信赖的接洽信息(Contact information)

二 sdp规格

SDP会话描述由多行=组成。其中是一个字符。是一个字符串,其格式视而定。整个协议区分大小写。“=”两侧不允许有空格。

SDP会话描述由一个会话级描述(session_level description)和多个媒体级描述(media_level description)组成。会话级(session_level)的作用域是整个会话。其位置是从’v=’行开始到第一个媒体描述为止。媒体级(media_level)描述是对单个的媒体流进行描述(例如传送单个音频或者视频的vlc sdp文件只有短短的几句话,从m=开始,这其实就是个媒体机描述),其位置是从’m=’行开始到下一个媒体描述为止。总之,除非媒体部分重载,会话级的值是各个媒体的缺省默认值(就是说媒体级描述其实也是一个会话级描述,只不过没写出来的会话级描述参数都用的缺省值)。

SDP的结构如下:

Sessiondescription

​ v= (protocol version)

​ o= (owner/creator and session identifier).

​ s= (session name)

​ i=* (session information)

​ u=* (URI of description)

​ e=* (email address)

​ p=* (phone number)

​ c=* (connection information - notrequired if included in all media)

​ b=* (bandwidth information)

​ One or more time descriptions (seebelow)

​ z=* (time zone adjustments)

​ k=* (encryption key)

​ a=* (zero or more session attributelines)

​ Zero or more media descriptions (seebelow)

Time description

​ t= (time the session is active)

​ r=* (zero or more repeat times)

Media description

​ m= (media name and transport address)

​ i=* (media title)

​ c=* (connection information - optionalif included at session-level)

​ b=* (bandwidth information)

​ k=* (encryption key)

​ a=* (zero or more media attributelines)

上面的有些行是必需有的,有些行是可选的。可选的行有*号标记。必需的是v,o,s,t,m(这是对于会话级描述和媒体及描述总体而言的,对于媒体级描述而言只有m=是必须的)。注意所有的描述项必须按照上面的顺序给出。

三 各个字段的描述

1. Version(必选)

v=0

SDP的版本号,不包括次版本号。

2.origion(必选)

o=

o=<用户名> <会话版本> <网络类型><地址类型> <地址>

“o=”项对会话的发起者进行了描述。

是用户的登录名。如果主机不支持,则为 ”-”。注意:不能含空格。

:是一个数字串。在整个会话中,必须是唯一的。为了确保其唯一,建议使用NTP(Network Time Protocol)timestamp。

:该会话公告的版本,供公告代理服务器检测同一会话的若干个公告哪个是最新公告.基本要求是会话数据修改后该版本值递增,建议用NTP时戳。

:网络类型,一般为”IN”,表示”internet”

:地址类型,一般为IP4
:地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dl3ELKpZ-1623577870920)(C:\Users\hongjh\AppData\Roaming\Typora\typora-user-images\image-20210613173251256.png)]

3.Session Name(必选)

s=

会话名,在整个会话中有且只有一个”s=”。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xz6SoXMW-1623577870923)(C:\Users\hongjh\AppData\Roaming\Typora\typora-user-images\image-20210613173317246.png)]

4.Connection Data(可选)

c=

表示媒体连接信息。

一个会话声明中,会话级描述中必须有”c=”项或者在每个媒体级描述中有一个”c=”项。可能在会话级描述和每个媒体级描述中都有”c=”项。

:网络类型,一般为”IN”,表示”internet”

:地址类型,一般为IP4。

:应用程序必须处理域名和ip地址两种情形。单播时,为域名或ip地址,推荐使用域名;多播,为ip地址,且ip后面必须有TTL(取值范围是0-255),地址和TTL决定了多播包被传播的范围。例:

c=IN IP4 224.2.1.1/127

分层编码方案是一个数据流被分为多层,接受者能够通过申请不同层的流选择流的质量(包括带宽)如下:

//

如果没有给定,则默认为1。

c=INIP4 224.2.1.1/127/3

等价于:

c=IN IP4 224.2.1.1/127

c=IN IP4 224.2.1.2/127

c=IN IP4 224.2.1.3/127

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DRo6urfz-1623577870925)(C:\Users\hongjh\AppData\Roaming\Typora\typora-user-images\image-20210613173740476.png)]

5.Bandwidth(可选)

b=:

​ 描述了建议的带宽,单位kilobits per second,可选。

:包括两种CT和AS。CT:ConferenceTotal,总带宽。AS:Application-SpecificMaximum,单个媒体带宽的最大值。

扩展机制:以”X-”开始。建议modifier越短越好。例

b=X-YZ:128

6.Times(必选), RepeatTimesand Time Zones

t=

描述了会话的开始时间和结束时间。

和为NTP时间,单位是秒。假如为零表示过了时间后会话一直持续。当 和均为零时表示持久会话。

建议start time和stoptime不要设为0。因为不知道此会话的开始和结束时间,增加了调度(scheduling)的难度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQLpNkyP-1623577870927)(C:\Users\hongjh\AppData\Roaming\Typora\typora-user-images\image-20210613173822949.png)]

7.Media Announcements (必选)

m=

一个会话描述包括几个媒体描述。一个媒体描述以”m=”开始到下一个”m=”结束。

:表示媒体类型。有"audio", “video”,“application”(例白板信息), “data”(不向用户显示的数据) 和"control"(描述额外的控制通道)。

:媒体流发往传输层的端口。取决于c=行规定的网络类型和接下来的传送层协议:对UDP为1024-65535;对于RTP为偶数。当分层编码流被发送到一个单播地址时,需要列出多个端口。方式如下:

m=/

对于RTP,偶数端口被用来传输数据,奇数端口用来传输RTCP包。例:

m=video 49170/2 RTP/AVP 31

端口49170和49171为第一对RTP/RTCP端口,49172和49173为第二对的端口。传输协议是RTP/AVP,媒体格式为31(媒体格式是rtp头中payload参数对应的)。

:传输协议,与c=行的地址类型有关。两种: RTP/AVP,表示RealtimeTransport Protocol using the Audio/Video profile carried over UDP;UDP。

:媒体格式。对于音频和视频就是在RTP Audio/Video Profile定义的负载类型(payload type)。但第一个为缺省值,分为静态绑定和动态绑定:静态绑定即媒体编码方式与RTP负载类型有确定的一一对应关系,动态绑定即媒体编码方式(如时钟频率,音频信道数等)没有完全确定,需要进一步的属性说明(用rtpmap)。分别举例如下,静态绑定的例子:u_law的PCM编码单信道Audio,采样率8KHZ。在RTPAudio/Video profile中对应的payload type为0。即:

m=audio 49232 RTP/AVP 0

动态绑定的例子:16位线形编码,采样率为16KHZ,假如我们希望动态RTP/AVP 类型98表示此流,写法如下:

m=video 49232 RTP/AVP 98

a=rtpmap:98 L16/16000/2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7MVVPsT6-1623577870928)(C:\Users\hongjh\AppData\Roaming\Typora\typora-user-images\image-20210613173919338.png)]

8.rtpmap(可选)

a=rtpmap:/[/]

a=rtpmap:<负载类型><编码名>/<时钟速率>[/<编码参数>]

对于音频流,<编码参数>说明了音频的通道数。通道数默认缺省值为1。对于视频流,现阶段没有<编码参数>。

​ m=audio 49230 RTP/AVP 96 97 98

​ m=audio 8888 RTP/AVP 0

​ m=video 1234 RTP/AVP 96

​ a=rtpmap:96 L8/8000

​ a=rtpmap:0 pcma/8000/1

​ a=rtpmap:96 H264

​ a=rtpmap:97 L16/8000

​ a=rtpmap:98 L16/11025/2

在rtpmap中,实验性的编码方案也可以用。其格式名前一定为”X-”例:一种新的实验性的被称为GSMLPC的音频流,使用的动态负载类型为99。

m=video 49232 RTP/AVP 99

a=rtpmap:99 X-GSMLPC/8000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aMHNmKY6-1623577870929)(C:\Users\hongjh\AppData\Roaming\Typora\typora-user-images\image-20210613174706489.png)]

9.SuggestedAttributes(可选)

a=或 a=:

a=framerate:<帧速率>//单位:帧/秒 1s播放几个rtp包 倒数为一个rtp包承载的数据播放的时间单位s

​ 音频的话 a=framerate:50 1byte8000hz20ms=160B

​ 则每个rtp包的音频数据量为160B 时间戳增值为160

a=lang:<语言标记>//会话描述的缺省语言或媒体描述的语言

注: 如果SDP语法分析器不能识别某一类型(Type),则整个描述丢失。

​ 如果”a=”的某属性值不理解,则予以丢失此属性。

​ 会话级的描述就是媒体级描述的缺省值(就是说媒体级描述其实也是一个会话级描述,只不过没写出来的会话级描述参数都用的缺省值)。

四 举例

1.媒体级会话VLC播放264视频的sdp文件

m=video 1234 RTP/AVP 96
a=rtpmap:96 H264
a=framerate:15
c=IN IP4 172.18.168.45

详细:http://blog.csdn.net/zhangjikuan/article/details/27378237

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

详细:http://blog.csdn.net/zhangjikuan/article/details/27379201

如果是同时播放音频和视频流只要把这两个媒体级会话合在一个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

44.000000:mvhd原子:ntohl (movie_header->duration)/ ntohl(movie_header->time_scale)

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

90000:track->time_scale

a=fmtp:96 profile-level-id=2;config=000001b0020;

*profile-level-id=2: ****mp4v***的子原子esds中得来

config=000001b0020: mp4v的子原子esds中得来

m=audio 0 RTP/AVP 97

a=control:trackID=201

a=rtpmap:97 mpeg4-generic/24000/1

24000: track->time_scale

1:***mp4a***的子原子esds中得来的

a=fmtp:97 streamtype=5;profile-level-id=15; mode=AAC-hbr; config=1308; SizeLength=13; IndexLength=3;IndexDeltaLength=3; Profile=1;

config=1308:mp4a的子原子esds中得来的

streamtype=5; profile-level-id=15; mode=AAC-hbr:写死

SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1:写死

4.直播

编码器生成的sdp文件

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

点播上面的sdp文件,MS_H传给终端的sdp信息

v=0

MS_H全部是写死的

o=- 1702415089 4281335390 IN IP4 127.0.0.1

s=live

c=IN IP4 0.0.0.0

t=0 0

a=control:*

a=range:npt=0-

m=video 5088 RTP/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

a=control:trackID=103

此媒体描述是与编码器的媒体描述是一样的。

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

a=control:trackID=201

此媒体描述是与编码器的媒体描述是一样的。


SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)

  • SDP 文本信息包括:

会话名称和意图;

会话持续时间;

构成会话的媒体;

有关接收媒体的信息(地址等)。

  • 协议结构

SDP 信息是文本信息,采用 UTF-8 编 码中的 ISO 10646 字符集。SDP 会话描述如下:(标注 * 符号的表示可选字段):

v = (协议版本)

o = (所有者/创建者和会话标识符)

s = (会话名称)

i = * (会话信息)

u = * (URI 描述)

e = * (Email 地址)

p = * (电话号码)

c = * (连接信息 ― 如果包含在所有媒体中,则不需要该字段)

b = * (带宽信息)

一个或更多时间描述

(如下所示):

z = * (时间区域调整)

k = * (加密密钥)

a = * (0 个或多个会话属性行)

0个或多个媒体描述(如下所示) 时间描述

t = (会话活动时间)

r = * (0或多次重复次数)

媒体描述

m = (媒体名称和传输地址)

i = * (媒体标题)

c = * (连接信息 — 如果包含在会话层则该字段可选)

b = * (带宽信息)

k = * (加密密钥)

a = * (0 个或多个会话属性行)

流媒体专家(3)rtsp内嵌的会话描述协议sdp相关推荐

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

    目录 一.SDP协议简介 二.SDP协议格式 三.会话描述参数 1.Version(必选) 2.origion(必选) 3.Session Name(必选) 4.Connection Data(可选) ...

  2. 网络流媒体--SDP会话描述协议(RFC-4566)

    1.SDP协议简介 SDP(Session Description Protocol)是为了描述多媒体会话而设计的,主要用来描述会话通告,会话邀请或者其他形式的多媒体会话初始化.为了初始化多媒体会话, ...

  3. SDP: Session Description Protocol(会话描述协议) (RFC2327)

    SDP: SessionDescription Protocol(会话描述协议) (RFC2327) 1概述 SDP也是MMUSIC工作组的一个产品,在MBONE内容中用得很多.其目的就是在媒体会话中 ...

  4. SDP: 会话描述协议(Session Description Protocol)

    会话描述协议(SDP)为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述. 会话目录用于协助多媒体会议的通告,并为会话参与者传送相关设置信息.SDP 即用于将这种信息传输到接收 ...

  5. 【SIP教程】 SDP(Session Description Protocol)会话描述协议

    概述 SDP用来描述多媒体会话的应用层控制协议,为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述. 是一个基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛 ...

  6. WebRTC学习进阶之路 --- 五、WebRTC网络知识详解(三)(最全流媒体协议(RTP/RTCP/RTSP/RTMP/MMS/HLS/HTTP/ HTTP-FLV(HDL)/SDP)

    WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274 RTP:实时传输协议(Real-time ...

  7. 最全流媒体协议详细总结介绍(RTP/RTCP/RTSP/RTMP/MMS/HLS/HTTP/ HTTP-FLV(HDL) /SDP)

    RTP:实时传输协议(Real-time Transport Protocol)          RTP是一种基于包的传输协议,它用来传输实时数据.在网络上传输数据包的延迟和误差是不可避免的,对此R ...

  8. RTP/RTMP/RTSP/RTCP/SRTP/SRTCP等基础协议了解

    文章目录 一.前言 二.RTP 三.RTCP 四.SRTP & SRTCP 五.RTSP 六.RTSP 和RTP的关系 一.前言 实现流媒体实现推流拉流跨平台跨浏览器访问,收集整理了一下相关协 ...

  9. 音视频SDP协议详解(描述会话的协议)

    前言 ①SDP协议是会话描述协议(Session Description Protocol)的缩写,是一种会话描述格式,一种描述流媒体初始化参数的格式,为描述多媒体数据而设计. 文末卡片领取音视频免费 ...

最新文章

  1. Python爬虫项目--爬取某宝男装信息 附带源码
  2. 函数式编程语言时代已经来临
  3. python翻译程序-Python桌面应用案例:TXT文档翻译工具(源代码)
  4. 关于Javascript闭包的理解
  5. C# 版本设计模式(Design Pattern)---------------总序
  6. linux下文件删除不了
  7. 浅析HTML文档结构对DivCSS布局的意义
  8. 线程同步--关键代码段(二)
  9. Windows API 学习记录1
  10. HW 静态路由实现PC间互通
  11. windows下apache最新下载、安装配置
  12. 内核模块的加载与卸载
  13. Padavan完整编译教程
  14. PTAM特征点法跟踪和建图 SLAM FAST Patch
  15. MATLAB 指定线型和颜色
  16. python爬虫基础教程115_python爬虫分析:115网盘的模拟登录
  17. 交换机中查找IP与mac对应关系命令
  18. hr 标签可选的属性(续) 和 img 标签介绍
  19. 安卓中自定义view控件代替radiogroup实现颜色渐变效果的写法
  20. PTA_数据结构与算法_7-38 寻找大富翁 (25分)

热门文章

  1. linux火狐网页无声音,解决Firefox在Ubuntu下播放Flash无声音的问题
  2. 基于SSM的零食小食品商城(零食商城源码)
  3. 数据可视化软件系统大屏模板展示带后台项目BI系统
  4. Deep Learning for Video Game Playing《DQN 在电子游戏中的应用》
  5. openLayers实现地名地址搜索及展示
  6. 网段、网口、网关、网卡及网口不通简单记录
  7. windows的系统还原
  8. DUILIB异形窗口实现
  9. [生存志] 第105节 李斯谏逐客卿
  10. 人工智能课程笔记:自然语言处理与循环神经网络