webRTC原理及信令简介

article/2025/9/23 12:21:20

WebRtc基本概念及协议介绍

术语

  • Signaling channel(信令通道)
    a) 一种资源,使应用程序可以通过交换信令消息来发现,建立,控制和终止对等连接
    b) 信令消息是两个应用程序相互交换以建立对等连接的元数据。该元数据包括本地媒体信息,例如媒体编解码器和编解码器参数,以及两个应用程序可能相互连接以进行实时流传输的可能的网络候选路径
    c) 信令通道通常由信令服务器提供

  • Peer(对等节点)
    a) 接入同一webrtc房间(逻辑划分的管理单元)的进行实时双向流传输的任何设备或应用程序

  • Session Traversal Utilities for NAT (STUN)
    a) 一种协议,用于发现您的公共地址(公网IP)并确定路由器中可能阻止与对等方直接连接的任何限制条件
    b) Stun服务由STUN服务器提供

  • Traversal Using Relays around NAT (TURN)
    a) 通过打开与TURN服务器的连接并通过该服务器中继所有信息来绕过对称NAT限制的服务器
    b) 当P2P链接建立失败,仍需要保证功能可用,这里就需要TURN服务器对所有数据进行中继。建立relay模式的链接
    c) TURN服务由TURN服务器提供

  • relay模式即使用TURN服务

  • Session Description Protocol (SDP)
    a) 一种描述连接的多媒体内容的标准,例如分辨率,格式,编解码器,加密等,以便一旦数据传输,两个对等方就可以相互理解

  • SDP Offer
    a) 发起建立会话链接的SDP消息(主动发送方),生成会话描述以创建或修改会话
    b) 比如想要和一个对等节点建立链接。首先就得告诉对端,自身终端信息(分辨率,格式,编解码器,加密),而为了描述自身终端信息产生SDP 就被称为SDP offer

  • SDP Answer
    a) answer SDP由响应者响应邀约者发送的offer SDP
    b) Answer主要包含终端协商结果(answer端终端信息)。例如,如果offer中的所有音频和视频流都被接受

  • Interactive Connectivity Establishment (ICE)
    a) 一个允许您的Web浏览器(webrtc终端)与对等方连接的框架

  • ICE Candidate(Candidate)
    a) 一种能与对等方用来通信的一种方法(方式)

STUN TURN ICE如何工作

  • 对等方A和B都使用webrtc对等双向媒体流的情况,通信流程(A呼叫B)
    a) A的应用程序生成SDP offer
  1. SDP offer包含有关A的应用程序想要建立的会话的信息,包括要使用的编解码器,这是音频还是视频会话等
  2. 还包含 ICE candidates,它们包含B应用程序尝试连接A应用程序需要用到的A的IP和port信息

b) A的应用程序向STUN服务器发出建立ICE候选者列表请求

  1. A的应用程序收集ICE候选
  2. 服务器返回发起请求的公共IP地址和端口对。A的应用程序将每对添加到ICE候选列表中

c) A的应用程序向STUN服务器发出建立ICE candidates请求

  1. A的应用程序收集ICE candidates
  2. 服务器返回发起请求A的公网 IP地址和端口对。A的应用程序将每对IP及端口 添加到 ICE candidates中

d) A的应用程序通过信令通道将SDP传递给B的应用程序

  1. WebRTC标准未指定用于此交换的传输协议。它可以通过HTTPS,安全WebSocket或任何其他通信协议执行
  2. 在此,B收到A的公网地址及端口

e) B的应用程序生成一个SDP Answer并发给A

  1. B的应用程序遵循上一步中A使用的步骤:收集ICE candidates等。然后B的应用程序需要将此SDP Answer通过信令服务器返回给A的应用程序
  2. 在此,A收到B的公网地址及端口

f) A和B执行一系列连接检查

  1. 每个应用程序中的ICE算法都从对方SDP中收到的列表中获取ICE candidates IP /端口对,并向其发送STUN请求
  2. 果另一个应用程序返回了响应,则原始应用程序认为检查成功,并将该IP /端口对标记为有效的ICE候选者

g) 开始数据传输

  1. 如果任何一个应用程序都找不到通过连通性检查的IP /端口对,它们将向TURN服务器发出STUN请求以获取媒体中继地址
  2. 中继地址是一个公共IP地址和端口,用于转发与应用程序之间接收到的数据包并设置中继地址。然后将该中继地址添加到候选列表,并通过信令通道进行交换

h) 结构图
在这里插入图片描述

相关协议

  • 作用分类
    a) 传输音视频数据相关协议:UDP、DTLS、RTP/SRTCP
    b) 传输自定义应用数据相关协议:UDP、DTLS、SCTP

  • UDP、DTLS(加密信道建立)
    a) DTLS是UDP协议的加密协议

  • RTP/SRTP、RTCP/SRTCP(音视频数据传输)
    a) RTP(Realtime Transport Protocol):实时传输协议,主要用来传输对实时性要求比较高的数据,比如音视频数据
    b) RTCP(RTP Trasport Control Protocol):RTP传输控制协议,主要用来监控数据传输的质量,并给予数据发送方反馈,比如监控传输的质量,并在会话双方之间进行同步,方便WebRTC根据传输质量进行动态调整,比如传输的速率、视频的码率等
    c) SRTP:RTP包的加密
    d) 音视频数据的发送过程:

  1. 通信双方:通过DTLS握手,协商生成一对密钥
  2. 数据发送方:将音视频数据封装成RTP包,将控制数据封装成RTCP包
  3. 数据发送方:利用加密密钥,对RTP包、RTCP包进行加密,生成SRTP包、SRTCP包
  4. 数据发送方:通过UDP传输SRTP包、SRTCP包
  • SCTP(自定义应用数据传输)
    a) SCTP依赖DTLS建立的加密信道
    b) 自定义应用数据的发送
  1. 通信双方:通过DTLS握手,协商生成一对密钥
  2. 数据发送方:将自定义应用数据,通过密钥进行加密,生成SCTP包
  3. 数据发送方:通过UDP传输SCTP包
  • webRtc使用rtp来传输数据,使用rtcp传输控制指令

  • DTLS-SRTP
    a) 是DTLS的一个扩展,将SRTP加解密与DTLS的key交换和会话管理相结合
    b) 接收端使用 DTLS-SRTP;自DTLS下层的传输层收到报文之后,需要根据包头特征手动区分做demultiplexing,一般可以如下进行
    检查第一个报文的第一个字节

  1. 是[0, 1]时,表示可能是STUN报文
  2. 是[128, 191]时,表示可能时RTP(SRTP)报文
  3. 是[20, 63]时,表示可能是DTLS record layer报文
  • RTCP报文格式
    a) rtcp头部结构如下图
    在这里插入图片描述
    b) SR(Sender Report RTCP Packet)

1.发送端通过发送SR包告诉接收端发送端的信息,SR包分为三部分:头部header,发送者信息senderInfo和反馈块ReportBlock。
2.如果发送端也作为接收端,那么才会存在ReportBlock,当存在多个码流的时候就会反馈多个ReportBlock。
3.SR包的负载类型是200
4.详见:https://blog.csdn.net/momo0853/article/details/88051312

c) RR(Receiver Report RTCP Packet)

1.接收端通过RR包反馈接收端的接收情况,RR包分为两个部分:头部header和反馈块ReportBlock。
2.参考SR包,RR包的负载类型是201
3.结构如下:
在这里插入图片描述
4.其包含信息有:
(1).reporter ssrc:rr报告发送者的ssrc,也就是rtp报文接受者自己的ssrc.
(2).reportee ssrc:rr报告接受者的ssrc,也就是rtp报文发送者的ssrc.
(3).cumulative number of packet lost:累积报文丢失总数,该字段是一个24-bits的有符号整数
(4).Loss fraction:丢包率
(5).LSR:最新接收到SR报文的时间戳,具体值是,SR报文里64位NTP时间戳中的32位bit的时间戳。如果没有收到SR报文,该字段为0
(6).DLSR:接收到SR报文的时刻与发送该RR报文时刻的时间差值
(7).RTT:发送者计算的发送来回时间,发送者可以通过RR报文中的LSR和DLSR来计算RTT

SDP协议

  • **m=audio 9832 RTP/AVP 97 **

格式为 m=<媒体类型> <端口号> <传输协议> <媒体格式 >
媒体类型:audio,表示这是一个音频流
端口号:9832,表示UDP发送的目的端口为9832
传输协议:RTP/AVP,表示RTP OVER UDP,通过UDP发送RTP包
媒体格式:表示负载类型(payload type),一般使用97表示AAC

  • a=rtpmap:97 mpeg4-generic/44100/2

格式为a=rtpmap:<媒体格式><编码格式>/<时钟频率> /[channel]
mpeg4-generic表示编码,44100表示时钟频率,2表示双通道

  • H264_FMTP
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f

a) profile-level-id=42001f

