Я был взволнован перспективой WebRTC, когда впервые услышал об этом. Это звучало как веб-сокеты, но без сервера. К сожалению, все учебные пособия, которые мне удалось найти, подчеркивали видео- и аудиоаспекты WebRTC. Я ничего не могу найти об отправке текста/данных/JSON между браузерами. Не могли бы вы помочь мне написать что-то вроде простого hello world, просто отправив некоторые данные из одного браузера в другой с помощью WebbRTC?
Передача JSON между браузерами с помощью WebRTC
Ответы (7)
Это удар в темноту, но в последнем проекте редакторов веб-API есть интерфейс DataChannel
как часть API одноранговых данных.
Однако текущий рабочий проект не имеет этого API, поэтому, возможно, это очень новый и еще не реализованный.
PeerConnection
— это уровень подключения, и его нельзя использовать напрямую для отправки данных. Когда у вас есть PeerConnection
, вы присоединяете к нему MediaStreams
, который предоставляет данные для отправки или получения. Потоки, кажется, односторонние. Но Data API добавляет к PeerConnection
новый метод, который возвращает двунаправленный DataChannel
, который может как отправлять, так и получать произвольные данные. MediaStreams
так не строят.
- person Francis Avila; 19.04.2012
MediaStream
(однонаправленные, многодорожечные данные, такие как аудио или видео), но вы не можете произвольно объединять байты и отправлять их, а также отправлять данные туда и обратно по одному и тому же каналу (не соединение: канал) без интерфейса DataChannel
.
- person Francis Avila; 19.04.2012
DataChannel теперь реализован в Firefox (18+) и Chrome (25+), хотя это еще только начало.
Дополнительные сведения см. в статье HTML5 Rocks Начало работы с WebRTC.
Эта функциональность еще не реализована ни в одной поставляемой реализации WebRTC. Как указывали другие авторы, теперь в последнем черновике редакторов WebRTC есть DataChannel API, но протокол для этого все еще находится в разработке. Ожидайте увидеть этот API в Chrome и Firefox позже в этом году.
MediaStreams
, то есть данные, но не произвольные данные, созданные приложением, что вы и хотите сделать. Кроме того, приложение ничего не может отправить в ответ — оно может отправить только свои собственные MediaStreams
, не связанные с теми, которые вы отправляете.
- person Francis Avila; 19.04.2012
Это старый вопрос, но поскольку я начал изучать webRTC, я попытаюсь ответить на него.
Прежде всего, некоторое заблуждение:
Это звучало как веб-сокеты, но без сервера
Невозможно передать ЛЮБЫЕ данные между одноранговыми узлами WebRTC до того, как некоторая информация (управление мультимедийными сеансами, конфигурация сети/мультимедийные возможности узлов) не будет должным образом обменена и согласована. Для этого вам понадобится сервер и сигнализация (которая не является частью 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');
, и это отправит любые данные, которые вы хотите.
Во всяком случае, я нашел эту книгу действительно полезной. Он оставляет много вопросов без ответов, но для первого старта хорош.
Я полагаю, Мэтт уже знает, но для гостей 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://www.w3.org/TR/webrtc/#examples
- https://hacks.mozilla.org/2012/11/progress-update-on-webrtc-for-firefox-on-desktop/#file-datachannels-js-LC12
http://peerjs.com/ развивается и предоставляет синтаксис, подобный веб-сокету, для передачи данных p2p между экземплярами браузера.
Как указал Джастин, протокол и API все еще дорабатываются; на последней конференции IETF я представил проект второстепенного протокола под JS API. Окончательная форма, скорее всего, будет очень близка к текущему предложению в черновике редактора, но вам, вероятно, также придется подождать «onopened» от принимающей стороны.
API смоделирован на API-интерфейсе WebSocket, чтобы упростить перенос кода из реализации WebSocket в DataChannels, хотя не все элементы в WebSocket переносятся (например, URL-адрес), и, очевидно, DataChannel добавляет ряд возможностей, отсутствующих в WebSockets, связанных с ненадежными или частично достоверные данные.