WebRTC 中的 SDP

WebRTC中的SDP ssrc不同的媒体流可以有相同的cname,表示他们属于同一个媒体流(比如,重传流的cname就和原始流的相同)。其中,Plan B是由标准SDP演化而来的,而Unified Plan是用来代替Plan B的新规格。★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。//在webrtc中,重传包和正常包ssrc是不一样的,上一行中前一个是正常rtp包的ssrc,后一个是重传包的ssrc。 阅读详情

WebRTC 中的 SDP

SDP(Session Description Protocol,会话描述协议)是一个比较老的协议,发布于2006年,以<type>=<value>的格式描述会话内容。两个浏览器端的WebRTC应用在开始传输音视频数据之前,需要借助RTCPeerConnection对象建立会话。WebRTC引入SDP来描述媒体信息,用于媒体协商时决定双方是否可以进行通信。

媒体协商的主要目的如下:

  1. 描述会话名称、会话时长。
  2. 协商音视频编解码标准(如:Opus、G722、VP8)、音频采样率和通道数、音频帧时长等。
  3. 协商网络通信质量反馈和改善策略,如:采用什么拥塞控制算法、是否开启NACK、FEC等。
  4. 协商网络安全机制和相关参数,如:ICE用户名和密码,DTLS证书指纹,DTLS用户角色等。
  5. 收集网络传输Candidate,构建CandidatePair列表。
  6. 根据CandidatePair列表和用户配置的优先级规则,逐个尝试建立连接,直到首个连接建立成功。

在会话相关参数尚未协商确定之前,WebRTC是不知道如何传输音视频数据的。

SDP作为信令系统的一部分,可以说是WebRTC的灵魂。

SDP 标准规范

SDP 的组织结构

SDP由两部分构成,即会话描述和媒体描述。

在整个SDP中,只能有一个会话描述,而媒体描述可以有多个。通常SDP中包含两个媒体描述:一个音频媒体描述,一个视频媒体描述。除会话描述是对整个SDP起约束作用外,各媒体描述之间的约束互不影响。

在这里插入图片描述

SDP 内容及 type 类型

在SDP规范中,除定义了SDP的结构外,还对SDP的内容做了规定。规范中要求所有的描述都以行为单位,描述格式如下:

<type> = <value>

其中,<type>表示描述的目标,它由单个字符构成;<value>是对<type>的解释或约束。会话描述与媒体描述都有各自的<type>。

  • 会话包含的<type>有v(protocol version,协议版本)、o(owner/creator and session identifier,会话的创建者)、s(session name,会话名)、t(time the session is active,会话时长)。
  • 媒体包含的<type>主要是m(media,媒体)。
  • 除了上面介绍的<type>外,还有一些<type>是公共的,这些类型既可以出现在会话中,也可以出现在媒体中,如c(connection information,网络信息)、a(attribute,属性)等。

SDP 实例

// 会话描述
v=0
o=- 3409821183230872764 2 IN IP4 127.0.0.1
...
// 媒体描述
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 …
…
a=rtpmap :111 opus /48000/2
a=rtpmap :103 ISAC /16000
a=rtpmap :104 ISAC /32000
...

WebRTC 中的 SDP 整体结构

WebRTC为了实现音视频实时通信,对标准SDP做了很大调整:WebRTC中的SDP并没有打破标准SDP的结构,它同样包括会话描述和媒体描述两大部分。所不同的是,它对媒体描述中的内容做了大幅增加以满足自身的需求。

按功能,WebRTC中SDP的媒体描述内容可划分成四大类:媒体信息、网络描述、安全描述以及服务质量。

在这里插入图片描述

会话描述

v=0

SDP的版本(Protocol version number)。当前规范版本为0。

o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>

会话所有者有关的参数(Owner/creator and session identifier)。

  • <username>:会话发起者的名称。如果不提供则用”-“表示,用户名不能包含空格;
  • <sess-id>:主叫方的会话标识符;
  • <sess-version>:会话版本号。用0标识的居多;
  • <nettype>:网络类型。IN表示Internet网络类型,目前仅定义该网络类型;
  • <addrtype>:地址类型。目前支持IPV4和IPV6两种地址类型;
  • <unicast-address>:会话发起者的IP地址。
s=<session name>

本次会话的标题或会话的名称(Session name)。

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

会话的起始时间和结束时间(Time session starts and stops)。

媒体信息

属于标准SDP中媒体描述的内容,也是SDP中最核心的内容。

“m=” 行中描述了媒体类型、传输类型、负载类型等。

对于每种媒体数据(video、audio),可以选择多种编解码器,其参数可以通过 “a=rtpmap” 属性做进一步解释。

网络描述

属于标准SDP中媒体描述的内容,记录传输媒体数据时使用的网络信息。

c=<nettype> <addrtype> <connection-address>
  • <nettype>:网络类型。IN表示Internet网络类型,目前仅定义该网络类型;
  • <addrtype>:地址类型。目前支持IPV4和IPV6两种地址类型;
  • <unicast-address>:会话发起者的IP地址。

对于 WebRTC 而言,其网络传输由另一套复杂的机制实现,所以 “c=” 属性会被忽略。

其他属性:

  1. “a=group:BUNDLE”:指明哪些媒体数据可以复用同一个传输通道。
  2. “a=candidate”:表示候选人的传输地址,已被废弃,但是仍然兼容。
  3. “a=rtcp-mux”:表示RTP和RTCP是否使用同一个端口来传输。
  4. “a=ice-options”:指明收集 ICE Candidate 的策略。默认使用 Trikle-ICE 模式(只要有可用的 Candidate 就交换,不需要等所有 Candidate 收集好了再交换)。
  5. “a=extmap”:指明 RTP 使用的拓展头。
  6. “a=rtcp-resize”:指明缩减 RTCP 包的大小,视用户带宽调整。

安全描述

WebRTC 自定义了一套安全机制,安全描述的内容仅用于通信双方交换一些必要的信息。

服务质量

媒体描述中的服务质量描述是由“a=rtcp-fb”属性描述的。

在媒体协商时,发起协商一方的Offer中指明WebRTC开启哪些RTCP反馈,应答一方在Answer中确认是否真正地开启对应的RTCP反馈。

