SDP协议也是文本协议,只需要按照协议本身的格式填充。SDP协议格式即详细信息如下:

会话描述

格式及举例

v=(protocol version)

v=0

o=(owner/creator and session identifier)

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

o=hua 253183  51827  IN  IP4 192.168.2.2

s=(session name)

会话名

i=*(session information)

会话信息

e=*(email address)

e=zte@isi.edu(generaltext或e=Mr.Wang

p=*(phone number)

p=+86-0755-26773000-7110(wang)

orp=+16172536011

c=*(connection information-如已经包含在所有媒体中则该行不需要)

c=网络类型地址信息多点会议包括TTL连接地址
c=IN IP4 192.168.2.2

c=IN IP4 192.168.2.23

b=*(bandwidthinformation)

b=修改量(CTConferenceTotal

IASApplication-specificMax):带宽值(kb/s)

b=CT:120

一个或更多时间描述

z=*(time zone adjustments)

时区调整

k=*(encryption key)

k=方法:密钥或k=方法

时间描述

t=(timethesessionisactive)

开始时间、结束时间,单位秒,十进制NTP

t=2873397468   2873404969

r=*(zero or more repeat times)

重复时间、活动持续时间以开始时刻为参考的偏移列表,单位秒

媒体描述

m=(media name and transportaddress)

m=媒体端口、传送格式列表

m=audio 49170 RTP/AVP 0 3

协议为RTP

i=*(mediatitle)

媒体称呼

c=*(connectioninformation)

如已经包含在会话级描述则为可选

b=*(bandwidthinformation

同c

k=*(encryptionkey)

会话级为摸认值,同c

a=*(zero or more session attributelines)

a=属性或a=属性:值

a=sendrecv

a=ptime:20

a=rtpmap:0 PCMU/8000

说明:
1. v,o,s,t,m为必须的,其他项为可选;
2. 如果SDP语法分析器不能识别某一类型(Type),则整个描述丢失;
3. 如果“a=”的某属性值不理解,则予以丢失;
4. 整个协议区分大小写;
5. “=”两侧不允许有空格;
6. 会话级的描述就是媒体级描述的缺省值;
7. 所有格式均为=。

SDP各type的详细解释:

会话描述:

1. 协议版本:v=SDP版本 目前为0,没有子版本。

2. 会话源:

<用户名>     用户在发起主机上登录名,如果主机不支持用户标识的概念,则为”-”。

<会话id>      一般为数字串,其分配由创建工具决定,建议用网络时间协议(NTP)时戳,以确保唯一性。

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

<网络类型>  为文本串”IN”。
       <地址类型> “IP4”(可为域名或点分十进制)/”IP6”(域名或压缩文本地址形式)

<地址>          按照上述的IP4或者IP6格式写出

3. 会话: s=CounterPath eyeBeam 1.5字符表示的会话名

4. Email地址:e=给出会议负责人的联系信息。他不一定是创建会议公告的人。电话号码p=给出会议负责人的信息,他不一定是创建会议公告的人

6. 连接数据:c=媒体连接数据,会话级为媒体级的默认值

7. 带宽:b=给出会话或媒体所用带宽,单位为kbit/s.修饰语:CT(会议总带宽,表示所有地点所有媒体的总带宽),AS(应用特定最大带宽,表示一个地点单一媒体带宽)时间描     述:

8. 加密密钥:k=已定义的方法有k=clear:<加密密钥>密钥没有变换 k=base64:<编码密钥>已编码,因为它含有SDP禁用, k=uri:<获得密钥的URI>k=prompt。SDP没有提供密   钥但该会话或媒体流是要求加密的。

9.属性:a=一个m=行可有多个a=行,SDP建议扩展如下:

会话级:

a=cat:<类别>//给出点分层次式会话分类号,供接收方筛选会话

a=keywds:<关键词>//供接收方筛选会话

a=tool:<工具名和版本号>//创建会话描述的工具名和版本号

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:<语言标记>//会话描述的缺省语言或媒体描述的语言

10  m = <媒体>有5种类型:音频/视频/应用(如白板信息)/数据(不向用户显示的)/控制
              <端口>媒体流发往传输层的端口。取决于c=行规定的网络类型和接下来的
              <传送层协议>对UDP为1024-65535;对分层编码应用c = 行没有多播地址,要给    出多播端口数,如:m=video 49170/2 RTP/AVP31(表示:端口49170和49171为   第一对RTP/RTCP端口,49172和49173为第二对的端口)。

<传送层协议>与c=行的地址类型有关。对大多的媒体在RTP/UDP上传送,定义2种:RTP/AVP:IETFRTP协议,音/视频应用文档。在UDP上传送。Udp:UDP协议。

<格式列表>:对音/视频,就是音/视频应用文档中规定媒体净荷类型。列表中都有可能用,但第一个为缺省值,分为静态绑定和动态绑定:静态绑定即使媒体编码方式有 净荷类型号完全确定,动态绑定则媒体编码方式(如时钟频率,音频信道数等)没有完全确定,需要进一步的属性说明。分别举例如下:G711A的PCM编码单信道Audio,其净荷类型号为8,把它发往UDP端口49232,m=audio 49232 RTP/AVP8;16bit线性编码,单声道声,采样率速率8kHz,其动态净荷类型号98,m=audio 49232 RTP/AVP 98;a=rtpmap:98 L16/16000/2

说明:
1. a=rtpmap:<净荷类型号><编码名>/<时钟速率>[/<编码参数>]对音频,编码参数为音频信道数;对视频没有定义
2. SDP允许rtpmap规定实验性编码格式,但编码名必须以X-起,表示此格式还没正式登记。

SDP用于构建INVITE和200OK响应消息的消息体,供主\被叫用户交换媒体信息。

a=rtpmap:96 MPEG4-GENERIC/32000/2 //rtpmap的信息,表示音频为AAC的其sample为32000

a=fmtp:96 profile-level-id=15;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1210 //config为AAC的详细格式信息

a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4D6033;sprop-parameter-sets=J01gM41oCgPabIAAAAMAgAAADweKEVA=,KO4C0kg=

/* from http://www.iana.org/assignments/rtp-parameters last updated 05 January 2005 */
/* payload types >= 96 are dynamic;
* payload types between 72 and 76 are reserved for RTCP conflict avoidance;
* all the other payload types not present in the table are unassigned or
* reserved
*/
static const struct {
int pt;
const char enc_name[6];
enum AVMediaType codec_type;
enum AVCodecID codec_id;
int clock_rate;
int audio_channels;
} rtp_payload_types[] = {
{0, "PCMU", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW, 8000, 1},
{3, "GSM", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{4, "G723", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_G723_1, 8000, 1},
{5, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{6, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 16000, 1},
{7, "LPC", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{8, "PCMA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW, 8000, 1},
{9, "G722", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_ADPCM_G722, 8000, 1},
{10, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 2},
{11, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 1},
{12, "QCELP", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_QCELP, 8000, 1},
{13, "CN", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP2, -1, -1},
{14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3, -1, -1},
{15, "G728", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{16, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 11025, 1},
{17, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 22050, 1},
{18, "G729", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{25, "CelB", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1},
{26, "JPEG", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MJPEG, 90000, -1},
{28, "nv", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1},
{31, "H261", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H261, 90000, -1},
{32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG1VIDEO, 90000, -1},
{32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO, 90000, -1},
{33, "MP2T", AVMEDIA_TYPE_DATA, AV_CODEC_ID_MPEG2TS, 90000, -1},
{34, "H263", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H263, 90000, -1},
{-1, "", AVMEDIA_TYPE_UNKNOWN, AV_CODEC_ID_NONE, -1, -1}
};

a=fmtp:<format> <format specific parameters>
   该属性值指定一个SDP不了解的特殊格式,该格式是媒体的格式的一种。  
   定义指定格式的附加参数

常见的如下:

a=rtpmap:103 ISAC/16000
a=rtpmap:102 iLBC/8000
a=rtpmap:3 GSM/8000
a=rtpmap:106 telephone-event/8000
a=rtpmap:13 CN/8000
a=rtpmap:117 red/8000
a=rtpmap:18 G729a/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:2 G726-32/8000
a=rtpmap:4 G723/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 G726-40/8000
a=rtpmap:97 G726-24/8000
a=rtpmap:98 G726-16/8000
a=rtpmap:100 NSE/8000
a=rtpmap:101 telephone-event/8000
a=rtpmap:0 pcmu/8000
a=rtpmap:8 pcma/8000
a=rtpmap:3 gsm/8000
a=rtpmap:18 G729/8000
a=rtpmap:98 iLBC/8000
a=rtpmap:97 speex/8000
a=rtpmap:101 telephone-event/8000

原文链接:http://blog.csdn.net/wh8_2011/article/details/46481055

SDP协议简述的更多相关文章

  1. 蓝牙的SDP协议总结

    1.概念     SDP协议让客户机的应用程序发现存在的服务器应用程序提供的服务以及这些服务的属性.SDP只提供发现服务的机制,不提供使用这些服务的方法.每个蓝牙设备都需要一个SDP Service, ...

  2. SDP协议译稿(Part 1)

    本文的翻译内容是基于Bluetooth Core Spec 2.1+EDR 协议中对SDP的描述,很多都是个人的理解,难免有疏漏,有争议或者疑问的地方,欢迎在此留言进行探讨. 2. Overview ...

  3. SDP协议分析

    一.SDP协议介绍 SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP).会话初始协议(SIP).实时流协议(RTSP).MIME 扩展协 ...

  4. SDP协议

    会话描述协议(SDP)为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述.它只是用来描述,而不是一种传输协议.举例,在SIP协议的Message Header的Content- ...

  5. 1.Servlet介绍 和 HTTP协议简述

    1. Servlet是什么? sun公司制订的一种用来扩展web服务器功能的组件规范. (1)扩展web服务器功能 注: 早期的web服务器只能处理静态资源的请求,即需要事先将 html文件准备好,并 ...

  6. [转] SDP协议

    [转] SDP协议 http://blog.csdn.net/dxpqxb/article/details/18706471 1.SDP协议概述 SDP(Session Description Pro ...

  7. 蓝牙SDP协议概述

    之前写了一篇 bluedroid对于sdp的实现的源码分析   ,他其实对于sdp 协议本身的分析并不多,而是侧重于 sdp 处于Android bluedroid 架构中的代码流程,这篇文章,是针对 ...

  8. TCP握手协议简述

    TCP握手协议简述在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器 ...

  9. (转)SDP协议概述

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

随机推荐

  1. nfs挂载

    安装: yum install nfs-utils rpcbind 配置共享目录:vim /etc/exports /xxx/cloudcms *(insecure,rw,async,no_root_ ...

  2. web.xml servlet、servlet-mapping配置

    Servlet常称为服务器端小程序,即运行在服务器端的程序,用于处理及响应客户的请求. Servlet类是个特殊的java类,继承于HttpServlet. --------------------- ...

  3. 20145303刘俊谦 《Java程序设计》实验四 实验报告

    实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如"查网络&q ...

  4. linux中__weak关键字的作用

    答:1.可以重新定义同名函数或变量而编译时不报错

  5. RabbitMQ脑裂

    在RabbitMQ3.4.x中会出现脑裂的现象,本文通过实验验证此脑裂现象,愿小伙伴们少走弯路. Preview 网上有两篇帖子(需要FQ) https://groups.google.com/for ...

  6. Mac OS build caffe2 Error:This file was generated by an older version of protoc which is

    问题所在 我们可以发现这个错误跟protobuf的版本有关,因此我们可以执行script/diagnose_protobuf.py 我们可以看到,pip install protobuf 和 brew ...

  7. XML CDATA是什么?

    XML CDATA是什么? 投稿:mdxy-dxy 字体:[增加 减小] 类型:转载   这篇文章主要为大家介绍下XML CDATA是什么,学习xml的朋友可以参考下     All text in ...

  8. IE8下打印内容缩小问题

    去掉启动缩小字体填充的设置项勾选 来自为知笔记(Wiz)

  9. 数据结构实习 - problem K 用前序中序建立二叉树并以层序遍历和后序遍历输出

    用前序中序建立二叉树并以层序遍历和后序遍历输出 writer:pprp 实现过程主要是通过递归,进行分解得到结果 代码如下: #include <iostream> #include &l ...

  10. 关于Visual Studio 2010自动添加头部注释信息

    作为一个万年潜水党,不关这一篇文章技术含量如何,也算是一个好的开始吧.   在日常的开发中我们经常需要为类库添加注释和版权等信息,这样我们就需要每次去拷贝粘贴同样的文字,为了减少这种重复性的工作,我们 ...