Page 294 - Web性能权威指南
P. 294

➌ Opus 编解码器及基本配置

               SDP 是一个基于文本的简单协议(RFC  4568),用于描述会话属性。在前面的例子
               中,我们通过它描述的是采集的音频流。好消息是,WebRTC 应用不必直接处理
               SDP。JSEP( JavaScript Session Establishment Protocol ,  JavaScript 会话建立协议)
               定义了对 RTCPeerConnection 对象几个方法的简单调用,就把 SDP 所有的内部工作
               全都隐藏了起来。

               生成提议之后,就可以通过发信通道将它发送给远端。同样,如何编码 SDP 取决于
               应用:SDP 字符串可以像前面那样(作为简单的文本 blob)直接传输,也可以将它
               编码成任意格式后再传输。嗯,Jingle 协议提供了从 SDP 到 XMPP(XML)格式的
               映射。

               要建立端到端的连接,两端都必须遵循一个对称的工作流(图 18-7),以交换各自
               音频、视频及其他数据流的 SDP 描述。





                                       ༵ᅱ                     ༵ᅱ
                            ቧෙ         ᆌٴ       ݀႑ཚڢ          ᆌٴ         ૚຺







               图 18-7:两端之间的 SDP 提议 / 应答交换
               (1) 连接发起者(张三)通过自己的本地 RTCPeerConnection 对象注册一或多个流,
                 创建提议,并将其设置为会话的“本地描述”。
               (2) 然后,张三把生成的会话提议发送给另一端(李四)。
               (3) 李四收到提议后,将张三的描述设置为会话的“远程描述”,使用他自己的
                 RTCPeerConnection 对象注册自己的流,生成应答的 SDP 描述,并将其设置为会
                 话的“本地描述”。
               (4) 然后,李四把生成的会话应答回传给张三。
               (5) 张三接到李四的 SDP 应答后,再将这个应答设置为原始会话的“远程描述”。

               这样,在通过发信通道交换 SDP 会话描述后,双方就交换了经过协商的流类型及相
               应设置。然后差不多马上就可以开始端到端的通信了!不过,在此之前还必须注意
               一个细节,那就是连接检查和 NAT 穿越。




               284   |   第 18 章
   289   290   291   292   293   294   295   296   297   298   299