WebRTC-Web Real-Time Communications, 这沙皮玩意真心艰难,不过不可否认的是它的确是目前比较强大的行业音视频流跨平台传输的好物。为了美好的未来,只能劝说自己吃下它。开始吧。

theorem

我看着权威指南上的话“而掌握如SIP或Jingle之类的另一种互联网通信信号协议的只是也是非常有用的”,顿时觉得自己就是个瓜皮。这都什么跟什么。为了尊重下作者的心血,这里勉为其难解释下,简单来说SIP(Session Initiation Protocol)是一种会话初始协议,用于创建、修改和释放一个或者多个参与者的会话,具体细节的话如果你感兴趣可以深究下,我就知难暂退了,毕竟我实在对这没多大兴趣。此外,Jingle协议是为了建立一对一、点对点的媒体会话。

以上意义不大,下面针对重点内容进行描述。使用、本地媒体、信令、对等媒体及协商、数据通道、协议、NAT和防火墙穿透、STUN和TURN服务器实现八部分内容。也许一次我们说不完,那就下次下次下下次咯。

如何使用WebRTC

所谓建立对等连接 就是为每一对要连接的对象建立一个连接,而建立此连接需要一个新的RTCPeerConnection对象,RTCPeerConnection构造函数输入包含ICE(Interactive Connectivity Establishment. 交互式连接建立技术)相关的信息。

建立连接后,可以将任意的本地媒体流关联到对等连接,从而通过该连接发送到远端。两个对等对象交换RTCSessionDescription,即可建立媒体会话。

应用对RTCPeerConnection对象调用close()指示连接使用完毕。会话结束后,应用删除会话授予的设备许可,在新的会话中,需要向用户请求新的许可。建立提议/应答机制是为了确保媒体流传输之前达成一致,而这个机制是通过对等端建立的信令通道进行的。

PC端伪代码

var pc;
var configuration =
{
    "iceServers":[{"url":"stun:x.x.x.x"},
                  {"url":"turn:x.x.x.x", "credential":"passwd"}]

};
var webcam, left, right;
var av, stereo, mono;
var incoming;
var speaker, win1, win2, win3;

var signalingChannel = createSignalingChannel();

Android端伪代码


support

⤧  Next post C++ 基础特性 ⤧  Previous post Jupyter Server