一、SDP协议概述
SDP(Session Description Protocol会话描述协议)是由IETF(Internet工程任务组)作为RFC4566颁布,描述流媒体初始化参数的格式。其目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话,并为参与者提供特定的信息(看SDP包含的内容)。定义了会话描述的统一格式,但并不定义多播地址的分配和SDP消息的传输,也不支持媒体编码方案的协商,这些功能均由下层传送协议完成。
会话描述协议(SDP)为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述。
会话目录用于协助多媒体会议的通告,并为会话参与者传送相关设置信息。SDP即用于将这种信息传输到接收端。SDP完全是一种会话描述格式――它不属于传输协议――它只使用不同但适当的传输协议,这些传输协议包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME扩展协议的电子邮件以及超文本传输协议(HTTP)。
SDP的设计宗旨是通用性,它可以应用于大范围的网络环境和应用程序,而不仅仅局限于组播会话目录,但SDP不支持会话内容或媒体编码的协商,这些由下层协议完成。
SDP包含的内容:
1) 会话的名称和目的
2) 会话存活时间
3) 包含在会话中的媒体信息,包括:
媒体类型(video, audio, etc)
传输协议(RTP/UDP/IP, H.320, etc)
媒体格式(H.261 video, MPEG video, etc)
多播或远端(单播)地址和端口
4) 为接收媒体而需的信息(addresses, ports, formats and so on)
5) 使用的带宽信息
6) 可信赖的接洽信息(Contact information)
二、SDP格式
字段解释
v=0 Version 给定了SDP协议的版本
o=<username> <session id> <version> <network type> <address type> <address>;
Origin ,给定了会话的发起者信息 s=<session name> 给定了Session Name
i=<session description> Information 关于Session的一些信息 u=<URI> URI
c=<network type> <address type> <connection address> Connect Data包含连接数据
t=<start time> <stop time> Time a=<attribute> Attribute
m=<media> <port> <transport> <fmt list> Media Announcements
a=<attribute>:<value>
注:v,o,s,t,m为必须的,其他项为可选。
会话级:
a=cat:<类别>//给出点分层次式会话分类号,供接收方筛选会话
a=keywds:<关键词>//供接收方筛选会话
a=tool:<工具名和版本号>//创建会话描述的工具名和版本号
a=recvonly/sendrecv/sendonly//收发模式
a=type:<会议类型>//有:广播,聚会,测试,H.323
a=charset:<字符集>//显示会话名和信息数据的字符集
a=sdplang:<语言标记>//描述所有语言
a=lang:<语言标记>//会话描述的缺省语言或媒体描述的语言
a=framerate:<帧速率>//单位:帧/秒
a=quality:<质量>//视频的建议质量(10/5/0)
a=fmtp:<格式>< 格式特定参数>//定义指定格式的附加参数
媒体级:
a=ptime:<分组时间>//媒体分组的时长(单位:秒)
a=recvonly/sendrecv/sendonly//收发模式
a=orient:<白板方向>//指明白板在屏莫上的方向
a=sdplang:<语言标记>//描述所有语言
a=lang:<语言标记>//会话描述的缺省语言或媒体描述的语言
传输协议级
a=rtpmap:<净荷类型号><编码名>/<时钟速率>[/<编码参数>]
对音频,编码参数为音频信道数;对视频没有定义
具体的SDP信息实例
v=0 Version 给定了SDP协议的版本
o=- 15648852339074415390 15648852339074415390 IN IP4 ma-virtual-machine Origin ,给定了会话的发起者信息,所有者/创建者和会话标识符
s=Unnamed 给定了Session Name 会话名称
i=N/A Information 关于Session的一些信息
c=IN IP4 0.0.0.0 Connect Data包含连接数据 文本串 IPV4 地址
t=0 0 Time 0或多次重复次数
a=tool:vlc 2.0.10 Attribute 0个或多个媒体描述(属性)
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://192.168.1.3:8554/avstream
m=video 0 RTP/AVP 96 Media Announcements 媒体名称和传输地址
b=RR:0 带宽信息
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=42c01f;sprop-parameter-sets=Z0LAH9oBQBboQAAA+kAAOpgDxgyo,aM4yyA==;
a=control:rtsp://192.168.1.3:8554/avstream/trackID=6
m=audio 0 RTP/AVP 96
b=RR:0
a=rtpmap:96 mpeg4-generic/48000/2
a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=0990; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;
a=control:rtsp://192.168.1.3:8554/avstream/trackID=7
Opened URL "rtsp://192.168.1.3:8554/avstream", returning a SDP description:
v=0
o=- 15648852339074415390 15648852339074415390 IN IP4 ma-virtual-machine
s=Unnamed
i=N/A
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 2.0.10
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://192.168.1.3:8554/avstream
m=video 0 RTP/AVP 96
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=42c01f;sprop-parameter-sets=Z0LAH9oBQBboQAAA+kAAOpgDxgyo,aM4yyA==;
a=control:rtsp://192.168.1.3:8554/avstream/trackID=6
m=audio 0 RTP/AVP 96
b=RR:0
a=rtpmap:96 mpeg4-generic/48000/2
a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=0990; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;
a=control:rtsp://192.168.1.3:8554/avstream/trackID=7