2013-12-05 3 views
2

Я хочу связать двух одноранговых узлов с RTCPeerConnections, но я не могу добавить IceCandidate из Alice в Bob.Как вызвать addIceCandidate в dart

пример:

var alice = new RtcPeerConnection(
    {"iceServers": [{"url": "stun:stun.l.google.com:19302"}]} 
); 

var bob = new RtcPeerConnection(
    {"iceServers": [{"url": "stun:stun.l.google.com:19302"}]} 
); 

alice.createDataChannel("somelablel", {}); 

alice.onNegotiationNeeded.listen((var data){ 
    alice.createOffer({}).then((var offer){ 
     //got offer 
     alice.setLocalDescription(offer); 
     bob.setRemoteDescription(offer); 
    }); 
}); 

bob.onIceCandidate.listen((evt) { 
    if (evt.candidate) 
     print(evt.cancelable); 
    }); 

alice.onIceCandidate.listen((evt) { 
    if(evt.candidate != null) 
     //TODO: add iceCandidate to Bob 
}); 

Первая версия (кажется, старый, но широко используется в онлайн-примеры):

bob.addIceCandidate(candidatefromAlice); 

Выход:

Class 'RtcPeerConnection' has no instance method 
'addIceCandidate' with matching arguments. 

Вторая попытка (новая версия с 3 параметрами):

bob.addIceCandidate(candidatefromAlice,(){}, (var error){ 
    print(error.toString()); 
}); 

Выход:

NotSupportedError: The implementation did not support the 
requested type of object or operation. (Dartium)  

Как я могу установить кандидат ICE в дротике без проблем?

Информация:

Dart VM version: 0.1.2.0_r30864 (Wed Dec 4 11:03:45 2013) on "linux_x64"
dartium : Chromium 31.0.1650.48

+0

Версия Dartium не очень полезна. Лучше информация о версии в Darteditor> Справка> О меню или выходе из '' 'dart -version''' –

+0

Не могли бы вы предоставить больше кода. Что такое '' 'bobsRtcPeerConnection''' и что такое' '' кандидат отAlice'''? –

+0

Я добавил некоторый контекст. – NaN

ответ

0

Я нашел обходное решение, используя библиотеку js-interop. Просто используйте прокси:

import 'package:js/js.dart' as js; 

// ... 

_rpc = new js.Proxy(js.context.webkitRTCPeerConnection, js.map(iceServers)); 

// ... 

var iceCandidate = new js.Proxy(js.context.RTCIceCandidate, 
     js.context.JSON.parse(/*your icecandidate string*/) 
    ); 

_rpc.addIceCandidate(iceCandidate); 
1

Я думаю, что вам придется ждать, пока эта ошибка не будет исправлена ​​ https://code.google.com/p/dart/issues/detail?id=15008

код, который вы просите, кажется,

bob.addIceCandidate(evt.candidate,() => print('void: $evt'), (var x) => print('FailureCallback: $evt')); 

Комментарий к этот вопрос Is addIceCandidate implemented in Dartium?, по-видимому, указывает, что он не работает в Dartium, но работает в Chrome после преобразования проекта в J avaScript.

+0

похоже, похоже, но другая ошибка. Я получаю * «NotSupportedError: реализация не поддерживает запрашиваемый тип объекта или операции. (Dartium)» * и не * «NotSupportedError: Internal Dartium Exception» * – NaN

Смежные вопросы