Profile: 66(hex: 42)
Level: 3.1(hex:1f)转成十进制,再除以10

b) packetization-mode=1,表示I帧会拆分成多个rtp包发送,对于264来说,rtp payload的第一个字节(0x7C)的低5bit为(11100),十进制为28,
代表此nalutype为FU-A,多包封装类型

丢包重传机制NACK

  • webRtc中,前向纠错(FEC)和丢包重传(NACK)是抵抗网络错误的重要手段

a) FEC在发送端将数据包添加冗余纠错码,纠错码连同数据包一起发送到接收端;接收端根据纠错码对数据进行检查和纠正
b) NACK则在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端发送缓冲区的支持

  • SDP协商NACK

a) NACK是RTP层的反馈参数,在本端收集Codec属性时被一起收集,在SDP协商过程中,NACK属性被加到offer/answer中.
b) 接收端接收到offer后,跟随的NACK信息最终体现到jitterbuffer中,
c) NACK功能在SDP消息中的体现:a=rtcp-fb:125 nack(RTP报文丢失重传)
d) webRtc支持的其他丢包处理方法:a=rtcp-fb:104 nack pli(关键帧重传,当连续出现解码失败,或者长期没有解码输入,就通过RTCP报文发送请求IDR帧命令);
a=rtcp-fb:100 ccm fir(支持使用rtcp反馈机制来实现编码控制);
a=rtcp-fb:100 goog-remb(支持使用rtcp包来控制发送方的码流,goog-remb为google的拥塞控制处理算法)
e) 在webrtc中,重传包和正常包ssrc是不同的,两个ssrc可在SDP中体现,如:a=ssrc-group:FID 3463951252 1461041037(3463951252为正常的ssrc,后者为重传包的ssrc)

  • NACK报文格式(RFC5104[2])

a) NACK报文类型为205,是RTCP的扩展反馈报文(详见:RFC4585)
b) PT=205,FMT=1,Packet identifier(PID)即为丢失RTP数据包的序列号,Bitmao of Lost Packets(BLP)指示从PID开始接下来16个RTP数据包的丢失情况。一个NACK报文可以携带多个RTP序列号,NACK接收端对这些序列号逐个处理
c) NACK报文构造完成以后,发送到网络层。NACK报文是RTCP报文的一种,因此其发送、接收和分析遵循RTCP报文处理的一般流程

  • 对NACK报文的处理

a) 接收端收到NACK报文后调用resendPacketOnNack()进行RTP数据包重发

  • 主动丢帧情况
    a) 帧不完整(该帧数据有丢失)
    b) 该帧参考帧缺失(GOP中I帧或其他P帧丢失)
    c) 报文不连续

  • RTX重传

a) RTX:发送端在新的SSRC上发送重传包或者冗余包
b) NACK、RTX是WebRTC里丢包重传策略,两个策略之间有一定的联系
c) 两者均需要通过sdp协商开启
d) 在发送端收到NACK后,要重发接收端丢掉的包,发送的模式有两种
1.RTX模式:在接收端通过SDP使能发送端的RTX以后,重发的包封装到RTX包里发送,RTX包与原RTP有不同的SSRC,这样有助于避免SRTP的重放攻击,也能让接收端更好的估算带宽
2.普通模式:在没有使能RTX时,发送端只是简单的重发原来的RTP包,这种模式会影响接收端的RTCP统计,比如会出现负的丢包率

WebRtc信令服务器

功能

    1. 用于对端交换消息,消息类型有以下三种
      a) 会话控制消息:初始化/关闭,各种业务逻辑消息以及错误报告
      b) 网络信息:自身对外部可以识别的IP地址和端口
      c) 媒体能力:客户端能控制的编解码器、分辩率,以及它想与谁通讯

结构图

在这里插入图片描述
上图即为webRTC中各模块结构图,其中:

    1. STUN server为peer提供自身网络信息获取功能
    1. Relay server作为中继服务器在需要时为p2p对端提供数据流的中继转发
    1. peer通过STUN server获取到自身的外网IP和端口后,通过信令服务器与对端交换信息,在得到对端的IP和端口后便可以开始建立连接

消息类型

网络信息

    1. 用于两个客户端之间交换自身网络信息,webRTC使用ICE机制建立对端网络连接
    1. ICE候选者
      a) 主机候选者:表示的是本地局域网内的 IP 地址及端口.建立连接时该候选是有最高优先级的,只有在本地不可达时才后尝试其他连接方式
      b) 反射候选者:表示的是获取 NAT 内主机的外网IP地址和端口.在主机候选者不可用时优先尝试该候选.
      c) 中继候选者:中继服务器的IP地址与端口.对于对称型NAT,是无法进行NAT穿透的,因此为了保证功能可用性,可使用中继服务器来进行数据转发.

媒体能力

    1. 表明自身支持的媒体编解码器、音视频参数等信息
    1. 如对h264视频流的描述如下:
    a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f

profile-level-id=42001f

    Profile: 66(hex: 42)Level: 3.1(hex:1f)转成十进制,再除以10

packetization-mode=1,表示I帧会拆分成多个rtp包发送,对于264来说,rtp payload的第一个字节(0x7C)的低5bit为(11100),十进制为28,
代表此nalutype为FU-A,多包封装类型

会话描述

    1. 会话描述信息发生在双方交换信令的过程,主要包括音视频编解码器(codec)、主机候选地址、网络传输协议等.
    1. 会话描述基于SDP协议.SDP(Session Description Protocol)是一种通用的会话描述协议,主要用来描述多媒体会话.

SDP协议

协议格式
    1. SDP的格式由多个行组成,每个行都是type和value的组合
    <type>=<value>

其中:

:大小写敏感的一个字符,代表特定的属性,比如v代表版本
:结构化文本,格式与属性类型有关,UTF8编码
= :两边不允许存在空格
=* :表示是可选的

协议属性
    1. 会话发起者标志:o=
    o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>

各字段含义如下:

  • username:发起者的用户名,不允许存在空格,如果应用不支持用户名,则为-。
  • sess-id:会话id,由应用自行定义,规范的建议是NTP(Network Time Protocol)时间戳。
  • sess-version:会话版本,用途由应用自行定义,只要会话数据发生变化时(比如编码),sess-version随着递增就行。同样的,规范的建议是NTP时间戳。
  • nettype:网络类型,比如IN表示Internet。
  • addrtype:地址类型,比如IP4、IV6
  • unicast-address:域名,或者IP地址.
    如:
    o=- 1552284039 2 IN IP4 127.0.0.1
    1. 会话名:s=
    1. 连接数据:c=

格式如下:

    c=<nettype> <addrtype> <connection-address>

每个SDP至少需要包含一个会话级别的c=字段,或者在每个媒体描述后面各包含一个c=字段

  • nettype:网络类型,比如IN,表示 Internet。
  • addrtype:地址类型,比如IP4、IP6。
  • connection-address:如果是广播,则为广播地址组;如果是单播,则为单播地址
    1. 媒体描述:m=

a) SDP可能同时包含多个媒体描述,格式如下:

    m=<media> <port> <proto> <fmt> ...

其中:

  • media:媒体类型。包括 video、audio、text、application、message等
  • port:传输媒体流的端口,具体含义取决于使用的网络类型(在c=中声明)和使用的协议(proto,在m=中声明)
  • proto:传输协议,具体含义取决于c=中定义的地址类型,比如c=是IP4,那么这里的传输协议运行在IP4之上。比如:
  • UDP:传输层协议是UDP
  • RTP/AVP:针对视频、音频的RTP协议,跑在UDP之上
  • RTP/SAVP:针对视频、音频的SRTP协议,跑在UDP之上
  • fmt:媒体格式的描述,可能有多个。根据 proto 的不同,fmt 的含义也不同。比如 proto 为 RTP/SAVP 时,fmt 表示 RTP payload 的类型。如果有多个,表示在这次会话中,多种payload类型可能会用到,且第一个为默认的payload类型

如:

    m=video 9 UDP/TLS/RTP/SAVPF 122 102 100 101 124 120 123 119

表示:媒体类型是视频,以SRTP传输流媒体数据,RTP包的类型默认是122,可能是102、100…

b) 对于 RTP/SAVP,需要注意的是,payload type 又分静态和动态两种类型,
其中动态类型在a=fmtp:字段里进行定义.
如:

    m=audio 9 UDP/TLS/RTP/SAVPF 111a=rtpmap:111 opus/48000/2a=fmtp:111 minptime=10;useinbandfec=1m=video 9 UDP/TLS/RTP/SAVPF 125a=rtpmap:125 H264/90000a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f

以上示例表示:

  • audio:动态类型是111,代表音频是opus/48000
  • video:动态类型是125,代表视频是H264/90000
    1. 附加属性:a=
      a) 附加属性用于扩展SDP信息,其有两个作用范围:会话级别(session-level,描述会话信息)和媒体级别(media-level,用于描述媒体信息)
  • 会话级别:在第一个媒体字段(media field)前,添加的a=字段表示该属性是会话级别的
  • 媒体级别:在媒体描述m=字段后面可以跟任意数量的a=字段来对媒体描述进行扩展

b) 附加属性有两种格式

    a=<attribute>a=<attribute>:<value>

举例:

    a=group:BUNDLE 0 1 2a=msid-semantic: WMS myKvsVideoStream  //出现在地一个媒体字段前,表示为会话属性m=audio 9 UDP/TLS/RTP/SAVPF 111a=msid:myKvsVideoStream myAudioTrack  //在audio描述之后,表示为媒体属性a=ssrc:1624028672 cname:y+nHd0EHIUVB/bhE
    1. 时间:t=

声明会话的开始、结束时间,格式如下:

    t=<start-time> <stop-time>

如果是0,表示会话没有结束的边界,但是需要在之后会话才是活跃(active)的。如果是0,表示会话是永久的

示例详解
    v=0o=- 1552284039 2 IN IP4 127.0.0.1s=-t=0 0/* 音视频传输使用多路复用,用同一个RTP通道进行传输 */a=group:BUNDLE 0 1 2/* WMS是WebRTC Media Stram的缩写,这里给Media Stream定义了一个唯一的标识符。一个Media Stream可以有多个track(video track、audio track),这些track就是通过这个唯一标识符关联起来的,具体见下面的媒体行(m=)以及它对应的附加属性(a=ssrc:) */a=msid-semantic: WMS myKvsVideoStream/* 本次会话包含音频,端口为9,使用UDP传输RTP的加密包,并使用SRTCP反馈机制来提高传输质量 */m=audio 9 UDP/TLS/RTP/SAVPF 111c=IN IP4 127.0.0.1/* 媒体流id和audio track id */a=msid:myKvsVideoStream myAudioTrack/* ssrc用来对媒体进行描述,格式为a=ssrc:<ssrc-id> <attribute>:<value> *//* cname用来唯一标识媒体的数据源,一个cname可以对应多个ssrc *//* a=ssrc-group:FID 790880351 2784909276,开启rtx机制会产生两个ssrc,前者是正常发送包的ssrc,后者是重发包的ssrc */a=ssrc:1624028672 cname:y+nHd0EHIUVB/bhEa=ssrc:1624028672 msid:myKvsVideoStream myAudioTracka=ssrc:1624028672 mslabel:myKvsVideoStreama=ssrc:1624028672 label:myAudioTrack/* RTCP采用的端口、IP地址 */a=rtcp:9 IN IP4 0.0.0.0/* ICE协商用到的认证信息 */a=ice-ufrag:KfFza=ice-pwd:gHFDvX6WFLF3fItsoHnQouiB/* 支持trickle,即sdp里面只描述媒体信息, 不会包含ice候选项的信息,如果candidate信息包含在SDP中,会以ice-candidate属性的形式添加 */a=ice-options:trickle/* DTLS协商过程的指纹信息 */a=fingerprint:sha-256 14:84:C6:68:91:EA:52:10:C0:3C:D9:2F:FA:6E:F7:80:B5:21:A5:4E:49:42:65:86:1C:13:98:85:32:0E:C0:D5/* 当前客户端在DTLS协商过程中,既可以作为客户端,也可以作为服务端 */a=setup:actpass/* 当前媒体行的标识符(在a=group:BUNDLE 0 1 这行里面用到,这里0表示audio),mid是身份标识 */a=mid:0/* 音频通道既可以用于发送,也可以用于接收 */a=sendrecv/* 启用多路复用,RTP、RTCP共用同个通道 */a=rtcp-muxa=rtcp-rsizea=rtpmap:111 opus/48000/2/* minptime表示最小打包时长为(ms),useinbandfec表示使用opus编码器内置的fec功能,在此还可以添加最大传输比特率、最大采样率等属性 */a=fmtp:111 minptime=10;useinbandfec=1/* 基于RTCP的反馈控制机制(NACK) */a=rtcp-fb:111 nackm=video 9 UDP/TLS/RTP/SAVPF 125c=IN IP4 127.0.0.1a=msid:myKvsVideoStream myVideoTracka=ssrc:1726440517 cname:y+nHd0EHIUVB/bhEa=ssrc:1726440517 msid:myKvsVideoStream myVideoTracka=ssrc:1726440517 mslabel:myKvsVideoStreama=ssrc:1726440517 label:myVideoTracka=rtcp:9 IN IP4 0.0.0.0a=ice-ufrag:KfFza=ice-pwd:gHFDvX6WFLF3fItsoHnQouiBa=ice-options:tricklea=fingerprint:sha-256 14:84:C6:68:91:EA:52:10:C0:3C:D9:2F:FA:6E:F7:80:B5:21:A5:4E:49:42:65:86:1C:13:98:85:32:0E:C0:D5a=setup:actpassa=mid:1a=sendrecva=rtcp-muxa=rtcp-rsizea=rtpmap:125 H264/90000/* h264格式的fmtp描述:a) profile-level-id:Profile: 66(hex: 42)Level: 3.1(hex:1f)转成十进制,再除以10b) packetization-mode=1:表示I帧会拆分成多个rtp包发送,对于264来说,rtp payload的第一个字节(0x7C)的低5bit为(11100),十进制为28,代表此nalutype为FU-A,多包封装类型*/a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01fa=rtcp-fb:125 nackm=application 9 UDP/DTLS/SCTP webrtc-datachannelc=IN IP4 127.0.0.1a=rtcp:9 IN IP4 0.0.0.0a=ice-ufrag:KfFza=ice-pwd:gHFDvX6WFLF3fItsoHnQouiBa=fingerprint:sha-256 14:84:C6:68:91:EA:52:10:C0:3C:D9:2F:FA:6E:F7:80:B5:21:A5:4E:49:42:65:86:1C:13:98:85:32:0E:C0:D5a=setup:actpassa=mid:2a=sctp-port:5000

candidate (rfc5245)

    1. candidate信息是peer向STUN server获取到的自身的网络信息,体现了自身的内网或公网ip和port,还表明了该候选地址的属性(rely,host,srflx)
    1. candidate信息包括type,foundation,base,component id,transport,priority等字段
      a) type:候选类型,具体有host(主机),srvflx(服务器反射),relay(中继),prflx(对端反射)
      b) foundation:用于标志和区分来自同一个stun的2个candidate
      c) base:指candidate的基础地址,srvflx address的base是本地host address,host address和relay address的base是自身
      d) component id:传输媒体的类型,1代表RTP,2代表RTCP
      e) transport:传输协议
      f) priority:该candidate的优先级,根据的type优先级高低一般如下顺序:host > srvflx > prflx > relay
    1. 示例
    {"candidate":"candidate:0 1 udp 16777215 52.27.201.74 49642 typ relay raddr 0.0.0.0 rport 0 generation 0 network-cost 999","sdpMid":"0","sdpMLineIndex":0}其中:foundation为0;component id为1,表示媒体采用RTP协议;transport为UDP;priority为16777215;公网映射地址为52.27.201.74:49642;type为relay;base为0.0.0.0:0;sdpMid字段同SDP中a=mid:0属性,指定了与候选对象关联的媒体组件的媒体流标识标记;sdpMLineIndex表示SDP中m行的索引,从0开始,用于描述与候选对象关联的媒体.

资源链接

  • bundle
    https://tools.ietf.org/html/draft-ietf-mmusic-sdp-bundle-negotiation-54
  • msid
    http://tools.ietf.org/html/draft-ietf-mmusic-msid
  • rtcpfb
    a) https://tools.ietf.org/html/rfc5124
    b) https://webrtc.org/experiments/rtp-hdrext/transport-wide-cc-02/
  • candidate
    a) https://tools.ietf.org/html/rfc5245#appendix-B.3
    b) https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate/sdpMLineIndex

http://chatgpt.dhexx.cn/article/2CQSVR4k.shtml

相关文章

国网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;编辑等基本…

html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印

windwow.print()用于打印当前窗口的内容,很简便,可当内容特殊并且打印有特殊需求的时候就要绕个圈了。下面是需要打印的表格: 当数据量少的时候像上面的表格一样,中间的内容只有5条数据,打印出来在纸上会有空白,不太好。中间内容是不确定的可能几十条,可能上百条,这样循…

在线表格

在线表格案例 模仿的是腾讯文档 首先观察腾讯文档的表格效果&#xff0c;然后在构建出思路&#xff0c;开始编写代码 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>在线表格<…

Java获取word表格中的数据

前言: 有时系统中需要提取各种文件中的数据&#xff0c;比如做报表的系统中就常常与Excel表格数据做交互。做Excel报表数据时有选择POI实现的&#xff0c;但是POI功能也很单一&#xff0c;对于文档格式维护性差&#xff0c;最重要的是POI在操作word数据时显得力不从心&#xf…