RTCRtpTransceiver: Methode setCodecPreferences()

Die Methode setCodecPreferences() der RTCRtpTransceiver-Schnittstelle wird verwendet, um die Codecs festzulegen, die der Transceiver zum Dekodieren empfangener Daten zulässt, in absteigender Präferenzreihenfolge.

Die mit dieser Methode festgelegten Präferenzen beeinflussen, welche Codecs mit dem entfernten Peer für die Codierung der gesendeten Daten ausgehandelt werden, einschließlich derjenigen, die für Weiterübertragung, Redundanz und Fehlerkorrektur verwendet werden. Codecs, die nicht in der Präferenzliste enthalten sind, werden nicht Teil der Verhandlung sein. Beachten Sie, dass die Präferenzen, die dieser Transceiver für das Senden von Inhalten verwendet, von den Präferenzen des entfernten Peers abhängen.

Der empfohlene Weg, um Codec-Präferenzen festzulegen, besteht darin, zunächst das Array der tatsächlich unterstützten Codecs für das Dekodieren empfangener Daten zu erhalten und sie dann in absteigender Präferenzreihenfolge neu anzuordnen. Dies stellt sicher, dass das Array wie erforderlich geordnet ist, keine nicht unterstützten Codecs enthält und auch Codecs umfasst, die für Weiterübertragung, Redundanz und Fehlerkorrektur benötigt werden.

Der angegebene Satz von Codecs wird für alle zukünftigen Verbindungen verwendet, die diesen Transceiver einschließen, bis diese Methode erneut aufgerufen wird.

Beim Vorbereiten einer RTCPeerConnection sollten die Codecs mit setCodecParameters() festgelegt werden, bevor entweder RTCPeerConnection.createOffer() oder createAnswer() aufgerufen werden, da diese die Verhandlung einleiten (und standardmäßig Codec-Parameter aus der Standardkonfiguration des Benutzeragenten verwenden).

Die Codecs können geändert werden, wenn Sie eine laufende Kommunikation haben, aber Sie müssen zuerst setCodecParameters() aufrufen und dann eine neue Verhandlung einleiten. Eine WebRTC-Anwendung wird bereits Code hierfür im negotiationneeded-Ereignishandler haben. Beachten Sie jedoch, dass zum Zeitpunkt des Schreibens das Ereignis nicht automatisch ausgelöst wird, wenn Sie setCodecParameters() aufrufen. Daher müssen Sie onnegotiationneeded selbst aufrufen.

Ein Leitfaden zu den von WebRTC unterstützten Codecs und den positiven und negativen Merkmalen jedes Codecs finden Sie unter Codecs used by WebRTC.

Syntax

js
setCodecPreferences(codecs)

Parameter

codecs

Ein Array von Objekten, das die Parameter für einen der vom Transceiver unterstützten Media Codecs in Präferenzreihenfolge bereitstellt. Wenn codecs leer ist, werden alle Codec-Konfigurationen auf die Standardeinstellungen des Benutzeragenten zurückgesetzt.

Hinweis: Alle nicht in codecs enthaltenen Codecs werden während des Verhandlungsvorgangs nicht berücksichtigt. Dies ermöglicht es Ihnen, die Verwendung von Codecs zu verhindern, die Sie nicht verwenden möchten.

Jedes Codec-Objekt im Array hat die folgenden Eigenschaften:

channels Optional

Eine positive Ganzzahl, die die Anzahl der vom Codec unterstützten Kanäle angibt. Zum Beispiel gibt ein Wert von 1 bei Audiocodecs Mono-Sound an, während 2 Stereo angibt.

clockRate

Eine positive Ganzzahl, die die Taktfrequenz des Codecs in Hertz (Hz) angibt. Die Taktfrequenz ist die Rate, mit der sich der RTP-Zeitstempel des Codecs weiterbewegt. Die meisten Codecs haben spezifische oder zulässige Wertebereiche. Die IANA führt eine Liste von Codecs und deren Parametern, einschließlich ihrer Taktfrequenzen.

mimeType

