sdp 协议二

下面来看一个例子。

      v=0
      o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
      s=SDP Seminar
      i=A Seminar on the session description protocol
      u=http://www.example.com/seminars/sdp.pdf
      [email protected] (Jane Doe)
      c=IN IP4 224.2.17.12/127
      t=2873397496 2873404696
      a=recvonly
      m=audio 49170 RTP/AVP 0
      m=video 51372 RTP/AVP 99
      a=rtpmap:99 h263-1998/90000

下面对行添加上注释:

v=0 是版本号,一般都是0版本,没有次版本号。

o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
这个是媒体源的介绍:
    username 是登录名,如果不支持登录名,可以用 - 替代,这边登录名不能有空格
    sess-id 是一串数字字符串,是该会话的唯一标识,这个创建可以是流的创建者任意创建,不过建议加上时间戳以保证数据的唯一性。
    sess-version 这个是一个对会话描述的数字。这个数字也是流的创建者自行创建,不过这个数字要根据会话的修改不停增加,该数字串也推荐加上时间戳。
    nettype 网络的类型,上该样例中用到IN类型
    addrtype 地址类型,本身定义了 IP4 和 IP6。 也可能定义其他的类型。
    unicast-address 单播地址是根据 addrtype填写的一个主机地址, IP4 给出主机的域名,如果域名不能用,就给出对应的是以点分离的4个十进值数,对IP6也是域名优先,如果域名不行,再死IP6的地址描述。
s=<session name>
    有且必须一个, 是文本显示。
i=<session description>
    每个会话至多有一个该会话描述,每个单独的流至多有一个描述。可选。
u=<uri>
    就像 wwww 服务一样,对资源的一个唯一路径描述。可选。之多一个。
e=<email-address>
p=<phone-number>
    这两个字段指明维护会话人员的联系方式,最新版本不是必须的,以前的版本可能必须有一个邮箱或者联系电话 两者之一。
    p=+86 617 555-6011 电话必须添加区域代码。比如这里 +86.
    e=Jane Doe <[email protected]>  两种都可以
    [email protected] (Jane Doe)  建议下面这种,兼容性更强
c=<nettype> <addrtype> <connection-address>
    包含链接信息:
    nettype 网络类型, IN 代表英特网,未来可能定义更多类型
    addrtype 地址类型, 定义了 IP4 和 IP6 ,未来可能定义更多类型
    connection-address 链接地址
    可能后面还会加一些字段,这个根据 addrtype 绝对。

    如果多播的话,ip地址就要填写多播地址,多播地址后面需要填写 0到255的 数据包存活值[TTL]。尽管TTL必须设置,但是并不建议用这个来做多播的流量控制。IPv6不使用TTL限定多播。多播格式如下:
    c=IN IP4 224.2.36.42/127
    <base multicast address>[/<ttl>]/<number of addresses>

    可以有多个 c= 参数,如:
      IPv4
      c=IN IP4 224.2.1.1/127
      c=IN IP4 224.2.1.2/127
      c=IN IP4 224.2.1.3/127

      IPv6
      c=IN IP6 FF15::101/3
      <=等价=>
      c=IN IP6 FF15::101
      c=IN IP6 FF15::102
      c=IN IP6 FF15::103
b=<bwtype>:<bandwidth>
    可选,指定构建 该流或者会话 的建议带宽。bwtype是bandwidth的数字或者字母修饰。
    如果多路流,"b=CT:..."来给出总宽带建议带宽。
    "b=AS:..." 指应用程序指定带宽。
    可以使用 X- 来定义流类型的名字,不推荐。
    b=X-YZ:128
t=<start-time> <stop-time>
    如果会话是不定期的发生,该行会有多个,如果会话时间有规律,可以加上下面介绍的 r= 来减少 t= 的重复行。
    这个时间戳是 NTP 时间,也就是 1900 年以来的秒数。64位存储,该值在2036年结束,后面怎么定义,还在讨论。
    stop-time 为0 就表示不会停止,
    一般来说会话在 start-time 后才开始建立,我们如果 start-time 设置为0, 会话那就可以随时都可以建立了。
    当然,协议是不建议创建永久会话的。
r=<repeat interval> <active duration> <offsets from start-time>
    重复时间,这个是对t= 的优化,使用方法是接在 t= 后面,如下设置未来3个月每周三10点每周四11点播放一个小时:
      t=3034423619 3042462419 #第一个星期三的时间戳  
      r=604800 3600 0 90000 # 播放周期为一个星期 播放时间为一小时 第一个重复播放时间偏移为0s  第二个重复播放时间偏移为25*3600s
    可以使用单位:
      d - days (86400 seconds)
      h - hours (3600 seconds)
      m - minutes (60 seconds)
      s - seconds (allowed for completeness)
    改为:
      r=7d 1h 0 25h  #间隔7天 播放1小时 第一个播放偏移为0 第二个播放偏移为25h
    这样就更加直观了,注意没有年和月的单位。
z=<adjustment time> <offset> <adjustment time> <offset> ....
    这个是为了解决有的区域采取夏令营时间调整问题,我们在上世纪九十年代好像使用过,不过后面我们电力充足就不在采用了。
k=<method>
k=<method>:<encryption key>
    如果是加密通道传输的,可以通过这个来传递密码,不过不推荐使用这种方式,现在可以通过新的方式来交换密匙。
    k=prompt 无密码
    k=uri:<URI to obtain key> 密匙获取url
    k=base64:<encoded encryption key> base64加密的密匙
    k=clear:<encryption key> 传递裸露的密匙,一般还是使用 base64 做一次编码。
a=<attribute>
a=<attribute>:<value>
    a= 是对sdp的属性扩展,a= 可以在会话中定义扩展属性,也可以在流中定义扩展属性,可以有任意数量的 a= 行。
    a= 虽然也是文本行,但是必须是 ISO-10646/UTF-8 的 US-ASCII。这个和其他文本行可能要受 charset 影响不一样。
    a= 必须在 IANA 中定义,如果没有定义,会被解释器忽略。
m=<media> <port> <proto> <fmt> ...
    media 流的类型有, "audio", "video", "text", "application" 和"message"。以后可以扩展新的类型。
    port 这个是 c= 中的地址中的端口,在 proto 中定义传输数据的协议,如果流需要用到其他端口,我们可以其他属性中定义,比如我们rtcp协议用到 a=rtcp: 来定义。
    如果组播的话,可以使用:
       m=<media> <port>/<number of ports> <proto> <fmt> ...
    例如:
       c=IN IP4 224.2.1.1/127/2
       m=video 49170/2 RTP/AVP 31
    proto 目前有 udp, RTP/AVP, RTP/SAVP 三种,以后可能会定义其他协议。

参考

猜你喜欢

转载自blog.csdn.net/u012939880/article/details/107344981