精华内容
下载资源
问答
  • WebRTC 1-1视频通话(服务器) npm i -g yarn yarn dev
  • WebRTC SDP 解析

    千次阅读 2019-03-06 11:43:56
    sdp(SessionDescriptionProtocol)是一种会话描述协议,属于文本协议,即WebRTC中常说的信令(Signalling),是WebRTC用来协助建立p2p通讯的。主要用于协商双方通讯过程,传递基本信息,如:会话控制信息,用来开始...

    SDP

    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

    //groupBUNDLE表示audiovideo共用一个媒体传输通道

    a=msid-semantic: WMS

    //WMSWebRTC 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

    //rtprtcp使用同一个端口传输

    a=rtpmap:111 opus/48000/2

    a=rtcp-fb:111 transport-cc

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

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

    //Minptime=10代表最小包时长是10msuseinbandfec=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中一个非常重要的协议,很有必要搞清楚每个字段的真正意义。

    欢迎关注本人公众号:

    或者微信搜索公众号:webrtc home

    展开全文
  • 今天我们来看看在WebRTC中使用的SDP,在WebRTC中使用SDP相比正常的SDP规范有一些出入,那主要是为了让SDP更能适应WebRTC里面的一些设置以及会话的描述,那么下面我们来看一下,在WebRTC中的SDP组成是包括了5部分 ...

    今天我们来看看在WebRTC中使用的SDP,在WebRTC中使用SDP相比正常的SDP规范有一些出入,那主要是为了让SDP更能适应WebRTC里面的一些设置以及会话的描述,那么下面我们来看一下,在WebRTC中的SDP组成是包括了5部分

    第一部分是会话元也就是会话层,这个与上节所讲的是一致的。它是最不重要的。

    第二、另外它有专门的网络描述信息,而不是利用以前SDP规范中媒体层的Ip地址和端口了,所以它要单独的进行网络端信息描述。

    第三个以前在SDP中是没有的,这个是流的相关的描述,那么在 WebRTC中它将这个视频音频,每路视频每路音频都形成一个音频轨和视频轨,然后最终形成一个流,将音频轨、视频轨放入一个流中作处理。以前的SDP正常的规范就没有流相关的信息。

    第四个是一些安全相关的描述,因为webRTC最初的愿景是在浏览器与浏览器之间快速的创建音频与视频的应用,那么在浏览器中安全性就非常的重要,包括你是否有权利打开这个音频设备,那么在整个浏览器的数据传输之间你的数据的安全性这些都是非常重要的,所以它又加了这个安全相关的描述。

    第五个再有的就是服务质量,在整个传输的过程中,网络的质量如何,会不会影响我这个视频音频 整体的感受,那么音频与视频的质量实际与这个传输的质量是密切相关的。

    所以WebRTC的SDP就有五大部分组成了。网络描述、流描述、安全描述、服务质量这四大类实际是非常关键的。那下面我们就来看看每一项

      

    会话元包括v=、t=、o=

    网络描述包括c=、除了包括原始的这个c之外它还包括一个candidate,candidate通过什么去描述呢通过属性a去描述,所以这个就特别重要,a能用到各种各样的地方。我们描述一个网络的属性candidate,那么网络主要是这两部分,一个是c一个是candidate

    流描述里面实际就是m媒体,在webRTC中把整个流当作一个媒体来看待,那么多个媒体可以绑定到一起,首先的是m(media),然后紧接着是它的属性a=rtpmap,对m这个的进一步的说明。还有一个是对每一个payload type格式的详细的设置a=fmtp,这也是一个属性。这就是流相关的一些描述。

    安全描述一般都通过属性来设置的,第一个是使用的算法,加密算法是通过什么,通过这个属性a=crypto,那么整个WebRTC是通过整个ICE收集的整个网络地址和连通性检测,最终选出一个最有效的路径来,那么选出这个最有效的路径怎么知道这两台机子的会话是合法的呢?那就是通过这个a=ice-frag,它代表的是一个用户名的片段也就是整个用户名需要加一个片段,还有一个是a=ice-pwd,那就是通过这个ice-frag和ice-pwd然后对这个用户进行连通性检测的时候,对这个用户进行判断,也就是如果我通过SDP将这个信息将这个对方的frag和pwd传给你,那当真正建立连接性检测的时候,它就通过这个密码去验证,跟你连通的时候我将这个ice-frag和这个ice-pwd传给你,传给你之后如果你验证通过了,那说明咱们确实是应该建立连接的,那如果你是一个第三方,你想和我进行偷偷的连接,我传给你的用户名和密码,然后你在给我发回来,发出来的用户名和密码与我真正放出去的用户名和密码是不一致的,那说明你是一个非法用户。通过这种方式来保证整个链路的连接是安全的。这就是安全描述。还有一个就是a=fingerprint也就是指纹,那指纹是用来干什么的呢?指纹就是用来我们进行数据加密的时候,来验证这个证书的。那它首先通过信令层将SDP中的证书的指纹下发给对方,那么下次对数据加密的时候跟之前的它进行一下数据证书的交换,交换证书的时候通过的是DPLS,那么通过DPS和LS进行证书交换的时候,通过这个指纹去验证你这个证书的有效性,那如果这个证书验证是有效性的,然后后面你才能进行数据加密然后进行传输。如果通过指纹这个证书不匹配,那说明你这个连接也是有问题的。那这个时候就不能进行传输。通过以上这个种种方式呢,在打通的时候进行一次验证,在传数据的时候在交换证书的时候也要进行验证,那么通过这个层层的安全的验证,才能保证整个webRTC传输的安全性。以上就是安全性相关的一些描述。当然最后进行算法加密的时候你可以使用这个a=crypto指定的加密算法,也可以通过DPLS交换的证书里的指定的加密算法进行加密,那就是具体的加密算法 了,就是另外的话题了。

    服务质量 那么对于WebRTC它的整个服务质量包括网络质量的反馈,包括丢包重传的反馈,那么这些是通过a=rtcp-fb进行信息的反馈,通过这个信息反馈无论是发送方还是接收方,它的这个网络质量的是什么样子的,然后我使用的评估方法是什么?这些它都可以获取到的,所以这个就是用户服务质量的rtcp-fb,那它里面有很多的参数 ,后面我们讲具体的例子的时候,大家会看到。在有一个是a=group,就是这个group是可以将多个音频媒体绑定到一起形成一个媒体流,比如说音频和视频绑定到一起,那它们可以用同样的数据通道,底层的网络通道是可以复用的,他们绑定一起就可以复用,就是通过这种方式。

    像这些网络安全和服务质量的都属于attribute属性的描述,作进一步说明的,所以说SDP复杂在哪呢?就是它的整个规范并不复杂,但是你真正用的时候就可以通过这个属性attribute去作各种各样的限制,那么这个时候每一套限制都有一套这个规范,这样就增加了这个SDP的复杂性,但是实际如果你了解了这个整个的过程的话,了解它这个整个规范的话其实就很容易理解它了。还有一个是a=rtcpmux复用,也就是这个rtcp与这个rtp复用同样的网络地址和端口,一般情况下这个rtcp与rtp的端口是不一致的,比如说我的rtp端口是1024,那么一般rtcp就是在rtp的端口号加1是1025,那么你如果设置了这个属性之后那么rtp和rtcp就复用了同一个端口,这个就是服务质量相关的,那么通过这个质量介绍。

    那么就可以看到WebRTC的SDP是由5大部分组成。

    展开全文
  • 1、什么是sdp SDP(Session Description Protocol)描述会话协议,它只是一种信息格式的描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要的信息,用于两个会话实体之间的媒体协商。 2、sdp协议结构 ...

    1、什么是sdp

    SDP(Session Description Protocol)描述会话协议,它只是一种信息格式的描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要的信息,用于两个会话实体之间的媒体协商。

    2、sdp协议结构

    SDP的文本信息包括:
    • 会话信息
    • 网络信息
    • 媒体信息
    • 安全信息
    • 服务质量和分组信息
    
                                                     +---------------------+
                                                     |        v=           |
                                                     +---------------------+
                     +---------------------+         +---------------------+
             ====    |   Session Metadata  |  =====  |        o=           |
             |       +---------------------+         +----------------------
             |                                       +---------------------+
             |                                       |        t=           |
             |                                       +---------------------+
             |
             |
             |                                       +---------------------+
             |                                       |        c=           |
             |                                       +---------------------+
             |       +---------------------+
             ====    | Network Description |   =====
             |       +---------------------+
             |                                       +---------------------+
             |                                       |    a=candidate      |
             |                                       +---------------------+
             |
             |
             |                                       +---------------------+
             |                                       |        m=           |
             |                                       +---------------------+
             |        +---------------------+        +---------------------+
             ====     | Stream Description  |  ===== |      a=rtpmap       |
             |        +---------------------+        +----------------------
             |                                       +---------------------+
             |                                       |      a=fmtp         |
             |                                       +---------------------+
             |                                       +---------------------+
             |                                       |      a=sendrecv..   |
             |                                       +---------------------+
     +---------------+
     |    SEMANTIC   |
     | COMPONENTS OF |
     |     SDP       |
     +---------------+
             |                                       +---------------------+
             |                                       |      a=crypto       |
             |                                       +---------------------+
             |         +---------------------+       +---------------------+
             ====      |Security Descriptions|  =====|      a=ice-frag     |
             |         +---------------------+       +----------------------
             |                                       +---------------------+
             |                                       |      a=ice-pwd      |
             |                                       +---------------------+
             |                                       +---------------------+
             |                                       |     a=fingerprint   |
             |                                       +---------------------+
             |
             |
             |
             |                                       +---------------------+
             |                                       |      a=rtcp-fb      |
             |                                       +---------------------+
             |         +---------------------+       +---------------------+
             ====      |   Qos,Grouping      |       |                     |
                       |   Descriptions      |  =====|       a=group       |
                       +---------------------+       +----------------------
                                                     +---------------------+
                                                     |       a=rtcpmux     |
                                                     +---------------------+
    
    sdp格式

    SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定,每个SDP有一个会话级描述、多个媒体级描述。

    <type>=<value>
    
    <type>: 区分大小写,代表特定的属性,例如v代表SDP版本。
    <value>:UTF8编码的文本,具体格式与类型有关。
    =两边不允许存在空格。
    =*表示该项是可选的。
    
    

    会话的名称和目的 Session Description

    v = (协议版本)
    o = (所有者/创建者和会话标识符)
    s = (会话名称)
    i = * (会话信息)
    u = * (URI 描述)
    e = * (Email 地址)
    p = * (电话号码)
    c = * (连接信息 ― 如果包含在所有媒体中,则不需要该字段)
    b = * (带宽信息)

    会话存活时间 Time Description

    t = (会话活动时间)
    r = * (0或多次重复次数)

    构成会话的媒体(会话中包括多个媒体)
    SDP的媒体信息 Media Description
    媒体格式
    传输协议
    传输IP和端口
    媒体负载类型(VP8、VP9、H264、H265)

    m = (媒体名称和传输地址)
    i = * (媒体标题)
    c = * (连接信息 — 如果包含在会话层则该字段可选)
    b = * (带宽信息)
    k = * (加密密钥)
    a = * (0 个或多个会话属性行)

    3、sdp实例

                          【Session Metadata部分】
    v=0
    //sdp版本号,一直为0,rfc4566规定
    
    o=- 7017624586836067756 2 IN IP4 127.0.0.1
    //origion/owner  o=<username> <session id> <version> <network type> <address type> <unicast-address>
    //username如何没有使用-代替,7017624586836067756是整个会话的编号,2代表会话版本,如果在会话
    //过程中有改变编码之类的操作,重新生成sdp时,sess-id不变,sess-version加1
    
    s=-
    //会话名,必选,没有的话使用-代替
    
    t=0 0
    //两个值分别是会话的起始时间和结束时间,这里都是0代表没有限制
    
    a=group:BUNDLE audio video data
    //需要共用一个传输通道传输的媒体,如果没有这一行,音视频,数据就会分别单独用一个udp端口来发送
    
    a=msid-semantic: WMS h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
    //WMS是WebRTC Media Stream简称,这一行定义了本客户端支持同时传输多个流,一个流可以包括多个track,
    //一般定义了这个,后面a=ssrc这一行就会有msid,mslabel等属性
    
                              【Stream Description部分】
                              
            【audio部分】
            
    m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
    //m = <media><port><transport><fmt/payload type list>
    //m=audio说明本会话包含音频,9代表音频使用端口9来传输,但是在webrtc中一现在一般不使用,如果设置为0,代表不
    //传输音频,UDP/TLS/RTP/SAVPF是表示用户来传输音频支持的协议,udp,tls,rtp代表使用udp来传输rtp包,并使用tls加密
    //SAVPF代表使用srtcp的反馈机制来控制通信过程,后台111 103 104 9 0 8 106 105 13 126表示本会话音频支持的编码,后台几行会有详细补充说明
    
    c=IN IP4 0.0.0.0
    //这一行表示你要用来接收或者发送音频使用的IP地址,webrtc使用ice传输,不使用这个地址
    
    a=rtcp:9 IN IP4 0.0.0.0
    //用来传输rtcp地地址和端口,webrtc中不使用
    
    a=ice-ufrag:khLS
    a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
    //以上两行是ice协商过程中的安全验证信息
    
    a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17
    //以上这行是dtls协商过程中需要的认证信息
    
    a=setup:actpass
    //以上这行代表本客户端在dtls协商过程中,可以做客户端也可以做服务端,参考rfc4145 rfc4572
    
    a=mid:audio
    //在前面BUNDLE这一行中用到的媒体标识
    
    a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
    //上一行指出我要在rtp头部中加入音量信息,参考 rfc6464
    
    a=sendrecv
    //上一行指出我是双向通信,另外几种类型是recvonly,sendonly,inactive
    
    a=rtcp-mux
    //上一行指出rtp,rtcp包使用同一个端口来传输
    
    //下面几行都是对m=audio这一行的媒体编码补充说明,指出了编码采用的编号,采样率,声道等
    a=rtpmap:111 opus/48000/2
    //可选 a=rtpmap:<fmt/payload type><encoding name>/<clock rate>[/<encodingparameters>]
    
    a=rtcp-fb:111 transport-cc
    //以上这行说明opus编码支持使用rtcp来控制拥塞,参考https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01
    
    a=fmtp:111 minptime=10;useinbandfec=1
    //可选 a=fmtp:<fmt/payload type> parameters  对rtpmap进一步说明
    //对opus编码可选的补充说明,minptime代表最小打包时长是10ms,useinbandfec=1代表使用opus编码内置fec特性
    
    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:126 telephone-event/8000
    a=ssrc:18509423 cname:sTjtznXLCNH7nbRw
    //cname用来标识一个数据源,ssrc当发生冲突时可能会发生变化,但是cname不会发生变化,也会出现在rtcp包中SDEC中,
    //用于音视频同步
    
    a=ssrc:18509423 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C 15598a91-caf9-4fff-a28f-3082310b2b7a
    //以上这一行定义了ssrc和WebRTC中的MediaStream,AudioTrack之间的关系,msid后面第一个属性是stream-d,第二个是track-id
    
    a=ssrc:18509423 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
    a=ssrc:18509423 label:15598a91-caf9-4fff-a28f-3082310b2b7a
    
           【video部分】
           
    m=video 9 UDP/TLS/RTP/SAVPF 100 101 107 116 117 96 97 99 98
    //参考上面m=audio,含义类似
    
    c=IN IP4 0.0.0.0
    a=rtcp:9 IN IP4 0.0.0.0
    a=ice-ufrag:khLS
    a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
    a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17
    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-hol ... de-cc-extensions-01
    a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
    a=sendrecv
    a=rtcp-mux
    a=rtcp-rsize
    a=rtpmap:100 VP8/90000
    a=rtcp-fb:100 ccm fir
    //ccm是codec control using RTCP feedback message简称,意思是支持使用rtcp反馈机制来实现编码控制,fir是Full Intra Request
    //简称,意思是接收方通知发送方发送幅完全帧过来
    a=rtcp-fb:100 nack
    //支持丢包重传,参考rfc4585
    
    a=rtcp-fb:100 nack pli
    //支持关键帧丢包重传,参考rfc4585
    
    a=rtcp-fb:100 goog-remb
    //支持使用rtcp包来控制发送方的码流
    
    a=rtcp-fb:100 transport-cc
    //参考上面opus
    a=rtpmap:101 VP9/90000
    a=rtcp-fb:101 ccm fir
    a=rtcp-fb:101 nack
    a=rtcp-fb:101 nack pli
    a=rtcp-fb:101 goog-remb
    a=rtcp-fb:101 transport-cc
    a=rtpmap:107 H264/90000
    a=rtcp-fb:107 ccm fir
    a=rtcp-fb:107 nack
    a=rtcp-fb:107 nack pli
    a=rtcp-fb:107 goog-remb
    a=rtcp-fb:107 transport-cc
    a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
    
    //h264编码可选的附加说明
    a=rtpmap:116 red/90000
    //fec冗余编码,一般如果sdp中有这一行的话,rtp头部负载类型就是116,否则就是各编码原生负责类型
    
    a=rtpmap:117 ulpfec/90000
    //支持ULP FEC,参考rfc5109
    
    a=rtpmap:96 rtx/90000
    a=fmtp:96 apt=100
    //以上两行是VP8编码的重传包rtp类型
    
    a=rtpmap:97 rtx/90000
    a=fmtp:97 apt=101
    a=rtpmap:99 rtx/90000
    a=fmtp:99 apt=107
    a=rtpmap:98 rtx/90000
    a=fmtp:98 apt=116
    a=ssrc-group:FID 3463951252 1461041037
    //在webrtc中,重传包和正常包ssrc是不同的,上一行中前一个是正常rtp包的ssrc,后一个是重传包的ssrc
    
    a=ssrc:3463951252 cname:sTjtznXLCNH7nbRw
    a=ssrc:3463951252 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C ead4b4e9-b650-4ed5-86f8-6f5f5806346d
    a=ssrc:3463951252 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
    a=ssrc:3463951252 label:ead4b4e9-b650-4ed5-86f8-6f5f5806346d
    a=ssrc:1461041037 cname:sTjtznXLCNH7nbRw
    a=ssrc:1461041037 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C ead4b4e9-b650-4ed5-86f8-6f5f5806346d
    a=ssrc:1461041037 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
    a=ssrc:1461041037 label:ead4b4e9-b650-4ed5-86f8-6f5f5806346d
    m=application 9 DTLS/SCTP 5000
    c=IN IP4 0.0.0.0
    a=ice-ufrag:khLS
    a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
    a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17
    a=setup:actpass
    a=mid:data
    a=sctpmap:5000 webrtc-datachannel 1024
    

    WebRTC核心之SDP详解、媒体协商

    WebRTC – SDP格式解析

    WebRTC会话描述协议(SDP)详解

    展开全文
  • WebRtc相关技术SDP修改方法,必定让你了解更多WebRtc相关技术
  • 众所周知,webrtc启用simulcast是通过修改sdp信息实现的,这里提供一个具体的sdp实例。
  • webrtc-sdp 用Rust编写的SDP解析器专门用于处理WebRTC SDP的要约和答案。 依存关系 锈> = 1.45.0 日志模块 SERDE模块 丝氨酸衍生模块 第一次构建webrtc-sdp时,Cargo会自动安装缺少的模块。 webrtc-sdp API 主要...
  • WebRTC SDP协议

    千次阅读 2018-02-20 21:32:55
    SDP SDP Session Description Protocol 会话描述协议 SDP协议用来在SIP终端之间...WebRTC Peer之间交换SDP包括的信息有transport protocols,ports,codecs等等 相关的IETF文档: https://tools.ietf.org/pdf/draf...

    SDP

    SDP Session Description Protocol 会话描述协议
    SDP协议用来在SIP终端之间交换媒体信息,WebRTC标准中同样选用了
    SDP协议来交换媒体信息.
    
    WebRTC Peer之间交换SDP包括的信息有transport protocols,ports,codecs等等
    相关的IETF文档:
    https://tools.ietf.org/pdf/draft-nandakumar-rtcweb-sdp-08.pdf

    语法

    SDP由多部分信息组成 每部分信息占一行.
    <type>=<value>
    
    v= 表示版本
    o= 表明会话源 ssrc
    s= 表明会话名
    a= 表明会话属性
    m= 表明媒体协议信息

    WebRTC SDP解析

    这篇blog详细注释了一个sdp
    http://www.cnblogs.com/onlycoder/p/7297362.html

    修改SDP

    修改SDP的时机:
    1. 生成Local SDP后, 设置setLocalDescprition之前 修改本地的SDP
    2. 设置Remote SDP后, 设置setRemoteDescprition之前 修改Remote端的SDP

    SDP协商规则

    此处应当分析webrtc的代码来查看双方是怎么根据local和remote的sdp确定
    媒体能力的.

    带宽控制

    sdp中存在a=rtcp-fb:100 ccm fir描述行
    会罗列多行 a=rtcp-fb
    
    根据当前协议选用的编码协议 在对应的rtcp描述行后加上
    a=fmtp:100 x-google-max-bitrate=2800;x-google-min-bitrate=1200;x-google-start-bitrate=200000
    
    x-google-max-bitrate 最大码率
    x-google-min-bitrate 最低码率
    x-google-start-bitrate 会话的起始码率

    Codec编码器

    sdp中一般存在m=video行 描述video相关的信息
    m=video 9 RTP/SAVPF 100 116 117 121 96
    100 代表 视频编码优先选用VP8
    121 代表 H264
    顺序先后表示优先级 所以如果要优先选用H264编码 修改SDP中视频编码器的顺序.
    展开全文
  • WebRTC 是 Web Real-Time Communication,即网页实时通信的缩写,是 RTC 协议的一种Web实现,项目由 Google 开源,并和 IETF 和 W3C 制定了行业标准。在国内 WebRTC 已经获得了越来越多厂商的支持,应用前景变得更加...
  • webrtc SDP数据交换及建立链接DEMO.其中server.js 是信令服务器。 ###运行 分别运行index.js,server.js node index.js node server.js 访问 http://127.0.0.1:8888/index1.html ...
  • WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274 一、什么是SDP SDP(Session Description Protocol)描述会话协议,它只是一种信息格式的描述标准,本身不属于传输...
  • WEBRTC中的SDP

    2020-09-13 23:43:15
    版本v, owner o, 时间t 连接c connection, a=candidate候选者, media, atribute(rtpmap), atribute(fmtp) crypto:数据传递时使用的dtls,加密算法是什么;...ice-pwd;fingerprint :指纹;... group:传输时音频视频流是...
  • SDP 创建 作者:LanPZzzz 文章目录1. 流程 CreateOffer 就已经完成了2. 1. 流程 CreateOffer 就已经完成了 -> PeerConnection::CreateOffer (pc\peerconnection.cc 1755) -> PeerConnection::...
  • WebRTC语义SDP 最少的SDP信息语义数据模型和解析工具。 动机 您是否曾经尝试过处理或处理SDP并卡住了如何更改信息而不是要访问的信息? 该项目在SDP之上提供了一个抽象层,该抽象层允许以语义方式访问和修改信息,...
  • WebRTC-SDP详细解析

    千次阅读 2019-05-31 15:59:08
    //sdp版本号,一直为0,rfc4566规定 o=- 7017624586836067756 2 IN IP4 127.0.0.1 // RFC 4566 o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>...
  • WebRTC[25]-WebRTCSDP信息实例详解

    千次阅读 2019-06-04 11:29:21
    SDP表示Session Description Protocol,Webrtc是通过SDP进行协商,进而创建出符合通话要求的Session。SDPwebrtc应用中扮演着重要的角色,接下来我们通过一个实例来简单介绍一下SDP信息的含义。 本例是安卓手机和...
  • WebRTC除了通过API接口控制某些参数外,还能通过SDP信息进行音视频参数控制,特别是在进行JS SDK开发时,这种情况是非常普遍的。 正文 首先来看一段SDP信息(只包含音频信息): v=0 o=- 8275923203002055919 2 ...
  • 那么在媒体层呢,又可以通过attribute属性来去对媒体作进一步的说明,这个呢就是这个SDP的规范,那么紧接着呢,我们又介绍了WebRTC中如何使用SDP的,不知道大家还记怎么记得他一共是五大项,包括了会话、网络、服务...
  • Webrtc SDP格式解读

    千次阅读 2019-07-17 20:15:15
    因为设备端只支持H264编码方式接入,这里涉及到webrtc web端要修改默认编码器,而编码器就离不开webrtc 信令中SDP 消息的解读,读懂了 才能知道自己支持编码器的情况下对SDP的信息进行二次修改。 本文主要内容来自该...
  • 最近刚好接手了原生webrtc...主播端创建一个peerconnection实例,添加完音视频轨道之后createOffersdp之后setLocalDescription设置本地offer描述(生成的sdp信息里面包含是否传输音视频流和相关支持的一些编解码参数)
  • 事实证明,您不需要太多的 SDP 来建立 WebRTC 连接。 基本上,要运行 P2P 连接,您真正需要的只是交换 ice-ufrag、ice-pwd、dtls 指纹以及候选 IP 和端口。 其中,以不太有效的方式编码,归结为略多于 100 个字符。...
  • WebRTC SDP详解

    2021-01-08 18:22:36
    NR 更详细的 WebRTC SDP 解析请参考https://tools.ietf.org/html/draft-ietf-rtcweb-sdp-12 0x00 前言 SDP (Session Description Protocol) 格式是一种很有历史的格式,在 20 世纪的会议系统中通常都是使用 SDP ...
  • webrtc和sip兼容

    2018-08-02 09:14:00
    背景 (1)使用webrtc作为音视频处理引擎 (2)sip作...
  • SDP很早就用于流媒体中来描述媒体信息,例如RTSP的SDP文件,现在的WebRTC也是用SDP来描述媒体信息的。 在WebRTC中,SDP主要用来描述: •设备支持的媒体能力,包括编解码器等 •ICE候选地址 •流媒体传输协议 SDP...
  • 信令的一个主要功能是交换消息体,消息体可以是XML、X-Q931、SDP等,是一条消息的净荷部分,webrtc使用SDP描述媒体信息,默认使用Unified Plan。 Unified Plan,一个m行用一个ContentInfo存,会建立一个transceiver...
  • webrtcsdp分析

    千次阅读 2018-07-03 00:11:45
    webrtcsdp分offer和answer两个,以offer为例,简单分析 ,其实就2个m(media)就可以了:"sdp" : " v=0 //version 版本 o=- 6547339724864950015 2 IN IP4 127.0.0.1 //origin 源 IN为internet ...
  • https://blog.csdn.net/m0_37263637/article/details/93894911
  • 今年2月份,webrtc M89 的正式发布,在Release note 提出了一个重要更新,即废webrtc Plan B SDP 语义,推荐使用标准SDP格式:Unified Plan。WebRTC1.0 已经正式成为 W3C 标准,主流浏览器基本都支持UnifiedPlan SDP...
  • webrtc+ffmpeg(连麦直播效果展示)

    千次阅读 2019-07-30 21:06:54
    展示效果 补充 画面说明: ...手机(左一):用户,中间画面是合流后的本地显示。右下角是本地视频呈现,左上角是对方视频呈现。...手机(左二) :用户,右下角是本地视频呈现,左上角是对方视频呈现。...
  • WebRTCSDP

    2021-03-11 10:58:11
    SDP 即 Session Description Protocol 会话描述协议, 它描述了所传输的媒体信息。 之所以需要在多媒体通信之前交换 SDP, 就在于 接收方需要知道传输的是什么媒体类型,什么编码格式,以便正确的回放, 发送方需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,694
精华内容 1,077
关键字:

sdpwebrtc