webRTC 上的音频/语音

Posted

技术标签:

【中文标题】webRTC 上的音频/语音【英文标题】:Audio/Voice over webRTC 【发布时间】:2015-10-18 11:24:16 【问题描述】:

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

看samples,看不懂webRTC机制。

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

    调用者和接收者在服务器上注册 收件人监听来电 调用者向服务器询问接收者的 IP 服务器向调用者发送 IP 来电者直接连接到收件人

但是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 的识别令牌。

这怎么可能?

【问题讨论】:

github.com/webrtc/samples 【参考方案1】:

首先,您需要在客户端之间提供某种信号通道。大多数人在 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 代理。我们还创建了包含 AngularJS 模块的 SDK,您可以在此处使用:http://angular-rtcomm.wasdev.developer.ibm.com/

【讨论】:

支持第一段。信号基础知识的良好总结。

以上是关于webRTC 上的音频/语音的主要内容,如果未能解决你的问题,请参考以下文章

android webRTC语音通话

WebRTC Native M96 回调音频裸数据IAudioFrameObserver--采集和播放语音混音后的数据(onMixedAudioFrame)

WebRTC Native M96 回调音频裸数据IAudioFrameObserver--采集和播放语音混音后的数据(onMixedAudioFrame)

WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver

WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver

WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver