Угловой подобрать неправильный метод перегрузки при создании RTCPeerConnection.createOffer - PullRequest
0 голосов
/ 25 июня 2019

В нашем угловом приложении есть реализация webrtc (аудио / видео).Работает / работал нормально почти 2 года.Ниже приведены версии библиотеки, которые мы используем в настоящее время.

Проблема: Теперь нам нужно дать RTCOfferOptions при создании предложения.Когда мы даем опцию, пока createOffer она выдает ошибку и останавливает компиляцию.Подробности приведены ниже.

С :

connection.createOffer()
    .then((offer) => /* implemntation for offer */)
    .catch((error) => /* implemntation for error */);

К :

protected offerOption: RTCOfferOptions = <RTCOfferOptions>{offerToReceiveAudio: 1, offerToReceiveVideo: 0};
connection.createOffer(offerOption)
    .then((offer) => /* implemntation for offer */)
    .catch((error) => /* implemntation for error */);

Ошибка углового компиляции

Argument of type 'RTCOfferOptions' is not assignable to parameter of type 'RTCSessionDescriptionCallback'.
  Type 'RTCOfferOptions' provides no match for the signature '(sdp: RTCSessionDescription): void'

В определении типа webrtc есть перегрузка метода.Но почему angular взял bad one, когда добавляет offerOption?

interface RTCPeerConnection extends EventTarget {
...
createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>; // good one
...
// Extension: https://www.w3.org/TR/webrtc/#legacy-interface-extensions
// Deprecated!
createOffer(successCallback: RTCSessionDescriptionCallback, // bad one
   failureCallback: RTCPeerConnectionErrorCallback,
   options?: RTCOfferOptions): Promise<void>;
...
}

Может быть, это очень специфично для наших угловых конфигов (может предоставить больше, если это необходимо), попробуйте поискать и проверить, кто получилПодобная проблема не была такой успешной.

1 Ответ

0 голосов
/ 28 июня 2019

Возможно, ваш код ссылается на RTCOfferOptions, отличный от RTCOfferOptions, указанного в angular's d.ts. Эти два файла могут ссылаться на два разных интерфейса, даже если они имеют одинаковые имена.

Если ваш RTCOfferOptions несовместим с RTCOfferOptions в файле angular's d.ts, то первая перегрузка будет пропущена, поскольку она не соответствует.

Продолжите, осмотрите их с помощью vscode и посмотрите, не пришли ли они из одного и того же файла. Это может быть результатом использования npm link.

...