Ein String, der den MIME-Medientyp und Subtyp des Codecs angibt, als String in der Form "type/subtype". Die MIME-Typ-Strings, die von RTP verwendet werden, unterscheiden sich von denen, die anderswo verwendet werden. Die IANA führt ein Register gültiger MIME-Typen. Siehe auch Codecs used by WebRTC für Details über potenzielle Codecs, die hier referenziert werden könnten.

sdpFmtpLine Optional

Ein String, der das formatspezifische Parameterfeld von der a=fmtp-Zeile im SDP angibt, das dem Codec entspricht, falls das Feld vorhanden ist. Wenn kein Parameterfeld vorhanden ist, wird diese Eigenschaft weggelassen.

Rückgabewert

Keiner (undefined).

Ausnahmen

InvalidAccessError DOMException

Die codecs-Liste enthält einen oder mehrere Codecs, die vom RTCRtpReceiver, der mit dem Transceiver verbunden ist, nicht unterstützt werden.

InvalidModificationError DOMException

Die codecs-Liste enthält nur Einträge für RTX, RED, FEC oder Comfort Noise oder ist eine leere Menge. Die Codecs müssen immer einen Codec für die Medien enthalten.

Beispiele

Erstellen des Arrays bevorzugter Codecs

Der empfohlene Weg, um Codec-Präferenzen festzulegen, besteht darin, zunächst das Array der tatsächlich unterstützten Codecs für das Dekodieren empfangener Daten zu erhalten und die Liste dann in absteigender Präferenzreihenfolge neu anzuordnen.

Es ist wichtig, mit der Liste der unterstützten Codecs zu beginnen (und nicht mit einer fest kodierten Liste Ihrer bevorzugten Codecs), da, wenn Sie welche einschließen, die vom zugehörigen RTCRtpReceiver nicht unterstützt werden, der Browser eine InvalidAccessError-Ausnahme auslöst, wenn Sie die setCodecPreferences()-Methode aufrufen. Darüber hinaus muss das Array geeignete Codecs für Weiterübertragung, Redundanz und Vorwärtsfehlerkorrektur enthalten, und der Start mit der Liste der unterstützten Codecs stellt sicher, dass diese vorhanden sind.

Sie können die Codecs, die zum Dekodieren von Daten unterstützt werden, mit der statischen Methode RTCRtpReceiver.getCapabilities() abrufen, wie unten gezeigt:

js
const availReceiveCodecs = transceiver.receiver.getCapabilities("video").codecs;

Um das Codec-Array in unsere bevorzugte Reihenfolge zu bringen, können wir die untenstehende Sortierfunktion verwenden, um nach MIME-Typ zu sortieren (dies stammt von setCodecPreferences is now in all browsers! auf blog.mozilla.org (2024)).

js
function sortByMimeTypes(codecs, preferredOrder) {
  return codecs.sort((a, b) => {
    const indexA = preferredOrder.indexOf(a.mimeType);
    const indexB = preferredOrder.indexOf(b.mimeType);
    const orderA = indexA >= 0 ? indexA : Number.MAX_VALUE;
    const orderB = indexB >= 0 ? indexB : Number.MAX_VALUE;
    return orderA - orderB;
  });
}

Die Methode nimmt die Liste der unterstützten Codecs und ein Array, das die bevorzugten MIME-Typen in absteigender Reihenfolge enthält, und gibt das Array sortiert zurück. Der folgende Code zeigt, wie dies verwendet wird, vorausgesetzt, dass Sie bereits eine Peer-Verbindung (peerConnection) eingerichtet haben:

js
// Get supported codecs the sort using preferred codecs
const supportedCodecs = RTCRtpReceiver.getCapabilities("video").codecs;
const preferredCodecs = ["video/H264", "video/VP8", "video/VP9"];
const sortedCodecs = sortByMimeTypes(supportedCodecs, preferredCodecs);

// Get transceiver for connection and set the preferences
const [transceiver] = peerConnection.getTransceivers();
transceiver.setCodecPreferences(sortedCodecs); // <---

Spezifikationen

Specification
WebRTC: Real-Time Communication in Browsers
# dom-rtcrtptransceiver-setcodecpreferences

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch