webRTC上的音频/语音

时间:2015-10-18 11:24:17

标签: javascript audio webrtc

我正在尝试使用webRTC和php作为服务器端实现单向语音传输。

查看samples,我无法理解webRTC机制。

我看到它的方式,流程应如下所示:

  1. 来电和收件人在服务器上注册
  2. 收件人侦听来电
  3. 来电者要求服务器提供收件人的IP
  4. 服务器向调用方发送IP
  5. 来电者直接与收件人联系
  6. 然而sample code,(在本地机器上运行)

    function call() {
      trace('Starting call');
      var servers = null;
      var pcConstraints = {
        'optional': []
      };
      pc1 = new RTCPeerConnection(servers, pcConstraints);
      trace('Created local peer connection object pc1');
      pc1.onicecandidate = iceCallback1;
      pc2 = new RTCPeerConnection(servers, pcConstraints);
      trace('Created remote peer connection object pc2');
      pc2.onicecandidate = iceCallback2;
      pc2.onaddstream = gotRemoteStream;
      trace('Requesting local stream');
      navigator.mediaDevices.getUserMedia({
        audio: true,
        video: false
      })
      .then(gotStream)
      .catch(function(e) {
        alert('getUserMedia() error: ' + e.name);
      });
    }
    

    不使用可以转换为IP的IP地址或任何类型的识别令牌。

    怎么可能?

1 个答案:

答案 0 :(得分:4)

要开始使用,您需要在客户之间提供某种信号通道。大多数人通过WebSockets使用一些协议(通常是基于JSON或SIP)到后端的Node.js,SIP服务器或消息代理,然后可以在两个客户端之间建立桥接。您几乎可以发送直接从WebRTC PeerConnection中提取的数据。这包括SDP,ICE候选者等.PeerConnection可以直接使用从其他对等方生成的数据,因此您不必处理格式化数据。只需将其打包到JSON对象中,然后通过WebSockets将其发送到Node,然后让Node将其发送到另一端。由您来设计注册端点如何找到彼此并创建此桥。

我们使用MQTT over WebSockets来实现这一目标。在我们的模型中,每个客户端都订阅自己的MQTT主题,并且每一方都可以在这些主题上向其他客户端发布消息。客户端使用在主题上订阅的后端服务注册这些主题,或者您可以使用保留的消息让MQTT代理管理主题。您可以在此处详细了解我们的方法:http://www.wasdev.net/webrtc。我们开源信令协议,您可以使用任何开放的MQTT代理。我们还创建了SDK,包括您可以在此处使用的AngularJS模块:http://angular-rtcomm.wasdev.developer.ibm.com/