作者: 亢少军

会话描述协议Session Description Protocol (SDP) 是一个描述多媒体连接内容的协议,例如分辨率,格式,编码,加密算法等。所以在数据传输时两端都能够理解彼此的数据。本质上,这些描述内容的元数据并不是媒体流本身。
从技术上讲,SDP并不是一个真正的协议,而是一种数据格式,用于描述在设备之间共享媒体的连接。SDP包含内容非常多,如下面内容所示为一个SDP信息。

//版本
v=0
//<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
o=- 3089712662142082488 2 IN IP4 127.0.0.1
//会话名
s=-
//会话的起始时间和结束时间,0代表没有限制
t=0 0
//表示音频传输和data channel传输共用一个传输通道传输的媒体,通过id进行区分不同的流
a=group:BUNDLE audio data
//WebRTC Media Stream
a=msid-semantic: WMS
//m=audio说明本会话包含音频,9代表音频使用端口9来传输,但是在webrtc中现在一般不使用,如果设置为0,代表不传输音频
//使用UDP来传输RTP包,并使用TLS加密, SAVPF代表使用srtcp的反馈机制来控制通信过程
//111 103 104 9 0 8 106 105 13 110 112 113 126表示支持的编码,和后面的a=rtpmap对应
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
//表示你要用来接收或者发送音频使用的IP地址, webrtc使用ICE传输,不使用这个地址, 关于ICE是什么后面2.5节会讲到
c=IN IP4 0.0.0.0
//用来传输rtcp的地址和端口,webrtc中不使用
a=rtcp:9 IN IP4 0.0.0.0
//ICE协商过程中的安全验证信息
a=ice-ufrag:ubhd
a=ice-pwd:l82NnsGm5i7pucQRchNdjA6B
//支持trickle,即sdp里面只描述媒体信息, ICE候选项的信息另行通知
a=ice-options:trickle
//dtls协商过程中需要的认证信息
a=fingerprint:sha-256 CA:83:D0:0F:3B:27:4C:8F:F4:DB:34:58:AC:A6:5D:36:01:07:9F:2B:1D:95:29:AD:0C:F8:08:68:34:D8:62:A7
a=setup:active
//前面BUNDLE行中用到的媒体标识
a=mid:audio
//指出要在rtp头部中加入音量信息
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
//当前客户端只接受数据,不发送数据,recvonly,sendonly,inactive,sendrecv
a=recvonly
//rtp,rtcp包使用同一个端口来传输
a=rtcp-mux
//下面都是对m=audio这一行的媒体编码补充说明,指出了编码采用的编号、采样率、声道等
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
//对opus编码可选的补充说明,minptime代表最小打包时长是10ms,useinbandfec=1代表使用opus编码内置fec特性
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
//下面就是对Data Channel的描述,基本和上面的audio描述类似,使用DTLS加密,使用SCTP传输
m=application 9 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
//可以是CT或AS,CT方式是设置整个会议的带宽,AS是设置单个会话的带宽。默认带宽是kbps
b=AS:30
a=ice-ufrag:ubhd
a=ice-pwd:l82NnsGm5i7pucQRchNdjA6B
a=ice-options:trickle
a=fingerprint:sha-256 CA:83:D0:0F:3B:27:4C:8F:F4:DB:34:58:AC:A6:5D:36:01:07:9F:2B:1D:95:29:AD:0C:F8:08:68:34:D8:62:A7
a=setup:active
//前面BUNDLE行中用到的媒体标识
a=mid:data
//使用端口5000,一个消息的大小是1024比特
a=sctpmap:5000 webrtc-datachannel 1024

以上就是一个SessionDescription的例子,虽然没有video的描述,但是video和audio的描述是十分类似的。 SDP中有关于IP和端口的描述,但是WebRTC技术并没有使用这些内容,那么双方是怎么建立“直接”连接的呢?建立起连接最关键的IP和端口是从哪里来的呢?这就需要ICE框架来完成这部分工作(参见后面的2.5节)。

注意:SDP由一行或多行UTF-8文本组成,每行以一个字符的类型开头,后跟等号(“ =”),然后是包含值或描述的结构化文本,其格式取决于类型。以给定字母开头的文本行通常称为“字母行”。例如,提供媒体描述的行的类型为“ m”,因此这些行称为“ m行”。

WebRTC交流群: 425778886
开源地址: https://github.com/kangshaojun
学习地址:https://ke.qq.com/course/package/32134

WebRTC通话原理-SDP协议相关推荐

  1. WebRTC通话原理

    WebRTC通话原理 目录 媒体协商-音视频编解码 网络协商 STUN TURN 媒体协商+网络协商 数据的交换通道 WebRTC API 一对一通话 1. 媒体协商-音视频编解码 比如: Peer- ...

  2. WebRTC通话原理(六)

    WebRTC通话原理-基本流程 基本流程 WebRTC通话最典型的应用场景就是一对一音视频通话,如微信或QQ音视频聊天.通话的过程是比较复杂的,这里我们简化这个流程,把最主要的步骤提取出来,如图所示. ...

  3. WebRTC通话原理-网络协商-NAT-ICE-STUN-TURN

    作者: 亢少军 彼此要了解对方的网络情况,这样才有可能找到一条相互通讯的链路.需要做以下两个处理. 获取外网IP地址映射. 通过信令服务器(signal server)交换"网络信息&quo ...

  4. SDP协议基本分析(RTSP、WebRTC使用)

    目录 一.介绍 二.标准 SDP 规范 1. SDP 的格式 2. SDP 的结构 (1)会话描述 (2)媒体描述 三.WebRTC 中的 SDP 一.介绍 SDP(Session Descripti ...

  5. WebRTC进阶-SDP协议详解

    文章目录 SDP结构 会话描述 会话创建者o 媒体描述 媒体信息 音频媒体信息 a=rtpmap a=fmtp 视频媒体信息 SSRC与CNAME PlanB与UnifiedPlan 网络描述 a=c ...

  6. WebRTC通话INCOMPATIBLE_DESTINATION问题排查、verto与STUN协议

    一个功能完整的WebRTC应用需要: 使用GetUserMedia API 控制麦克风和摄像头 使用一种会话协议和可能的外部辅助服务器定位对方端点并建立会话 使用ICE(和STUN和TURN)确定网络 ...

  7. WebRTC源码-信令之六:SDP协议与协商流程

    一.SDP协议概述 SDP(Session Description Protocol)是一个用来描述多媒体会话的应用层控制协议, 它是一个基于文本的协议,用于会话建立过程中的媒体类型和编码方案的协商等 ...

  8. 国标28181:什么是SDP协议

    概述 SIP和其他协议一样都有这样的一个要求:在会话开头时两端要有充分的信息交流.使用的两个协议就是定义在RFC 2974中的SAP(Session Announcement Protocol )和定 ...

  9. SIP协议-05 SDP协议

    文章目录 1 SDP简介 2 SDP协议格式 2.1 字段描述 2.1.1 Version(必选) 2.1.2 origion(必选) 2.1.3 Session Name(必选) 2.1.4 Con ...

最新文章

  1. postgres安装02--postgis
  2. java substance下载,做出漂亮的Java界面–substance.jar的使用 | 学步园
  3. 计算机网络-基本概念(5)【网络层】-IP多播
  4. TypeError: sequence item 0: expected str instance, int found
  5. html vbs 输入框,HTML_vbs实现的下拉框对应键入值,vbs实现的下拉框对应键入值 - phpStudy...
  6. Intent.ACTION_MAIN
  7. 0909 粗浅的认识编译原理
  8. 单片机c语言检测压力值,基于单片机的压力检测系统设计论文.doc
  9. Callback模式和Template模式
  10. 【JVM】CMS垃圾回收器(不推荐使用的垃圾回收器)
  11. ssis sql_如何在SSIS中使用SQL随机数
  12. 【渝粤教育】国家开放大学2019年春季 1344金融风险管理 参考试题
  13. php 监听redis,swoole如何监听redis数据
  14. 资源共享的两阶段交叉效率DEA模型及matlab应用:地区科技投入产出效率案例分析,文后有网盘链接
  15. 抓包工具Charles —— 绿化、抓包入门
  16. 新生周赛——YZJ的牛肉干
  17. 华为鸿蒙系统操作教程_鸿蒙OS Beta版怎么使用
  18. 概率图模型的一些基本概念与例子
  19. java和Android学习书籍
  20. [ctf.show.reverse] 吃瓜杯 签层饼,Tea_tube_pot

热门文章

  1. tis红石服务器交通系统,我的世界红石生存服务器TIS,真正的大神团队,惊叹世界的杰作...
  2. go-micro配置文件
  3. 微信小程序日历包含(阴历)- - -附效果图
  4. 小市值(股票)——Python量化
  5. 旧书网购_基于旧书的新工作簿
  6. CRE6959TL70V055
  7. 从0开始部署vue教程
  8. 【顺丰科技】2019校园招聘在线笔试编程题
  9. Linux-查询登入用户信息
  10. 中公教育 java讲师_【java讲师职责】中公教育集团2021年java讲师工作内容-看准网...