【发布时间】:2012-04-18 21:25:02
【问题描述】:
当我最初听说 WebRTC 的前景时,我感到很兴奋。这听起来像 websockets,但没有服务器。不幸的是,我能找到的所有教程都强调了 WebRTC 的视频和音频方面。我找不到任何关于在浏览器之间发送文本/数据/JSON 的信息。你能帮我写一个简单的 hello world 吗,只需使用 WebbRTC 从一个浏览器向另一个浏览器发送一些数据?
【问题讨论】:
标签: javascript webrtc
当我最初听说 WebRTC 的前景时,我感到很兴奋。这听起来像 websockets,但没有服务器。不幸的是,我能找到的所有教程都强调了 WebRTC 的视频和音频方面。我找不到任何关于在浏览器之间发送文本/数据/JSON 的信息。你能帮我写一个简单的 hello world 吗,只需使用 WebbRTC 从一个浏览器向另一个浏览器发送一些数据?
【问题讨论】:
标签: javascript webrtc
这是一个暗中尝试,但最新的 Web API 编辑器草案有一个DataChannel 接口作为Peer-to-Peer Data API 的一部分。
但是,当前的Working Draft 没有这个 API,所以它可能是非常新的并且尚未实现。
【讨论】:
PeerConnection是connection-layer,不能直接用来发送数据。一旦你有了PeerConnection,你就可以将MediaStreams 附加到它上面,它提供了要发送或接收的数据。流似乎是单向的。但是 Data API 为PeerConnection 添加了一个新方法,它返回一个双向的DataChannel,它可以发送和接收任意数据。 MediaStreams 不是那样构建的。
MediaStream 接口的数据(单向、多轨数据,如音频或视频),但您不能随意将字节放在一起并发送它们,也不能在没有@987654331 的情况下在同一通道(不是连接:通道)上来回发送数据@接口。
DataChannel 现已在 Firefox (18+) 和 Chrome (25+) 中实现,但仍处于早期阶段。
有关更多信息,请参阅 HTML5 Rocks 文章 Getting Started with WebRTC。
【讨论】:
此功能尚未在任何发布的 WebRTC 实现中实现。正如其他发帖人所指出的,最新的 WebRTC 编辑草案中现在有一个 DataChannel API,但它的协议仍在研究中。预计今年晚些时候会在 Chrome 和 Firefox 中看到这个 API。
【讨论】:
MediaStreams,这是数据,不能发送应用程序构造的任意数据,这是你想做的。此外,应用程序无法发送任何回复作为响应——它只能发送自己的MediaStreams,与您发送的邮件无关。
这是一个老问题,但是因为我开始学习webRTC,所以我会尝试回答它。
首先,有些误解:
听起来像 websockets,但没有服务器
在正确交换和协商某些信息(媒体会话管理、节点的网络配置/多媒体功能)之前,无法在 WebRTC 对等点之间传输任何数据。为此,您需要一个服务器和signalling(它不是 webRTC 的一部分:您可以按照自己的方式实现它)。
当信号完成后,你需要创建RTCPeerConnection,如下所示:
if (navigator.webkitGetUserMedia) {
RTCPeerConnection = webkitRTCPeerConnection;
} else if(navigator.mozGetUserMedia){
RTCPeerConnection = mozRTCPeerConnection;
RTCSessionDescription = mozRTCSessionDescription;
RTCIceCandidate = mozRTCIceCandidate;
}
然后:
var connection = new RTCPeerConnection(servers);
在此之后,您可以将您的数据通道添加到此 PeerConnection:
var dataChannel = connection.createDataChannel("channelName",{ reliable: true });
完成后,您只需致电sendChannel.send('Any data you want');,这将发送您想要的任何数据。
如果有的话,我找到了this book really helpful。它留下了很多悬而未决的问题,但首先它是好的。
【讨论】:
我相信 Matt 已经知道了,但对于 google 客人:是的,你可以,使用 DataChannels。
在你身边:
channel = somePeerConnection.createDataChannel("a Label");
channel.onopen = function() { channel.send("any thing") };
另一边:
somePeerConnection.ondatachannel = function (evt) {
evt.channel.onmessage = function (evt) {
alert( evt.data );
};
};
看这个例子:
【讨论】:
http://peerjs.com/ 正在发展,并为您提供类似 websocket 的语法,用于浏览器实例之间的 p2p 数据传输
【讨论】:
正如贾斯汀所说,协议和 API 仍在确定中;在最新的 IETF 中,我提交了一份 JS API 下的次要协议草案。最终形式可能会非常接近编辑草稿中的当前提案,但您可能还需要等待接收方的“onopened”。
API 以 WebSocket api 为模型,以简化将代码从 WebSocket 实现移动到 DataChannels,尽管并非 WebSocket 中的所有项目(例如 url)都保留,并且显然 DataChannel 增加了许多 WebSockets 中没有的功能使用不可靠或部分可靠的数据。
【讨论】: