webrtc会话建立

article/2025/9/23 12:19:43

WebRTC SDP 解析

还我漂漂拳哒哒哒关注

0.5032019.03.06 13:01:21字数 1,954阅读 3,150

sdp(Session Description Protocol)是一种会话描述协议,属于文本协议,即WebRTC中常说的信令(Signalling),是WebRTC用来协助建立p2p通讯的。主要用于协商双方通讯过程,传递基本信息,如:会话控制信息,用来开始和结束通话,即开始视频、结束视频这些操作指令;处理错误的消息;元数据,如各自的音视频解码方式、带宽;网络数据,对方的公网IP、端口、内网IP及端口。但是WebRTC的API并没有实现信令通信机制,所以使用者需要自己去实现。常见的信令交互图如下:

 

一旦信令服务建立好了,两个Peer之间建立了连接,理论上他们就可以进行点对点通讯了。

信令的交换过程如下图:

 

上图中Amy和Bob代表两个Peer,Amy发起会话邀请,首先会创建一个PeerConnection对象,然后打开本地音视频设备,将音视频数据封装成MediaStream添加到PeerConnection中。

Amy调用PeerConnection的CreateOffer方法创建一个用于offer的SDP对象,SDP对象中保存当前音视频的相关参数。Amy通过PeerConnection的SetLocalDescription方法将该SDP对象保存起来,并通过Signal服务器发送给Bob。

Bob接收到Amy发送过的offer SDP对象,通过PeerConnection的SetRemoteDescription方法将其保存起来,并调用PeerConnection的CreateAnswer方法创建一个应答的SDP对象,通过PeerConnection的SetLocalDescription的方法保存该应答SDP对象并将它通过Signal服务器发送给Amy。

Amy接收到Bob发送过来的应答SDP对象,将其通过PeerConnection的SetRemoteDescription方法保存起来。这样双方就建立好了通信通道,彼此可以发送媒体数据了。

 

以下是一个实际使用的SDP内容,即各个字段解析:

v=0

//sdp的版本号,目前为0

o=- 4024479478678337639 2 IN IP4 127.0.0.1

//格式:o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>

//username没有用-表示,sess-id为会话id,本处为4024479478678337639, sess-version为

//会话版本,本处为2,后面依次为

//TCP通信/IP4协议/本地ip

s=-

//会话名字,没有用-

t=0 0

//会话开始/结束时间,0表示没有限制

a=group:BUNDLE audio video

//group为BUNDLE表示audio和video共用一个媒体传输通道

a=msid-semantic: WMS

//WMS是WebRTC Media Stream的简称,改行定义了客户端支持同时传

//输多个流,一个流可以包括多个track

----------------------------------------Stream Description部分--------------------------

-------------audio 部分---------------

m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 102 0 8 105 13 110 113 126

//本处定义了audio相关的约定,9表示音频使用9端口来传输,一般不使用,如果为0表示不传输音频数据

//UDP/TLS/RTP/SAVPF表示使用的传输协议,udp表示使用udp传输,使用TLS加密,使用RTP协议封包,

//SAVPF表示使用SRTCP的反馈机制控制通信过程

//111 103 9 102 0 8 105 13 110 113 126表示该音频支持的编码,分别在下面的a=rtpmap处定义

c=IN IP4 0.0.0.0

//用来传输音频数据使用的ip地址,webrtc不使用该地址

a=rtcp:9 IN IP4 0.0.0.0

//用来传输rtcp的地址及端口号,webrtc中不使用

a=ice-ufrag:0uAB

a=ice-pwd:eeHkODiYv9t5qAZzT07XFzlO

//ice协商过程中使用的安全验证信息

a=ice-options:trickle

//使用trickle方式,sdp里面描述媒体信息和ice后选项的信息可以分开传输

a=fingerprint:sha-256 73:7D:6B:7C:68:F2:48:8E:66:93:EB:64:E7:D0:B7:14:30:71:47:00:A9:65:8B:AC:B7:84:E6:61:DF:22:11:F8

//dtls协商过程中需要的认证信息

a=setup:actpass

//表示客户端再dtls协商过程中,可以做客户端也可以做服务器

a=mid:audio

//音频标示

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

//在rtp头部中加入音量信息

a=recvonly

//单向通信,仅仅作为接收端

a=rtcp-mux

//rtp,rtcp使用同一个端口传输

a=rtpmap:111 opus/48000/2

a=rtcp-fb:111 transport-cc

a=fmtp:111 minptime=10;useinbandfec=1

//111表示opus编码的编号,opus编码/采样率/声道数

//Minptime=10代表最小包时长是10ms,useinbandfec=1表示使用opus编码内置的fec特性

a=rtpmap:103 ISAC/16000

a=rtpmap:9 G722/8000

a=rtpmap:102 ILBC/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=rtpmap:105 CN/16000

a=rtpmap:13 CN/8000

a=rtpmap:110 telephone-event/48000

a=rtpmap:113 telephone-event/16000

a=rtpmap:126 telephone-event/8000

//以上为audio支持的编码类型/采样率

----------------video部分----------------------

m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 125 104

c=IN IP4 0.0.0.0

a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:0uAB

a=ice-pwd:eeHkODiYv9t5qAZzT07XFzlO

a=ice-options:trickle

a=fingerprint:sha-256 73:7D:6B:7C:68:F2:48:8E:66:93:EB:64:E7:D0:B7:14:30:71:47:00:A9:65:8B:AC:B7:84:E6:61:DF:22:11:F8

a=setup:actpass

a=mid:video

a=extmap:2 urn:ietf:params:rtp-hdrext:toffset

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

a=extmap:4 urn:3gpp:video-orientation

a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01

a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay

a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type

a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing

a=recvonly

a=rtcp-mux

a=rtcp-rsize

a=rtpmap:96 VP8/90000

a=rtcp-fb:96 goog-remb

//支持使用rtcp包来控制发送方码流

a=rtcp-fb:96 transport-cc

a=rtcp-fb:96 ccm fir

//ccm是codec control using RTCP feedback message简称,意思是支//持使用rtcp反馈机制来实现编码控制,

//fir是Full Intra Request 简称,意思是接收方通知发送方发送完全帧过来

a=rtcp-fb:96 nack

//支持丢包重传

a=rtcp-fb:96 nack pli

//支持关键帧丢包重传

a=rtpmap:97 rtx/90000

a=fmtp:97 apt=96

a=rtpmap:98 VP9/90000

a=rtcp-fb:98 goog-remb

a=rtcp-fb:98 transport-cc

a=rtcp-fb:98 ccm fir

a=rtcp-fb:98 nack

a=rtcp-fb:98 nack pli

a=rtpmap:99 rtx/90000

a=fmtp:99 apt=98

a=rtpmap:100 H264/90000

a=rtcp-fb:100 goog-remb

a=rtcp-fb:100 transport-cc

a=rtcp-fb:100 ccm fir

a=rtcp-fb:100 nack

a=rtcp-fb:100 nack pli

a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f

//h264编码可选的附加说明

a=rtpmap:101 rtx/90000

a=fmtp:101 apt=100

a=rtpmap:127 red/90000

a=rtpmap:125 rtx/90000

a=fmtp:125 apt=127

a=rtpmap:104 ulpfec/90000

总结:SDP协议是Webrtc中一个非常重要的协议,很有必要搞清楚每个字段的真正意义。

欢迎关注本人公众号:


http://chatgpt.dhexx.cn/article/H3NRVkAl.shtml

相关文章

H.264视频的RTP有效负载格式 (RFC-3984)

RFC文档链接 本备忘录的状态 略 摘要 本备忘录描述了ITU-T建议的H.264视频编解码器和技术上相同的ISO/IEC国际标准14496-10视频编解码器的RTP有效载荷格式。RTP有效载荷格式允许在每个RTP有效载荷中对H.264视频编码器产生的一个或多个网络抽象层单元&#xff08;NALU&#…

音视频协议-RTP协议打包

目录 H264打包RTP的方法 RTP打包AAC 1. H264打包RTP的方法 RTP的特点不仅仅支持承载在UDP上&#xff0c;这样利于低延迟音视频数据的传输&#xff0c;另外一个特点是它允许通过其它协议接收端和发送端协商音视频数据的封装和编解码格式&#xff0c;这样固定头的playload typ…

webRTC原理及信令简介

WebRtc基本概念及协议介绍 术语 Signaling channel(信令通道) a) 一种资源&#xff0c;使应用程序可以通过交换信令消息来发现&#xff0c;建立&#xff0c;控制和终止对等连接 b) 信令消息是两个应用程序相互交换以建立对等连接的元数据。该元数据包括本地媒体信息&#xff0…

国网B接口调阅实时视频(INVITE)接口描述和消息示例

前面三篇blog分别介绍国网B接口注册、资源上报和资源信息获取&#xff0c;今天过一下国网B接口调阅实时视频相关的接口描述和消息示例&#xff0c;做过GB28181设备接入的都知道&#xff0c;国网B接口调阅实时视频流程和GB28181的基本一致的&#xff0c;区别在于SDP的一些参数描…

SIP协议之PRACK机制

SIP PRACK&#xff08;Provisional Response ACKnowledgement&#xff09;是由SIP的扩展协议RFC3262定义的&#xff0c;旨在为SIP的临时应答提供传输的可靠性。扩展机制使用选项100rel和临时应答方法PRACK实现。该机制同SIP协议中的2xx对INVITE应答的可靠机制类似。 流程图&am…

HackTheBox: Arctic靶场

废话不多说直接开始&#xff1a; 第一步是在计算机上运行NMAP&#xff1a; # Nmap 7.80 scan initiated Sat Sep 19 14:54:46 2020 as: nmap -sV -O -sC -p- -oN scan 10.10.10.11 Nmap scan report for 10.10.10.11 Host is up (0.021s latency). Not shown: 65532 filtered…

webrtc sdp详解

SDP&#xff08;Session Description Protocol&#xff09;是一种通用的会话描述协议&#xff0c;主要用来描述多媒体会话&#xff0c;用途包括会话声明、会话邀请、会话初始化等。 WebRTC主要在连接建立阶段用到SDP&#xff0c;连接双方通过信令服务交换会话信息&#xff0c;…

SIP协议之呼叫流程

SIP呼呼叫是SIP协议最基本的功能。一个用户呼叫另外一个用户最终完成多媒体通话。此处以常见的B2BUA的服务器模式进行介绍。 环境说明&#xff1a; 主叫&#xff1a;1006 192.168.1.131 被叫&#xff1a;1012 192.168.0.24 SIP服务器&#xff08;以下简称服务器&#xff09;…

GB/T 28181-2011、2016、2022变更对比

一、GB/T 28181-2016与GB/T 28181-2011变更对比 GB/T 28181-2016与GB/T 28181-2011相比&#xff0c; 除编辑性修改外主要技术变化如下&#xff1a; ----(1) 修改了标准名称&#xff1b; ----(2) 增加了媒体流TCP传输要求(见4.3.1&#xff0c; 5.2&#xff0c;附录F&#xff…

会话描述协议-SDP

目录 一. 前言 二. 标准SDP规范说明 会话级描述 媒体级描述 三. WebRTC的SDP 会话描述 媒体信息描述 网络描述 安全描述 服务质量描述 四. 其他 一. 前言 SDP&#xff08;Session Description Protocol&#xff09; 是一种通用的会话描述协议&#xff0c;例如在音视…

h264和h265视频流SDP描述详解

文章目录 1 SDP概述 2.SDP媒体描述极其扩展属性 2.1 m属性介绍 2.2 acontrol附加属性介绍 2.3 artpmap附加属性介绍 2.4 afmtp附加属性介绍 SDP&#xff08;Session Description Protocol&#xff09;会话描述协议&#xff0c;是一种用来描述信息格式的标准&#xff0c;它…

表格标签

表格标签 规则表格 不规则表格–跨行和跨列 表格的高级标签–标题标签和逻辑分区标签

Android实现Excel表格样式

原理描述&#xff1a; 想写来着&#xff0c;但是似乎描述不太清楚。效果图来着&#xff0c;没找到好的视频录制软件&#xff0c;直接上代码吧。 代码&#xff1a; 1、xml布局文件 自定义控件的包名删除了部分&#xff0c;需要重新导入自定义控件&#xff01;&#xff01;&a…

Apache POI 操作Excel表格使用详解 最全

1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。 (2)POI结构说明 包名称 说明 HSSF 提供…

022_Table表格

1. Table表格例子 1.1. Table表格用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作。 1.2. Table Attributes 参数 说明 类型 可选值 默认值 data 显示的数据 array 无 无 height Table的高度, 默认为自动高度。如果height为number类型…

java 导入导出excel表格

java 导入导出excel表格 业务上有需求上传excel表格并读取内容&#xff0c;本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.4.0&l…

python逻辑回归

出现函数重名问题 异常抛出 异常抛出 #逻辑回归测试 import pandas as pd from sklearn.linear_model import LogisticRegression as LR filename C:/Users/29463/OneDrive/桌面/bankloan.xls data pd.read_excel(filename) #print(data) x data.iloc[:,:8].values y data…

实现带标题的ListView

在一些项目中&#xff0c;往往有要求为ListView里的内容分类&#xff0c;比如按日期分类&#xff0c;就要把相同日期的项目放在一起。可以看一些示例图&#xff0c;会清楚一些&#xff1a; 以上根据标题来进行分类&#xff0c;实现代码如下&#xff1a; 首先是数据项的模型…

java操作excel表格详解

在日常工作中&#xff0c;对Excel工作表格的操作处理可是多的数不清楚&#xff0c;下面是java语言对其的操作&#xff0c;有需要的小伙伴可以参考下 使用场景 1、将用户信息导出为excel表格&#xff08;导出数据…) 2、将Excel表中的信息录入到网站数据库(习题上传…&#xf…

安卓表格框架-ExcelView

转载请标明来源&#xff1a;安卓表格框架-ExcelView_分享记录-CSDN博客 Github地址&#xff0c;欢迎star&#xff1a;https://github.com/September26/ExcelView 一.项目介绍 项目是仿照WPS中Excel的功能实现的&#xff0c;实现了显示&#xff0c;滑动&#xff0c;编辑等基本…