SDP协议详解

一、什么是SDP
SDP回话描述协议,它是一种信息格式的描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要的信息,用于两个会话实体之间的媒体协商。
SDP是用来描述多媒体会话的应用层控制协议,为会话通知,会话邀请和其他形式的多媒体会话初始化等目的提供了多媒体会话描述;它是一个基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使用其具有广泛的应用范围;SDP完全是一种会话描述格式—它不属于传输协议,他只是使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始化协议(SIP),实时流协议(RTSP),MIME扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现。

在SDP消息体最重要的是描述媒体信息:
  • 媒体类型(video,audio,bfcp,h255摄像机控制协议,etc)
  • 传输协议(RTP/UDP/IP,H.320,etc)
  • 媒体格式(G711,G721,AAC-LD.H.264 video,MPEG video,etc)
  • 多播或单播地址和端口
  • 本端带宽信息
  • 本端的加密信息

二、SDP协议结构
SDP由许多文本行组成,文本行的格式为<类型>=<值>,类型是一个字母,值是结构化的文本串,其格式依类型而定,<type>=<value>,每个SDP有一个会话级描述,多个媒体级描述。

SDP的文本信息包括:

  • 会话的名称和目的Session Description
    v=(协议版本)

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

    s=(会话名称)

    i=*(会话信息)

    u=*(URI描述)

    e=*(Email地址)

    p=*(电话号码)

    c=*(连接信息-如果包含在所有媒体中,则不需要该字段)
    c=IN IP4 192.168.1.191
    解释:c=<网络类型> <地址类型> <地址>,定义连接地址,其中地址类型可以为域名形式

    b=*(带宽信息)
    b=AS:1920
    解释:b=<类型>:<带宽>,定义本端可以接收的带宽,其中带宽可以分为CT和AS两类,CT是设置整个会议的带宽,AS是设置单个会话的带宽,它们的单位都是kbit/s。TIAS和AS的意义是一样的,只是单位是bit/s。

  • 会话存活时间 Time Description

  • t=(会话活动时间)

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

  • 构成会话的媒体(会话中包括多个媒体)

  • SDP的媒体信息Media Description

  • 媒体格式

    传输协议

    传输IP和端口

    媒体负载类型(VP8,VP9,H264,H265)

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

    • 音频m行
      m=audio 10004 RTP/AVP 0 1 3 //m=<媒体类型> <媒体端口> <传输协议> <编码pt值的集合>
      a=rtpmap:0 PCMU/8000 //a=rtpmap:<pt值> <音频协议> <采样率>
      a=rtpmap:1 1016/8000
      a=rtpmap:3 GSM/8000
      a=sendonly //a=本端媒体流的方向,取值包括sendonly/recvonly/sendrecv/inactive
      a=ptime:20 //a=打包时长
      a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:NHomSmlnXy4qRCwhVi9ANVcwZ3Q3cXVaLykzJ1Rf|2^31|1:1
      解释:音频能力一般协商协议、采样率。媒体能力是允许不对称的,这里的能力和pt值指的是本端允许接收的,而加密属性表示的是本端发送时使用的秘钥和加密算法。

    • 视频m行

    • m=video 10006 RTP/AVP 109 110 96 34 31 //m=<媒体类型> <媒体端口> <传输协议> <编码pt值的集合>
      a=rtpmap:109 H264/90000 //a=rtpmap:<pt值> <视频协议> <采样率>
      a=fmtp:109 profile-level-id=42801f; max-br=20010; sar=13 //a=rtpmap:<pt值> 分辨率、带宽、打包模式
      a=rtpmap:110 H264/90000
      a=fmtp:110 profile-level-id=42801f; packetization-mode=1; max-br=20010; sar=13
      a=rtpmap:96 H263-1998/90000
      a=fmtp:96 CIF4=1;CIF=1;QCIF=1;SQCIF=1;CUSTOM=352,240,1;CUSTOM=704,480,1
      a=rtpmap:34 H263/90000
      a=fmtp:34 CIF4=1;CIF=1;QCIF=1;SQCIF=1
      a=rtpmap:31 H261/90000
      a=fmtp:31 CIF=1;QCIF=1
      a=rtcp-fb:* nack pli //a=rtcp-fb:支持nack pli
      a=rtcp-fb:* ccm fir //a=rtcp-fb:支持fir方式的I帧请求
      a=rtcp-fb:* ccm tmmbr //a=rtcp-fb:支持流控

    i=*(媒体标题)

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

    b=*(带宽信息)

    k=*(加密秘钥)

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

    解释:
    max-br表示最大带宽
    max-mbps表示每秒传输的宏块大小
    max-fs表示一帧图像大小 max-fs=宽*高/256
    帧率 = max-mbps/max-fs
    packetization-mode表示载荷类型,范围0-2(0:单一NAL 1:非交错 2:交错,隔行扫描)
    profile-level-id:前两位来区分BP还是HP,64表示HP,42表示BP。后两位表示level-id,每个level-id对应不同的分辨率。当level-id和max-fs计算出分辨率不一致时,取大值。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值