SDP协议

285 阅读2分钟

每一个SDP都是以嵌套的方式定义的, 最外层是会话层其次是媒体层, 媒体层有分为音频和视频, 音频视频里有分别有各自的属性的定义.

SDP规范

  • Key = Value

  • Key : 

  • m(media A/V)

  • a(属性)

  • c(connection)

  • v(version)

  • s(session会话)

  • o(owner, 谁拥有这个session)

  • Value: 值比较多, 可以从rfc4566文档查看

其中:

  • V : 每次协商版本号都不一样, 累加(1、2、3)

  • O : owner, 如果 key为“-”表示不关系此属性, 后面的数字不使用,不必关心

  • m : media, 某一种类型的媒体数据;

  • audio : 音频媒体数据

  • 9 : 端口号,但是webrtc不用此端口号,而是使用ICE进行网络传输, 但是如果这个数字为“0”,表示媒体协商没有成功.

  • UDP/TLS/RTP/SAVPF : 底层使用的UDP协议/使用TLS加密/ UDP之上使用RTP协议/支持RTCP协议 audio video protocal feedback

  • 111 103 104 : payload type

  • a : 对上面m行的属性说明

  • mid : media ID = 0

  • rtpmap : 对rtp进行扩展, payload type 111 使用的opus编解码器/采样率48000/双通道

  • m : video, 参考上面audio信息即可理解

标准SDP信息中不包含的信息:  ICE-FULL 和 ICE-LITE

webrtc实现了一套自己的传输控制 即ICE, 每个终端都会收集candidate, candidate又有不同的类型, 不同的类型有不同的优先级, 其中ice会对candidata的有效性进行验证, 验证过程分为ice-lite 和ice-full两种, 一端向另一端发送stun request, 另一端返回stun response, 以表明candidate是可用的.

  • a=ice-lite : 只是客户端发送request, 服务端返回response

  • a=ice-full : 双方都向对方发送request, 并且都回复对方response

  • 如果每个客户端都验证的话对于服务器来说负载太重了, 所以简化了逻辑, 只是客户端发送request,服务端返回response即可.

  • 如果没有a=ice-lite 属性, 即默认使用ice- full 双向验证

  • webrtc默认使用a=ice-full

plane B 

在webrtc中已被UnifiedPlan替代. 每一个m行表示一个类型的多媒体信息, 例如多个音频源, 都会在一个m行下面, 会以ssrc进行区分.

UnifiedPlan

多个媒体源流分布在不同的m行下面, 更加灵活

关于以上内容的其他参考连接: blog.csdn.net/u012538729/…