RTCQuicTransport: предоставленное значение не может быть преобразовано в последовательность - PullRequest
0 голосов
/ 11 февраля 2019

Когда я пытаюсь вызвать конструктор RTCQuicTransport на Javascript, он выдает ошибку: Uncaught TypeError: Не удалось создать 'RTCQuicTransport': Предоставленное значение не может быть преобразовано в последовательность.

Предполагается, что конструктору требуется двапараметры, объект RTCIceTransport и один сертификат, сгенерированный с помощью RTCPeerConnection.generateCertificate (), он должен работать таким образом, но нет.

Я пытался передать 'null' в качестве сертификата, но все равно выдавал то же сообщение об ошибке.Если я просто передам объект RTCIceTransport, то получится, что для конструкции нужны два параметра.

// Include some helper functions
//import {trace, errorHandler, mySendLocalCandidate, 
myIceGathererStateChange,
//  myIceTransportStateChange, myDtlsTransportStateChange} from 'helper';
//import 'helper.js';

function initiate(mySignaller) {
// Prepare the IceGatherer
var gatherOptions = {
  gatherPolicy: "all",
  iceServers: [
    { urls: "stun:stun1.example.net" },
    { urls: "turn:turn.example.org", username: "user", credential: 
    "myPassword",
      credentialType: "password" }
   ]
};

// Create the IceTransport
var ice = new RTCIceTransport();
ice.onstatechange = function(event) {
  myIceGathererStateChange("iceGatherer", event.state);
};
// Handle errors
// Prepare to signal local candidates
ice.onlocalcandidate = function(event) {
  mySignaller.mySendLocalCandidate(event.candidate);
};

// Start gathering
ice.gather(gatherOptions);

// Prepare to handle remote ICE candidates
console.log(ice);
mySignaller.onRemoteCandidate = function(remote) {
  ice.addRemoteCandidate(remote.candidate);
};

// Create the certificate
var certs = {};
var keygenAlgorithm = { name: "ECDSA", namedCurve: "P-256"};

RTCPeerConnection.generateCertificate(keygenAlgorithm).
then(function(certificate){
  certs[0] = certificate;
}, function(){
  trace('Certificate could not be created');
});
// Create the DtlsTransport and QuicTransport
var quic = new RTCQuicTransport(ice, certs[0]);
console.log(quic);
mySignaller.sendInitiate({
  ice: iceGatherer.getLocalParameters(),
  quic: quic.getLocalParameters(),
  // ... marshall RtpSender/RtpReceiver capabilities as in Section 6.6 
Examples 8 and 9.
}, function(remote) {
  // Start the IceTransport, DtlsTransport and QuicTransport
  ice.start(iceGatherer, remote.ice, RTCIceRole.controlling);
  dtls.start(remote.dtls);
  quic.start(remote.quic);
  // ... configure RtpSender/RtpReceiver objects as in Section 6.6 
Examples 8 and 9.
});}

Я следую примеру примера ORTC и ожидаю получить объект RTCQuicTransport.

Заранее спасибо

Редактировать :

Я понял, что когда я печатаю свой сертификат внутри функции generateCertificate (), он работает правильно:

RTCCertificate {expires: 1552505428000}
expires: 1552505428000

Но из этой функции я получаю следующее:

console.log(certs);

Результат:

{}
  [0] RTCCertificate
      expires: 1552505951000

Затем я пытаюсь:

console.log(certs[0]);

Результат:

undefined

1 Ответ

0 голосов
/ 12 февраля 2019

Веб-браузер, совместимый с RTCIceTransport и RTCQuic transport, является Chrome в версии 73 Beta, в соответствии с этим: RTCQuicTransport over chrome Хотя я пытался запустить его в Chrome 72 с флагом --enable-blink-features=RTCQuicTransport,RTCIceTransportExtension, он не былдостаточно.

В бета-версии Chrome 73 я мог создать RTCQuicTransport, передав null в качестве второго параметра и также создав свой собственный сертификат.

...