Audio/Voice 通过 webRTC
Audio/Voice over webRTC
我正在尝试使用 webRTC
和 php 作为服务器端实现单向语音传输。
看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
的标识令牌。
怎么可能?
首先,您需要在客户之间提供某种信号通道。大多数人都在 WebSockets 上使用某种协议(通常是基于 JSON 或 SIP)到后端的 Node.js、SIP 服务器或消息代理,然后可以在两个客户端之间桥接。您几乎可以发送直接从 WebRTC PeerConnection 提取的数据块。这包括 SDP、ICE 候选者等。PeerConnection 可以直接使用从其他对等点生成的数据,因此您不必处理格式化数据。只需将它打包成一个 JSON 对象并通过 WebSockets 将它发送到 Node,然后让 Node 将它发送到另一端。由您设计已注册的端点如何找到彼此并创建此桥。
我们使用基于 WebSockets 的 MQTT 来做到这一点。在我们的模型中,每个客户端都订阅自己的 MQTT 主题,每一方都可以就这些主题向其他客户端发布消息。客户端向后端服务注册这些主题,后端服务也订阅了一个主题,或者您可以使用保留的消息让 MQTT 代理管理这些主题。您可以在此处详细了解我们的方法:http://www.wasdev.net/webrtc. We open sourced the signaling protocol and you can use any open MQTT broker for this. We also created SDKs including an AngularJS module you can play with here: http://angular-rtcomm.wasdev.developer.ibm.com/
我正在尝试使用 webRTC
和 php 作为服务器端实现单向语音传输。
看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
的标识令牌。
怎么可能?
首先,您需要在客户之间提供某种信号通道。大多数人都在 WebSockets 上使用某种协议(通常是基于 JSON 或 SIP)到后端的 Node.js、SIP 服务器或消息代理,然后可以在两个客户端之间桥接。您几乎可以发送直接从 WebRTC PeerConnection 提取的数据块。这包括 SDP、ICE 候选者等。PeerConnection 可以直接使用从其他对等点生成的数据,因此您不必处理格式化数据。只需将它打包成一个 JSON 对象并通过 WebSockets 将它发送到 Node,然后让 Node 将它发送到另一端。由您设计已注册的端点如何找到彼此并创建此桥。
我们使用基于 WebSockets 的 MQTT 来做到这一点。在我们的模型中,每个客户端都订阅自己的 MQTT 主题,每一方都可以就这些主题向其他客户端发布消息。客户端向后端服务注册这些主题,后端服务也订阅了一个主题,或者您可以使用保留的消息让 MQTT 代理管理这些主题。您可以在此处详细了解我们的方法:http://www.wasdev.net/webrtc. We open sourced the signaling protocol and you can use any open MQTT broker for this. We also created SDKs including an AngularJS module you can play with here: http://angular-rtcomm.wasdev.developer.ibm.com/