SDP协议描述
SDP(Session Description Protocol)它只是一种信息格式的描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要的信息。
SDP规范
多个媒体级描述
一个会话级描述
由多个<type>=<value>
组成
会话层
会话的名称与目的
会话的存活时间
会话中包括多个媒体信息
媒体层
媒体格式
传输协议
传输IP和端口
媒体负载类型
SDP就是由一个全局的会话层和多个媒体层组成的。媒体层是在会话层之内的。一个会话层会有多个媒体层。
SDP描述信息
Session Description(会话层的描述)
- v=(protocol version)
版本 - o=(owner/create and session identifier)
谁创建的 - s=(session name)
名字 - c=*(conn info - optional if included at session-level)
可选的 - t=(time the session in active)
存活时间 - a=*(zero or more session attribute lines)
属性
Media Description(媒体层的描述)
- m=(media name and transport address)
姓名,传输地址信息 - c=*(conn info - optional if included at session-level)
- b=*(bandwidth information)
带宽,可以限制流量 - a=*(zero or more session attribute lines)
属性
SDP中字段含义和使用
SDP协议格式
SDP协议的格式由一系列的行组成,每行以一个字母开头,表示该行的类型。SDP协议定义了一些标准的行类型,包括v、o、s、c、t、m等。下面是一个简单的SDP协议格式示例:
v=0
o=- 123456 7890 IN IP4 192.168.1.1
s=My Session
c=IN IP4 192.168.1.1
t=0 0
m=audio 5004 RTP/AVP 0 8 18
在上面的示例中,v表示协议版本,o表示会话的起始者和会话ID,s表示会话名称,c表示连接信息,t表示会话的时间信息,m表示媒体信息。
- Version 必选
v=0 SDP的版本号,不包括次版本号 - Session Name必选
s=<session name>
会话名,s=-表式忽略会话名 - Origion/Owner必选
o=<username> <session id> <version> <network type><addresstype><address> 例子:o=-7017624586836067756 2 IN IP4 127.0.0.1 -就是忽略用户名 IN 就是internet
- Connection可选
C=<network type><address type><connection address> 例子: c=IN IP4 0.0.0.0
- Media必选
m= <media><port> <transport><fmt/payload type list>例子: m=audio 1024 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126选择音频还是视频
- Attributes可选
可以有一个或者多个,可选的a=<TYPE>或a=<TYPE>:<VALUES> 例子: a=framerate:<帧速率>
- rtpmap 可选
a=rtpmap:<fmt/payload type><encoding name>/<clockrate>[/<encodingparameters>]例子: a=rtpmap:103 ISAC/16000
- fmtp可选
a=fmtp:<format/payload type> parameters
例子: a=fmtp:103 apt=106
SDP示例
下面是一些常见的SDP示例,用于描述不同类型的会话和媒体流。
1.媒体级会话VLC播放264视频的sdp文件
v=0
o=- 0 0 IN IP4 127.0.0.1
s=VLC media player
c=IN IP4 127.0.0.1
t=0 0
a=tool:vlc 2.2.4
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA==
a=control:streamid=0
2.媒体级会话VLC播放g711音频的sdp文件
v=0
o=- 0 0 IN IP4 127.0.0.1
s=VLC media player
c=IN IP4 127.0.0.1
t=0 0
a=tool:vlc 2.2.4
m=audio 5004 RTP/AVP 0
a=rtpmap:0 PCMU/8000
a=control:streamid=0
3.点播mp4文件,MS_H返回给终端的sdp信息
v=0
o=- 0 0 IN IP4 127.0.0.1
s=Session streamed by "MS_H"
i=sample.mp4
c=IN IP4 0.0.0.0
t=0 0
a=tool:libavformat 57.56.101
m=video 0 RTP/AVP 96
b=AS:1000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA==
a=control:trackID=1
m=audio 0 RTP/AVP 97
b=AS:128
a=rtpmap:97 MPEG4-GENERIC/44100/2
a=fmtp:97 profile-level-id=15;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1210
a=control:trackID=2
4.直播
v=0
o=- 0 0 IN IP4 127.0.0.1
s=Live Stream
c=IN IP4 0.0.0.0
t=0 0
a=tool:libavformat 57.56.101
m=video 0 RTP/AVP 96
b=AS:1000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA==
a=control:trackID=1
m=audio 0 RTP/AVP 97
b=AS:128
a=rtpmap:97 MPEG4-GENERIC/44100/2
a=fmtp:97 profile-level-id=15;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1210
a=control:trackID=2