媒体信息

SDP中媒体信息的具体格式:

m=<media> <port>/<number of ports> <transport> <fmt> ...
  • <media>:表示媒体类型,可以是audio、video等;
  • <port>/<number of ports>:表示该媒体使用的端口号。对于WebRTC而言,由于它不使用SDP中描述的网络信息,所以该端口号对它没任何意义。
  • <transport>:表示使用的传输协议,可以是UDP、TCP等。
  • <fmt>:表示媒体数据类型,一般为PayloadType列表,其具体含义需要使用“a=rtpmap:”属性做进一步阐述。

rtpmap 和 fmtp

在WebRTC的SDP中,“a=rtpmap”和“a=fmtp”属性随处可见。无论是音频媒体中,还是视频媒体中,都使用它们对媒体做进一步的解释。

rtpmap(rtp map),用于解释PayloadType使用的编解码器及其参数:

a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encodingparameters>]

fmtp(format parameters)用于指定媒体数据格式:

a=fmtp:<format> <format specific parameters>

实例:音频媒体信息

...
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
...
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport -cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
...

第一行是对音频媒体的描述。transport为UDP/TLS/RTP/SAVFP。
传输时底层使用UDP;在UDP之上使用了TLS协议来交换证书;证书交换好后,媒体数据由RTP进行传输(RTP运行在UDP之上),保证传输的可靠性;媒体数据(音视频数据)的安全性是由SRTP负责的,即对RTP包中的Body部分进行加密。此外,传输时还使用RTCP的feekback机制对传输信息进行实时反馈(SAVPF),以便进行拥塞控制。

a=rtpmap:111 opus /48000/2:PayloadType 值为 111 的编码器是 opus,时钟频率(采样率)为 48000,音频通道数为 2。

a=fmtp:111 minptime=10;useinbandfec=1:PayloadType 值为 111 的编码器(opus)的音频帧最小10ms一帧,使用带内FEC进行前向纠错。

实例:视频媒体信息

...
m=video 9 UDP/TLS/RTP/SAVPF 96 97 102 121 124 119
...
a=mid:1
...
a=rtpmap:96 VP8/90000
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
...
a=rtpmap:102 H264/90000
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
...
a=rtpmap:124 red/90000
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
...

第一行是对视频媒体的描述。

a=mid:1:视频媒体的ID编号为1。

a=rtpmap:97 rtx/90000:rtx 不是编码器,而是丢包重传。

a=fmtp:97 apt=96:当使用的媒体数据类型(Payload Type)为 96 时,如果出现丢包需要重传,重传数据包的 Payload Type 为 97。

a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f:H264Level可以不一致,H264编码数据的打包模式为1(非交错包),profile-level-id由profile_idc、profile_iop、level_idc组成,每个部分占8位,具体意义可以去H264规范手册查看。

a=rtpmap:124 red/90000:red(REDundant coding,冗余编码)是一种FEC算法,用于防止丢包。

SSRC 与 CNAME

除了音频媒体信息和视频媒体信息外,媒体描述中还包括一项重要内容,就是SSRC(Synchronization Source)。SSRC是媒体源的唯一标识,每一路媒体流都有一个唯一的SSRC来标识它。

cname(canonical name)通常称为别名,可以用在域名解析中。当想为某个域名起一个别名的时候,就可以使用它。如在直播推/拉流中,想将某个云厂商的推流地址push.xxx.yun.xxx.com换成你自己的地址push.advancedu.com,就可以使用cname。cname在SDP中的作用与域名解析中的作用是一致的,就是为媒体流起了一个别名。在同一个视频媒体描述中的两个SSRC后面都跟着同样的cname,说明这两个SSRC属于同一个媒体流。

实例:

...
a=ssrc-group:FID 1531262201 2412323032
// 视频流的SSRC
a=ssrc:1531262201 cname:Hmks0+2NwywExB+s
...
// 丢包重传流的SSRC
a=ssrc:2412323032 cname:Hmks0+2NwywExB+s

PlanB 与 UnifiedPlan

目前WebRTC中的SDP包括两种规格,即PlanB和UnifiedPlan。PlanB由标准SDP演化而来,而UnifiedPlan则是代替PlanB的SDP新规格。

它们的关系:

标准SDP -> PlanB -> UnifiedPlan

在PlanB规格中,只有两个媒体描述,即音频媒体描述(m=audio……)和视频媒体描述(m=video……)。如果要传输多路视频,则它们在视频媒体描述中需要通过SSRC来区分。

在UnifiedPlan中可以有多个媒体描述,因此,对于上面多路视频的情况,将其拆成多个视频媒体描述(多行“m=video……”)即可。

安全描述:WebRTC 如何保证数据安全?

请添加图片描述

使用WebRTC实现对音视频通信产品进行防护有三个级别,分别是应用级防护、信令级防护以及数据级防护。

  • 应用级防护:用户在使用音视频通信产品时,一般都要先进行注册,然后通过用户名/密码的方式登录到应用系统上。这一级防护称为应用级防护,但这一级防护并不属于WebRTC的范畴。
  • 信令级防护:当用户通过第一级防护后,就可以获得WebRTC信令服务器的地址,并通过信令服务器进行媒体协商。媒体协商成功后,通信双方便可以从彼此的SDP中获取对方的用户名/密码,即ice-ufrag和ice-pwd信息。这两个信息的作用是验证用户的合法性,其完整过程如下:通信的双方彼此发送STUN Binding请求(带着ice-ufrag和ice-pwd)给对方,当对方收到请求后,会验证请求中的ice-ufrag和ice-pwd是否与自己SDP中的一致,如果一致,则说明该用户是合法的用户,否则说明它是非法用户。
  • 数据级防护:当第二级防护通过之后,通信的双方还会使用DTLS协议彼此交换证书,证书中保存的最重要的信息就是公钥。例如ClientA向ClientB发送媒体数据,ClientA需要用ClientB的公钥对数据加密,加密后的数据再打包成SRTP发送给ClientB,接收端(ClientB)需要使用自己的私钥才能将加密的数据解密。

实例:

...
m=...
...
a=ice-ufrag:kSq+
a=ice-pwd:MRW8liIi4S8OCRlM+SftfJWF
...
a=fingerprint:sha-256 DB:43:34:45:52:D3:78:A3:92:6E:BB:FB:83:2E:7F:22:49:5B:A7:73:D4:E1:52:1C:67:7F:7F:EA:95:F1:05:50
a=setup:actpass
...

ice-ufrag表示username(用户名),ice-pwd表示password(密码),ice-ufrag和ice-pwd用于验证WebRTC客户端是否有效。

a=fingerprint用于验证加密证书的有效性。当通信双方通过DTLS协议交换证书之前,各端会先给各自的证书生成一个指纹(fingerprint),然后将指纹放到SDP中通过信令交换给对方。通过DTLS协议交换证书后,双方会对拿到的证书重新生成指纹。然后将生成的指纹与SDP中的指纹进行比较,如果两者一致,则说明证书在传输中没有被篡改,可以放心使用,否则说明证书被篡改,此时连接创建失败。

a=setup用于指明WebRTC终端使用DTLS协议交换证书时的角色。分别为active、passive以及actpass:

  • active表示终端的角色为客户端;
  • passive表示终端的角色为服务端;
  • actpass(active与passive组合而成)表示终端既可以是客户端又可以是服务端,最终的角色由另一端的角色确定。

一般情况下,第一个加入房间的终端默认为actpass,后来加入的终端为active。因此,通过“a=setup”的属性值,可以知道使用DTLS协议时通信双方哪个是客户端,哪个是服务端。

网络描述:RTP 拓展头

WebRTC通常使用UDP(用户数据报协议)来传输数据。在UDP之上,WebRTC使用RTP(实时传输协议)来传输音频和视频数据。RTP报文由头部(Header)和有效载荷(Payload)两部分组成。头部包含了一些元数据信息,如序列号、时间戳和负载类型等。有效载荷则是音频或视频的实际数据。

这种基于UDP的传输方式可以提供较低的延迟和更好的实时性能,适用于实时通信应用如音视频通话和实时流媒体等。

RTP报文的头部(Header)又包括常规Header和扩展Header,扩展Header保存在SDP中。如:“a=extmap”,extmap是extension map的缩写,即RTP Header扩展映射表。

"a=extmap"属性的具体格式如下:

a=extmap:<value>["/"<direction>]<URI><extensionattributes>

URI是RTP拓展头对应值的规范说明。

实例:

a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id

a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01:transport-cc拓展头的值为3,其格式和含义都记录在http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01中。

对于RTP而言,它的拓展头是以32位的整数倍增加的,即每个拓展头最小是4字节。

服务质量

媒体描述中的服务质量描述是由“a=rtcp-fb”属性描述的。在WebRTC中,rtcp-fb(rtcp feedback)有两层含义:一是指RTCP消息中专门反馈信息的一类消息;二是指SDP中使用的“a=rtcp-fb”属性,该属性可以用来设置WebRTC终端支持哪些rtcp feedback 消息,也就是本节要介绍的内容。

实例:

a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli

WebRTC有2种拥塞控制算法:Transport-CC 和 Goog-REMB,其中 Transport-CC 是 Goog-REMB 的代替。实例中可以看出:在使用 Payload Type 为 96(VP8)时,支持 Transport-CC 和 Goog-REMB 类型的 rtcp feedback 报文,说明使用 VP8 编解码器时开启了这两种拥塞控制算法。

a=rtcp-fb:96 ccm fir:ccm(code control message)和fir(full intra refersh)指明使用VP8编解码器时,支持RTCP的FIR指令(申请关键帧指令)。

a=rtcp-fb:96 nack pli:使用VP8编解码器时,支持 NACK 报文和 PLI 报文。

WebRTC 的 SDP 实例

网站 WebRTC example of Peer Connection 提供了一个一对一通信的实例,并且打印了通信双方在媒体协商时的 SDP 消息(Offer 和 Answer)。

下面是一个 SDP 实例,并对每一行给出了相应的解释:

1 // ===============================================
2 // SDP 会话描述
3 // ===============================================
4 // 版本信息
5 v=0
6 // 会话的创建者
7 o=- 8567802084787497323 2 IN IP4 127.0.0.1
8 // 会话名
9 s=-
10 // 会话时长
11 t=0 0
12 // 音视频传输采用多路复用方式, 通过同一个通道传输
13 // 这样可以减少对ICE 资源的消耗
14 a=group:BUNDLE 0 1
15 //WMS(WebRTC Media Stream)
16 // 因为上面的BUNDLE 使得音视频可以复用传输通道
17 // 所以WebRTC 定义一个媒体流来对音视频进行统一描述
18 // 媒体流中可以包含多路轨( 音频轨、视频轨… … )
19 // 每个轨对应一个SSRC
20 a=msid -semantic: WM S 3eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt
21 // ===============================================
22 // 音视频媒体描述
23 // ===============================================
24 // 音频媒体描述
25 // 端口9 忽略, 端口设置为0 表示不传输音频
26 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
27 // 网络描述, 忽略!WebRTC 不使用该属性
28 c=IN IP4 0.0.0.0
29 // 忽略!WebRTC 不使用该属性
30 a=rtcp:9 IN IP4 0.0.0.0
31 // 用于ICE 有效用户的验证
32 // ufrag 表示用户名( 随机值)
33 a=ice -ufrag:r8+X
34 // 密码
35 a=ice -pwd:MdLpm2pegfysJ/VMCCGtZRpF
36 // 收信candidate 方式
37 a=ice -options:trickle
38 // 证书指纹, 用于验证DTLS 证书有效性
39 a=fingerprint:sha -256 53:08:1A:66:24: C7 :45:31:0A:EA:9E:59:97: A9 :15:3A:EC :60:1F:85:85:5B:B8:EC:D4 :77:78:9A:46:09:03:2A
40 // 用于指定DTLS 用户角色
41 a=setup:actpass
42 // BUNDLE 使用, 0 表示音频
43 a=mid:0
44 // 音频传输时RTP 支持的扩展头
45 // 发送端是否音频level 扩展, 可参考RFC6464
46 a=extmap :1 urn:ietf:params:rtp -hdrext:ssrc -audio -level
47 //NTP 时间扩展头
48 a=extmap :2 http://www.webrtc.org/experiments/rtp -hdrext/abs -send -time
49 //transport -CC 的扩展头
50 a=extmap :3 http://www.ietf.org/id/draft -holmer -rmcat -transport -wide -cc -extensions -01
51 // 与RTCP 中的SDES(Source Description) 相关的扩展头
52 // 通过RTCP 的SDES 传输mid
53 a=extmap :4 urn:ietf:params:rtp -hdrext:sdes:mid
54 // 通过RTCP 的SDES 传输rtp -stream -id
55 a=extmap :5 urn:ietf:params:rtp -hdrext:sdes:rtp -stream -id
56 // 通过RTCP 的SDES 传输重传时的rtp -stream -id
57 a=extmap :6 urn:ietf:params:rtp -hdrext:sdes:repaired -rtp -stream -id
58 // 音频数据传输方向
59 // sendrecv 既可以接收音频, 又可以发送音频
60 a=sendrecv
61 // 记录音频与媒体流的关系
62 a=msid:3 eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt 67eb8a85 -f7c0 -4cad -bd62 -41 cae9517041
63 //RTCP 与RTP 复用传输通道
64 a=rtcp -mux
65 //PT=111 代表音频编码器opus/ 采样率48000/ 双通道
66 a=rtpmap :111 opus /48000/2
67 // 使用Opus 时, 支持RTCP 中的Transport -CC 反馈报文
68 a=rtcp -fb:111 Transport -cc
69 // 使用Opus 时, 每个视频帧的最小间隔为10ms , 使用带内频率
70 a=fmtp :111 minptime =10; useinbandfec =1
71 //PT=103 代表音频编码器ISAC/ 采样率16000
72 a=rtpmap :103 ISAC /16000
73 //PT=104 代表音频编码器ISAC/ 采样率32000
74 a=rtpmap :104 ISAC /32000
75 //PT=9 代表音频编码器G722/ 采样率8000
76 a=rtpmap :9 G722 /8000
77 //PT=0 未压缩音频数据PCMU/ 采样率8000
78 a=rtpmap :0 P C M U/8000
79 //PT=8 未压缩音频数据PCMA/ 采样率8000
80 a=rtpmap :8 P C M A/8000
81 //PT=106 舒适噪声(Comfort Noise , CN)/ 采样率32000
82 a=rtpmap :106 CN /32000
83 //PT=106 舒适噪声/ 采样率16000
84 a=rtpmap :105 CN /16000
85 //PT=106 舒适噪声/ 采样率8000
86 a=rtpmap :13 CN /8000
87 //PT=110 SIP DTMF 电话按键/ 采样率48000
88 a=rtpmap :110 telephone -event /48000
89 //PT=112 SIP DTMF 电话按键/ 采样率32000
90 a=rtpmap :112 telephone -event /32000
91 //PT=113 SIP DTMF 电话按键/ 采样率16000
92 a=rtpmap :113 telephone -event /16000
93 //PT=116 SIP DTMF 电话按键/ 采样率8000
94 a=rtpmap :126 telephone -event /8000
95 // 源933825788 的别名
96 a=ssrc :933825788 cname:Tf3LnJwwJc0lgnxC
97 // 记录源SSRC 与音频轨和媒体流的关系
98 a=ssrc :933825788 msid:3 eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt 67eb8a85 -f7c0 -4cad -bd62 -41 cae9517041
99 // 记录源SSRC :933825788 属于哪个媒体流
100 a=ssrc :933825788 mslabel :3 eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt
101 // 记录源SSRC :933825788 属于哪个音频轨
102 a=ssrc :933825788 label :67 eb8a85 -f7c0 -4cad -bd62 -41 cae9517041
103 // ===============================================
104 // 视频媒体描述
105 // ===============================================
106 // 视频媒体描述
107 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107
108 109 124 119 123 108 // 网络描述, 忽略!WebRTC 不使用该属性
109 c=IN IP4 0.0.0.0
110 忽略!WebRTC 不使用该属性
111 a=rtcp:9 IN IP4 0.0.0.0
112 // 与音频一样, 用于验证用户的有效性
113 // 如果音视频复用传输通道, 只用其中一个即可
114 a=ice -ufrag:r8+X
115 a=ice -pwd:MdLpm2pegfysJ/VMCCGtZRpF
116 // 与音频一样, 设置收集Candidate 的方式
117 a=ice -options:trickle
118 // 证书指纹, 用于验证DTLS 证书有效性
119 a=fingerprint:sha -256 53:08:1A:66:24: C7 :45:31:0A:EA:9E:59:97: A9 :15:3A:EC :60:1F:85:85:5B:B8:EC:D4 :77:78:9A:46:09:03:2A
120 // 用于指定DTLS 用户角色
121 a=setup:actpass
122 // media id 1
123 a=mid:1
124 // 视频传输时RTP 支持的扩展头
125 // toffset(TransportTime Offset)
126 //RTP 包中的timestamp 与实际发送时的偏差
127 a=extmap :14 urn:ietf:params:rtp -hdrext:toffset
128 a=extmap :2 http://www.webrtc.org/experiments/rtp -hdrext/abs -send -time
129 // 视频旋转角度的扩展头
130 a=extmap :13 urn:3gpp:video -orientation
131 //Transport -CC 扩展头
132 a=extmap :3 http://www.ietf.org/id/draft -holmer -rmcat -transport -wide -cc -extensions -01
133 // 发送端控制接收端渲染视频的延时时间
134 a=extmap :12 http://www.webrtc.org/experiments/rtp -hdrext/playout -delay
135 // 指定视频的内容, 它有两种值: 未指定和屏幕共享
136 a=extmap :11 http://www.webrtc.org/experiments/rtp -hdrext/video -content -type
137 // 该扩展仅在每个视频帧最后一个包中出现
138 // 其存放6 个时间戳, 分别为:
139 //1. 编码开始时间
140 //2. 编码完成时间
141 //3. 打包完成时间
142 //4. 离开pacer 的最后一个包的时间
143 //5. 预留时间1
144 //6. 预留时间2
145 a=extmap :7 http://www.webrtc.org/experiments/rtp -hdrext/video -timing
146 a=extmap :8 http://www.webrtc.org/experiments/rtp -hdrext/color -space
147 // 携带mid 的扩展头
148 a=extmap :4 urn:ietf:params:rtp -hdrext:sdes:mid
149 // 携带rtp -stream -id 的扩展头
150 a=extmap :5 urn:ietf:params:rtp -hdrext:sdes:rtp -stream -id
151 // 重传时携带的rtp -stream -id 的扩展头
152 a=extmap :6 urn:ietf:params:rtp -hdrext:sdes:repaired -rtp -stream -id
153 // 视频数据传输方向
154 // sendrecv , 既可以发送, 又可以接收视频数据
155 a=sendrecv
156 // media stream id
157 a=msid:3 eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt f5d231d9 -f0f7 -4cd2 -b2bc -424 f37dfd003
158 //RTCP 与RTP 复用端口
159 a=rtcp -mux
160 // 减少RTCP 尺寸
161 a=rtcp -rsize
162 //PT=96 代表音频编码器VP8/ 采样率为90000
163 a=rtpmap :96 VP8 /90000
164 //PT=96 支持RTCP 协议中的Goog -REMB 反馈
165 a=rtcp -fb:96 goog -remb
166 //PT=96 支持RTCP 协议中的Transport -CC 反馈
167 a=rtcp -fb:96 transport -cc
168 //PT=96 支持RTCP 协议中的fir 反馈
169 a=rtcp -fb:96 ccm fir
170 //PT=96 支持RTCP 中的nack 反馈
171 a=rtcp -fb:96 nack
172 //PT=96 支持RTCP 中的pli 反馈
173 a=rtcp -fb:96 nack pli
174 //PT=97 代表重传数据/ 采样率为90000
175 a=rtpmap :97 rtx /90000
176 //PT=97 与96 是绑定关系, 说明97 是96 的重传数据
177 a=fmtp :97 apt =96
178 //PT=98 代表音频编码器VP9/ 采样率为90000
179 a=rtpmap :98 VP9 /90000
180 //PT=98 支持RTCP 中的Goog -REMB 反馈
181 a=rtcp -fb:98 goog -remb
182 //PT=98 支持RTCP 中的Transport -CC 反馈
183 a=rtcp -fb:98 transport -cc
184 //PT=98 支持RTCP 中的fir 反馈
185 a=rtcp -fb:98 ccm fir
186 //PT=98 支持RTCP 中的nack 反馈
187 a=rtcp -fb:98 nack
188 //PT=98 支持RTCP 中的pli 反馈
189 a=rtcp -fb:98 nack pli
190 // 使用VP9 时, 视频帧的profile id 为0
191 //VP9 一共有4 种profile 1,2,3,4
192 //0 表示支持8bit 位深
193 // 和YUV4 :2:0 格式
194 a=fmtp :98 profile -id=0
195 //PT=99 代表重传数据/ 采样率90000
196 a=rtpmap :99 rtx /90000
197 //PT=99 与98 是绑定关系, 因此99 是98 的重传数据
198 a=fmtp :99 apt =98
199 //PT=100 代表音频编码器VP9/ 采样率90000
200 a=rtpmap :100 VP9 /90000
201 //PT=100 支持RTCP 中的Goog -REMB 反馈
202 a=rtcp -fb:100 goog -remb
203 //PT=100 支持RTCP 中的Transport -CC 反馈
204 a=rtcp -fb:100 transport -cc
205 //PT=100 支持RTCP 中的fir 反馈
206 a=rtcp -fb:100 ccm fir
207 //PT=100 支持RTCP 中的nack 反馈
208 a=rtcp -fb:100 nack
209 //PT=100 支持RTCP 中的pli 反馈
210 a=rtcp -fb:100 nack pli
211 // 使用VP9 时, 视频帧的profile id 为2
212 //VP9 一共有4 种profile 1,2,3,4
213 //2 表示支持10bit 、12bit 位深
214 // 和YUV4 :2:0 格式
215 a=fmtp :100 profile -id=2
216 //PT=101 代表重传数据/ 采样率为90000
217 a=rtpmap :101 rtx /90000
218 //PT=101 与100 是绑定关系, 因此101 是100 的重传数据
219 a=fmtp :101 apt =100
220 //PT=102 代表音频编码器H264/ 采样率为90000
221 a=rtpmap :102 H264 /90000
222 //PT=102 支持RTCP 中的Goog -REMB 反馈
223 a=rtcp -fb:102 goog -remb
224 //PT=102 支持RTCP 中的Transport -CC 反馈
225 a=rtcp -fb:102 transport -cc
226 //PT=102 支持RTCP 中的fir 反馈
227 a=rtcp -fb:102 ccm fir
228 //PT=102 支持RTCP 中的nack 反馈
229 a=rtcp -fb:102 nack
230 //PT=102 支持RTCP 中的pli 反馈
231 a=rtcp -fb:102 nack pli
232 a=fmtp :102 level -asymmetry -allowed =1; packetization -mode =1; profile -level -id =42001f
233 //PT=121 代表重传数据/ 采样率为90000
234 a=rtpmap :121 rtx /90000
235 //PT=121 与102 是绑定关系, 因此121 是102 的重传数据
236 a=fmtp :121 apt =102
237 //PT=127 代表音频编码器H264/ 采样率为90000
238 a=rtpmap :127 H264 /90000
239 //PT=127 支持RTCP 中的Goog -REMB 反馈
240 a=rtcp -fb:127 goog -remb
241 //PT=127 支持RTCP 中的Transport -CC 反馈
242 a=rtcp -fb:127 transport -cc
243 //PT=127 支持RTCP 中的fir 反馈
244 a=rtcp -fb:127 ccm fir
245 //PT=127 支持RTCP 中的nack 反馈
246 a=rtcp -fb:127 nack
247 //PT=127 支持RTCP 中的pli 反馈
248 a=rtcp -fb:127 nack pli
249 a=fmtp :127 level -asymmetry -allowed =1; packetization -mode =0; profile -level -id =42001f
250 //PT=120 代表重传数据/ 采样率为90000
251 a=rtpmap :120 rtx /90000
252 //PT=127 与120 是绑定关系, 因此127 是120 的重传数据
253 a=fmtp :120 apt =127
254 //PT=125 代表音频编码器H264/ 采样率为90000
255 a=rtpmap :125 H264 /90000
256 //PT=125 支持RTCP 中的Goog -REMB 反馈
257 a=rtcp -fb:125 goog -remb
258 //PT=125 支持RTCP 中的Transport -CC 反馈
259 a=rtcp -fb:125 transport -cc
260 //PT=127 支持RTCP 中的fir 反馈
261 a=rtcp -fb:125 ccm fir
262 //PT=127 支持RTCP 中的nack 反馈
263 a=rtcp -fb:125 nack
264 //PT=127 支持RTCP 中的pli 反馈
265 a=rtcp -fb:125 nack pli
266 a=fmtp :125 level -asymmetry -allowed =1; packetization -mode =1; profile -level -id=42 e01f
267 //PT=107 代表重传数据/ 采样率为90000
268 a=rtpmap :107 rtx /90000
269 //PT=107 与125 是绑定关系, 因此177 是125 的重传数据
270 a=fmtp :107 apt =125
271 //PT=108 代表音频编码器H264/ 采样率为90000
272 a=rtpmap :108 H264 /90000
273 //PT=108 支持RTCP 中的Goog -REMB 反馈
274 a=rtcp -fb:108 goog -remb
275 //PT=108 支持RTCP 中的Transport -CC 反馈
276 a=rtcp -fb:108 transport -cc
277 //PT=108 支持RTCP 中的fir 反馈
278 a=rtcp -fb:108 ccm fir
279 //PT=108 支持RTCP 中的nack 反馈
280 a=rtcp -fb:108 nack
281 //PT=108 支持RTCP 中的pli 反馈
282 a=rtcp -fb:108 nack pli
283 a=fmtp :108 level -asymmetry -allowed =1; packetization -mode =0; profile -level -id=42 e01f
284 //PT=109 代表重传数据/ 采样率为90000
285 a=rtpmap :109 rtx /90000
286 //PT=109 与108 是绑定关系, 因此109 是108 的重传数据
287 a=fmtp :109 apt =108
288 //PT=124 代表视频使用red fec 技术/ 采样率为90000
289 a=rtpmap :124 red /90000
290 //PT=119 代表重传数据/ 采样率为90000
291 a=rtpmap :119 rtx /90000
292 //PT =1119 与124 是绑定关系, 因此119 是124 的重传数据
293 a=fmtp :119 apt =124
294 //PT=123 代表视频使用ulp fec 技术/ 采样率为90000
295 a=rtpmap :123 ulpfec /90000
296 //ssrc -group 表示几个源之间的关系
297 // 其格式为a=ssrc -group:<semantics > <ssrc -id > … 参考RFC5576
298 //FID(Flow ID), 表示这几个源都是数据流
299 // 其中, 1101026881 是正常的视频流
300 // 而后面的ssrc =35931176 是前面的ssrc 的重传流
301 a=ssrc -group:FID 1101026881 35931176
302 // 源1101026881 的别名为Tf3LnJwwJc0lgnxC
303 a=ssrc :1101026881 cname:Tf3LnJwwJc0lgnxC
304 // 下面的描述行指明了源1101026881 与媒体流ID(Media Stream ID) 和轨的关系
305 // 在一个媒体流中可以有多路轨(track), 每个轨对应一个ssrc
306 a=ssrc :1101026881 msid:3 eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt f5d231d9 -f0f7 -4cd2 -b2bc -424 f37dfd003
307 // 下面描述行指明了源1101026881 所属的媒体流的label(Media Stream lable)
308 a=ssrc :1101026881 mslabel :3 eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt
309 // 下面描述行指明了源1101026881 对应的媒体轨, 同时它也是视频设备的label
310 a=ssrc :1101026881 label:f5d231d9 -f0f7 -4cd2 -b2bc -424 f37dfd003
311 // 源35931176 的别名为Tf3LnJwwJc0lgnxC
312 a=ssrc :35931176 cname:Tf3LnJwwJc0lgnxC
313 // 下面的信息与源1101026881 的信息相同, 不做解释
314 a=ssrc :35931176 msid:3 eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt f5d231d9 -f0f7 -4cd2 -b2bc -424 f37dfd003
315 a=ssrc :35931176 mslabel :3 eofXQZ24BqbQPRkcL49QddC5s84gauyOuUt
316 a=ssrc :35931176 label:f5d231d9 -f0f7 -4cd2 -b2bc -424 f37dfd003

ORTC

SDP太“古老”了。本不应该在WebRTC这样“新”的项目中引入该协议,很多人对此也提出了同样的质疑,因此以微软为首的ORTC组织提出了替换SDP的解决方案。

ORTC(Object Real-Time Communication)为开发基于WebRTC的应用程序提供了非常强大的API,其底层不再使用SDP,同时也不再需要Offer/Answer机制,而是将原来SDP中的内容分别放到Sender、Receiver、Transport对象中,通过对象完成之前的工作。

ORTC让 RTCPeerConnection 等 WebRTC 的概念不复存在。但 ORTC 是大势所趋,我们必须提前做好准备。

参考

  1. https://blog.youkuaiyun.com/weixin_39766005/article/details/132294422
  2. https://blog.youkuaiyun.com/bigwave2000/article/details/132258189
  3. https://www.cnblogs.com/anyrtc/p/17641063.html
  4. https://www.jianshu.com/p/bd397f73d2b2
  5. https://www.cnblogs.com/orange-CC/p/14340181.html
webrtc-sdp详解 1、SDP协议简介 SDP(Session Description Protocol) 是一种会话描述协议,基于文本,其本身并不属于传输协议,需要依赖其它的传输协议(比如 SIP 和 HTTP)来交换必要的媒体信息,用于两个会话实体之间的媒体协商,详细的标注规范可参考RFC2327和RFC4566。WebRTC 中使用 Offer-Answer 模型交换 SDP,本文详细介绍SDP各属性在WebRTC中的应用。 2、SDP组成 SDP是由多行文本组成的一个纯文本协议,如果将SDP从语义上分解成不同组件来描述 阅读详情

相关推荐

webrtc sdp详解

SDP(Session Description Protocol)是一种通用的会话描述协议,主要用来描述多媒体会话,用途包括会话声明、会话邀请、会话初始化等。 WebRTC主要在连接建立阶段用到SDP,连接双方通过信令服务交换会话信息,包括音视频编解码器(codec)、主机候选地址、网络传输协议等。 协议版本号 v=0 会话发起者 o=<username> <sess-id> <sess-version> <nettype> <ad

wangbuji的博客 2799

WebRTC | SDP详解

SDP的组织结构、SDP的格式以及WebRTC为了自身的需要对标准SDP的修改。

该用户还没想到好的昵称的博客 6020

WebRTC SDP 解析

SDP sdp(SessionDescriptionProtocol)是一种会话描述协议,属于文本协议,即WebRTC中常说的信令(Signalling),是WebRTC用来协助建立p2p通讯的。主要用于协商双方通讯过程,传递基本信息,如:会话控制信息,用来开始和结束通话,即开始视频、结束视频这些操作指令;处理错误的消息;元数据,如各自的音视频解码方式、带宽;网络数据,对方的公网IP、端口、...

m370809968的专栏 2645

WebRTC系列- SDP详解

文章目录1.综述 1.综述 SDP(Session Description Protocol);按照英文全称,它是一种通用的会话描述协议,也就是一种用来描述信息格式的标准,所以它不是一种用于传输的协议,但是可以用其他的传输协议通过sdp来交换必要的信息; 一般常用在实时音视频中用来交换信息,比如 ...

