Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript webRTC上的音频/语音_Javascript_Audio_Webrtc - Fatal编程技术网

Javascript webRTC上的音频/语音

Javascript webRTC上的音频/语音,javascript,audio,webrtc,Javascript,Audio,Webrtc,我正在尝试使用webRTC和php作为服务器端实现单向语音传输 看一下,我无法理解webRTC机制 在我看来,流程应该是这样的: 呼叫方和收件人在服务器上注册 收件人监听来电 呼叫方向服务器询问收件人的IP地址 服务器向调用者发送IP 呼叫方直接连接到收件人 但是,(在本地计算机上运行的) 不使用ip地址或任何可转换为ip的标识令牌 这怎么可能呢?要开始,您需要在客户之间提供某种信号渠道。大多数人都在WebSocket上使用一些协议(通常是基于JSON或SIP)来连接Node.js、SIP服务器

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

看一下,我无法理解
webRTC
机制

在我看来,流程应该是这样的:

  • 呼叫方和收件人在服务器上注册
  • 收件人监听来电
  • 呼叫方向服务器询问收件人的IP地址
  • 服务器向调用者发送IP
  • 呼叫方直接连接到收件人
  • 但是,(在本地计算机上运行的)

    不使用ip地址或任何可转换为
    ip
    的标识令牌


    这怎么可能呢?

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


    我们使用WebSocket上的MQTT来实现这一点。在我们的模型中,每个客户机都订阅自己的MQTT主题,并且每一方都可以向其他客户机发布关于这些主题的消息。客户机也向订阅了主题的后端服务注册这些主题,或者您可以使用保留消息让MQTT代理管理这些主题。您可以在此处阅读有关我们方法的更多信息:。我们将信令协议开源,您可以使用任何开放的MQTT代理来实现这一点。我们还创建了SDK,其中包括一个AngularJS模块,您可以在此处使用:

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


    我们使用WebSocket上的MQTT来实现这一点。在我们的模型中,每个客户机都订阅自己的MQTT主题,并且每一方都可以向其他客户机发布关于这些主题的消息。客户机也向订阅了主题的后端服务注册这些主题,或者您可以使用保留消息让MQTT代理管理这些主题。您可以在此处阅读有关我们方法的更多信息:。我们将信令协议开源,您可以使用任何开放的MQTT代理来实现这一点。我们还创建了SDK,其中包括一个AngularJS模块,您可以在这里玩:

    Upvote for first段落。很好地总结了信号的基本知识。第一段请向上投票。很好地总结了信号的基础知识。
    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);
      });
    }