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 章