2012-04-18 8 views
14

Я был в восторге от перспективы WebRTC, когда я впервые услышал об этом. Это звучало как websockets, но без сервера. К сожалению, все обучающие материалы, которые я смог найти, подчеркнули видео и аудио аспекты WebRTC. Я не могу ничего найти о передаче текста/данных/JSON между браузерами. Не могли бы вы помочь мне написать простой мир приветствий, просто отправляя некоторые данные из одного браузера в другой с помощью WebbRTC?Передача JSON между браузерами с помощью WebRTC

ответ

6

Это удар в темноте, но последняя версия редактора веб-API имеет интерфейс DataChannel как часть Peer-to-Peer Data API.

Однако текущий Working Draft не имеет этого API, так что, возможно, он очень новый и пока еще не реализован.

+0

Я видел блог-сообщение, в котором говорилось, что WebRTC уже может отправлять данные, но он сосредоточился на видеочате. Похоже, что отправка данных уже доступна, но я не мог найти способ ее реализации. – Matt

+0

Возможно, PeerConnnection? – Matt

+0

Что делает данные Peer to Ppeer api отличными от PeerConnection? Похоже, или, по крайней мере, в примере, приведенном в апрельском проекте, оба могут отправлять сообщения без сервера. – Matt

3

Эта функциональность еще не реализована в любой реализации WebRTC для доставки. Как отмечали другие плакаты, теперь есть API DataChannel в последнем редакторе редакторов WebRTC, но протокол для этого все еще работает. Ожидайте увидеть этот API в Chrome и Firefox позже в этом году.

+0

. Таким образом, вы можете открыть соединение между браузерами, но вы еще не можете отправлять данные? – Matt

+0

Вы можете отправлять только «MediaStreams», это данные, но не произвольные данные, созданные приложением, и это то, что вы хотите сделать. Кроме того, приложение не может отправить что-либо обратно в ответ - оно может отправлять свои собственные средства MediaStreams, не связанные с отправляемыми вами. –

0

Как указал Джастин, протокол и API все еще прибиты; на последнем IETF я представил проект для младшего протокола под JS API. Окончательная форма, вероятно, будет очень близка к текущему предложению в черновике редактора, но вам, скорее всего, придется ждать «onopened» с принимающей стороны.

API по образцу WebSocket api упрощает перемещение кода из реализации WebSocket в DataChannels, но не все элементы в WebSocket переносятся (например, url), и, очевидно, DataChannel добавляет ряд способностей, не входящих в WebSockets, делать с ненадежными или частично надежными данными.

+1

У меня есть механизм WebSockets, работающий на моем сайте, и, хотя он лучше, чем AJAX, я подумал, что было бы здорово (не говоря уже о бесконечно awesomer для моего сервера, мне не нужно было передавать столько данных), чтобы сократить WebRTC мои расходы на простое размещение сайта и базы данных, и ничего больше. – Matt

1

Я считаю, что Мэтт уже знает, но для гостей 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); 
    }; 
}; 

Смотрите этот пример:

+0

Вторая ссылка, вы отправили ссылку 404 – Matt

+0

исправлена! – Aurium

5

DataChannel теперь реализован в Firefox (18+) и Chrome (25+), хотя все еще рано.

Для получения дополнительной информации см. Статью HTML5 Rocks Getting Started with WebRTC.

+0

Является ли DataChannel в Google Chrome согласно спецификации. Потому что [здесь] (https://code.google.com/p/webrtc/issues/detail?id = 1408), он говорит, что SCTP ожидает. Тогда он использует UDP или TCP? – usercode

+0

В настоящее время Chrome предлагает только ненадежные (UDP) данные, ожидающие поддержки SCTP. Firefox предлагает как ненадежные (UDP), так и надежные (TCP). – cjb

1

http://peerjs.com/ развивается и дает вам WebSocket как синтаксис для передачи p2p данных между экземплярами браузера

3

Это старый вопрос, но так как я начал изучать 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. Он оставляет много неотвеченных вопросов, но для первого запуска это хорошо.