HOSTEN的博客 4850

WebRTC的SDP

本文描述了WebRTC标准中的会话描述协议(SDP)。

音视频图形编程学习乐园 310

WebRTC[25]-WebRTC中SDP信息实例详解

SDP表示Session Description Protocol,Webrtc是通过SDP进行协商,进而创建出符合通话要求的Session。SDP在webrtc应用中扮演着重要的角色,接下来我们通过一个实例来简单介绍一下SDP信息的含义。 本例是安卓手机和电脑网页建立的视频通讯会话,具体的SDP信息如下所示: 移动端(安卓): "sdp" -> "v=0 o=- 76440494516......

liuzhen007的专栏 4926

WebRTC 中 SDP 信息解析

在 20 世纪的会议系统中通常都是使用 SDP 格式的文本来交互连接属性信息和媒体属性信息,在今天 JSON 这种对象化和可拓展的格式面前确实显得不够通用,尤其是在进行 RPC 通信时通常要将 SDP 信息解析成模块化的格式,ORTC 就是基于这个出发点创建的,但是 SDP 在传统流媒体通信设备上的通用度还是很高的,熟练的理解并分析 SDP 信息对于系统功能开发和调试都是大有裨益的。本文主要通过参考 RFC 4566 文档和 ORTC 思维模式来阐述一套系统化的分析 WebRTC 中 SDP 信息的方法。

aggresss 9307

WebRTC[11]-WebRTC如何通过SDP信息设置音频码率

前言 WebRTC除了通过API接口控制某些参数外,还能通过SDP信息进行音视频参数控制,特别是在进行JS SDK开发时,这种情况是非常普遍的。 正文 首先来看一段SDP信息(只包含音频信息): v=0 o=- 8275923203002055919 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS 6a6d1509-69e0-4fc2-b447-5b4391f9ad69_STS m=audio

liuzhen007的专栏 2793

WebRTC SDP 详解和剖析

WebRTC SDP 详解和剖析 原创网络通信/物联网作者:VideoCloudTech时间:2020-12-08 15:25:1010550 WebRTC 是 Web Real-Time Communication,即网页实时通信的缩写,是 RTC 协议的一种 Web 实现,项目由 Google 开源,并和 IETF 和 W3C 制定了行业标准。在国内 WebRTC 已经获得了越来越多厂商的支持,应用前景变得更加广阔,所以我们也开设专栏,分享阿里云内部的 WebRTC 研究工作。 本篇...

hyl999的专栏 2994

webrtc sdp 介绍

https://blog.youkuaiyun.com/baozi520cc/article/details/103059677

fdsafwagdagadg6576的专栏 693

将pytorch的权值矩阵量化为定点数补码并导入FPGA中

Xilinx FPGA实现LSTM算法时对ROM的初始化 将pytorch框架的权重矩阵以定点数补码的形式导入到FPGA中 文章目录Xilinx FPGA实现LSTM算法时对ROM的初始化1. pytorch框架中的LSTM2. 初始化一个RNN模型 3. 初始化ROM的coe文件格式 4. 将参数转换为补码,并且输出到coe文件 5. 配置一个ROM 6. 结论7. 代码 1. pytorch框架中的LSTM pytorch框架将LSTM算法中的八个权值矩阵连接成两个矩阵,假设要导入的LSTM网络的输

随缘分享 4527

WebRTC SDP详解

TL;NR 更详细的 WebRTC SDP 解析请参考https://tools.ietf.org/html/draft-ietf-rtcweb-sdp-12 0x00 前言 SDP (Session Description Protocol) 格式是一种很有历史的格式,在 20 世纪的会议系统中通常都是使用 SDP 格式的文本来交互多媒体通信双方的连接属性信息和媒体属性信息,在今天 JSON 这种对象化和可拓展的格式面前确实显得不够通用,尤其是在进行 RPC 通信时通常要将 SDP 信息解析成模..

ydjjcdd的博客 1582

VS2017配置PCL1.9.1 for win10(超详细)

准备工作 VS2017 自行下载 PCL1.9.1 点击链接跳转Github下载,根据自己的环境选择 win64或win32,作者下载的是:PCL-1.9.1-AllInOne-msvc2017-win64.exepcl-1.9.1-pdb-msvc2017-win64.zip 安装PCL 双击点开PCL-1.9.1-AllInOne-msvc2017-win64.exe,选择Add PCL to the system PATH for all users, 更改安装路径,E:\Progra

malapoa的博客 1144

WebRTC进阶-SDP协议详解

文章目录SDP结构会话描述会话创建者o媒体描述媒体信息音频媒体信息a=rtpmapa=fmtp视频媒体信息SSRC与CNAMEPlanB与UnifiedPlan网络描述a=candidatea=rtcp-mux和a=group:BUNDLE媒体方向a=sendrecvRTP扩展头a=extmap安全描述服务质量a=rtcp-fbSDP示例offer exampleanswer example与SIP对比传输媒体信令参考文档 webrtc推荐教程,:https://ke.qq.com/course/32021

成长之路 4672

电子技术设计——16×16点阵汉字显示设计

同时,设计还应注重提升显示品质,以保证汉字的稳定展示和观感舒适。本设计的目的是构建一个能够准确在LED点阵上展示汉字的系统,并允许用户通过输入设备来选择所需的汉字,我们将验证设计方案的实际操作性和效果,以确保其满足设计目标。在LED点阵显示和汉字信息处理技术的结合下,研究者们着手研究如何在LED点阵上有效地显示汉字,并提出了一系列显示算法和优化策略,旨在实现清晰且易于阅读的汉字显示效果。首先,你需要准备16×16的LED点阵面板,通常这些点阵是8×8点阵的两倍,因此可以由两个8×8的点阵组合而成。

weixin_68094467的博客 1533

VirtualBox增强功能安装全指南:从下载到配置复制粘贴功能

本文详细介绍了VirtualBox增强功能的完整安装与配置流程,重点解决了虚拟机与主机间复制粘贴、文件拖放等核心协作难题。通过分步指南和故障排查,帮助用户在不同操作系统(如Windows、Linux)中实现无缝集成,提升虚拟化工作效率与体验。

weixin_29206669的博客 418

WebRTC 之 SDP

SDP 即 Session Description Protocol 会话描述协议, 它描述了所传输的媒体信息。 之所以需要在多媒体通信之前交换 SDP, 就在于 接收方需要知道传输的是什么媒体类型,什么编码格式,以便正确的回放, 发送方需要知道接收方能接受什么媒体格式,网络连接地址是多少,从而知道如何编码,向哪里传输。 SDP 内容简介 SDP 所描述的会话信息主要有 1. Session ...

温故而知新 1093

从原理到代码:拆解UniFormer中动态位置嵌入(DPE)的3D卷积实现

本文深入解析了UniFormer模型中动态位置嵌入(DPE)模块的3D卷积实现原理与代码。DPE通过一个轻量的3D深度可分离卷积,替代传统静态位置编码,使模型能自动学习视频数据的时空位置关系。文章对比了其与Swin Transformer相对位置偏置的优劣,并提供了PyTorch实现代码与高级定制方案,为视频理解任务提供了高效灵活的动态位置编码解决方案。

weixin_29207149的博客 309

WebRTC之SDP篇

1 SDP 是什么 见名知意,SDP是session description protocol,会话描述协议。即SDP是一个描述一次会话的协议。一般SDP用于多媒体通信中,由于视频和音频数据的复杂性,不同编码类型的音视频流需要对应的专门的编解码器进行编解码操作,经过编解码器的处理后音视频方能够传输或者播放。而对应的编解码器的初始化必须要知道响应的音视频信息,故SDP一般用于音视频传输前通信双方交流...

u010217394的博客 1058

STM32之W5500网络通信_w5500 profinet

*初始化8个socket*/setSHAR(ConfigMsg.mac);/*配置Mac地址*/setSUBR(ConfigMsg.sub);/*配置子网掩码*/setSIPR(ConfigMsg.lip);/*配置Ip地址*/setGAR(ConfigMsg.gw);/*配置默认网关*/setRTR(2000);/*设置溢出时间值*/setRCR(3);/*设置最大重新发送次数*/

2501_90250923的博客 1461

【低空经济】无人机充电站设计方案

随着无人机技术的快速发展和广泛应用,其在物流、农业、巡检、救援等领域的应用日益普及。然而,无人机的续航能力一直是限制其大规模应用的关键因素之一。为了解决这一问题,无人机充电站的设计与建设显得尤为重要。本项目旨在设计一套高效、智能、可扩展的无人机充电站系统,以满足不同场景下无人机的充电需求,提升其作业效率和应用范围。无人机充电站的设计将围绕以下几个核心目标展开:首先,充电站应具备快速充电能力,以减少无人机的停机时间,提高作业效率;

2959

Webrtc SDP格式解读

因为设备端只支持H264编码方式接入,这里涉及到webrtc web端要修改默认编码器,而编码器就离不开webrtc 信令中SDP 消息的解读,读懂了 才能知道自己支持编码器的情况下对SDP的信息进行二次修改。 本文主要内容来自该说明文档:https://tools.ietf.org/html/draft-nandakumar-rtcweb-sdp-08主要涉及到 RFC4566 RFC5888...

Andy Tools 3263

从技术债红线到系统治理:透视 SAP Clean Core 中的 Level D

SAP推出的Clean Core分级体系将扩展风险划分为A到D四个等级,其中Level D代表最高风险类别,涉及直接修改标准代码、隐式增强、使用noAPI对象等不被推荐的做法。这些做法虽然短期见效快,但会带来升级冲突、数据完整性风险等长期问题。SAP强调治理重点不是完全消除经典ABAP,而是优先清理Level D对象,逐步向稳定接口迁移。典型案例显示,依赖内部细节的扩展往往在系统升级或云迁移时集中暴露出问题。企业应通过工具链持续监控Level D占比,将其纳入技术债管理范畴。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1063

WebRTC核心之SDP详解 十一、第二节 WebRTC中的SDP

今天我们来看看在WebRTC中使用的SDP,在WebRTC中使用SDP相比正常的SDP规范有一些出入,那主要是为了让SDP更能适应WebRTC里面的一些设置以及会话的描述,那么下面我们来看一下,在WebRTC中的SDP组成是包括了5部分 第一部分是会话元也就是会话层,这个与上节所讲的是一致的。它是最不重要的。 第二、另外它有专门的网络描述信息,而不是利用以前SDP规范中媒体层的Ip地址和端口了,所以它要单独的进行网络端信息描述。 第三个以前在SDP中是没有的,这个是流的相关的描述,那么在 WebR

xyphf的博客 1723

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Webrtc之SDP协议

SDP

chen_jianjian的专栏 1329

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: Leetcode3138. 同位字符串连接的最小长度
下一篇: 设计模式:迭代器模式(Iterator)
UestcXiye
博客等级 码龄8年 9028粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值