RTCRtpSender: getCapabilities() statische Methode
Baseline 2023Newly available
Since May 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Die statische Methode RTCRtpSender.getCapabilities()
gibt ein Objekt zurück, das die Codec- und Header-Erweiterungskapazitäten beschreibt, die vom RTCRtpSender
unterstützt werden.
Sie können ähnlich die Fähigkeiten der RTCRtpReceiver
-Objekte auf dem Gerät erhalten, indem Sie die statische Funktion RTCRtpReceiver.getCapabilities()
aufrufen.
Syntax
RTCRtpSender.getCapabilities(kind)
Parameter
kind
-
Ein String, der den Medientyp angibt, für den die Sendefähigkeiten des Browsers angefragt werden. Die unterstützten Medienarten sind:
audio
undvideo
.
Rückgabewert
Ein neues Objekt, das angibt, welche Fähigkeiten der Browser zum Senden der angegebenen Medienart über eine RTCPeerConnection
hat.
Wenn der Browser keine Unterstützung für den angegebenen Medientyp hat, ist der zurückgegebene Wert null
.
Das zurückgegebene Objekt hat die folgenden Eigenschaften:
codecs
-
Ein Array von Objekten, die jeweils die grundlegenden Fähigkeiten eines einzelnen Medien-Codecs beschreiben, die vom
RTCRtpSender
unterstützt werden.Hinweis: Das Array enthält spezielle Einträge, die die zugrunde liegenden Komponenten des Transports darstellen — diese können ignoriert werden, wenn Sie nur an den tatsächlich für die Medien verwendeten Codecs interessiert sind. Diese werden im Abschnitt Das Codecs-Array beschrieben.
Jedes Codec-Objekt hat die folgenden Eigenschaften:
channels
Optional-
Ein positiver ganzzahliger Wert, der die maximale Anzahl von Kanälen angibt, die vom Codec unterstützt werden; ein Codec, der nur Mono-Sound unterstützt, hätte zum Beispiel einen Wert von 1; Stereo-Codecs hätten einen Wert von 2 usw.
clockRate
-
Ein positiver ganzzahliger Wert, der die Taktfrequenz des Codecs in Hertz (Hz) angibt. Die IANA pflegt eine Liste von Codecs und deren Parameter, einschließlich ihrer Taktfrequenzen.
mimeType
-
Ein String, der den MIME-Medientyp und Subtyp des Codecs angibt. Die für RTP verwendeten MIME-Typstrings unterscheiden sich von denen, die anderswo verwendet werden. Siehe RFC 3555, Abschnitt 4 für das vollständige IANA-Register dieser Typen. Siehe auch Von WebRTC verwendete Codecs für Details zu potenziellen Codecs, die hier referenziert werden könnten.
sdpFmtpLine
Optional-
Ein String, der das spezifische Parameterfeld aus der
a=fmtp
-Zeile im SDP angibt, das dem Codec entspricht, falls eine solche Zeile existiert. Wenn kein Parameterfeld vorhanden ist, wird diese Eigenschaft weggelassen.
headerExtensions
-
Ein Array von Objekten, die jeweils die URI einer Header-Erweiterung angeben, die für die aktuelle Art von Medien unterstützt wird. Jedes Objekt hat die folgende Eigenschaft:
Beschreibung
Als statische Funktion wird diese immer in der folgenden Form aufgerufen:
capabilities = RTCRtpSender.getCapabilities("audio");
Die zurückgegebene Menge an Fähigkeiten ist die optimistischste mögliche Liste. Es ist durchaus möglich, dass bestimmte Kombinationen von Optionen nicht funktionieren, wenn Sie versuchen, sie tatsächlich zu verwenden.
Der Aufruf von RTCRtpSender.getCapabilities()
bereitet den Browser in keiner Weise darauf vor, Medien zu verarbeiten.
Es wird nichts geladen, abgerufen oder anderweitig vorbereitet.
Es ist ein Mittel, um festzustellen, was möglicherweise nutzbar ist, bevor Sie versuchen, auf Medien zuzugreifen.
Da die verfügbaren Fähigkeiten für längere Zeit stabil bleiben (Menschen installieren und deinstallieren Codecs und Ähnliches nicht sehr oft), können die Medienfähigkeiten ganz oder teilweise eine Methode zur Benutzeridentifizierung über Ursprungsgrenzen hinweg bieten. Aus diesem Grund kann der Browser in kontext-sensitiven Datenschutzumgebungen beschließen, die Fähigkeiten zu verschleiern; dies kann beispielsweise dadurch erreicht werden, dass selten genutzte Codec-Konfigurationen weggelassen werden.
Das Codecs-Array
Das codecs
-Array ist ein Array von Objekten, das einen einzelnen Codec und seine grundlegenden Fähigkeiten beschreibt.
Der Browser wird nur unterschiedliche Fähigkeitskombinationen separat melden.
Wenn zwei Fähigkeiten-Sets als eines beschrieben werden können, werden sie es.
Das bedeutet, dass, zum Beispiel, wenn es zwei Einträge für den H.264-Codec gibt (identifiziert durch den mimeType
"video/H264"), andere Werte in den Fähigkeitsobjekten angeben, wie sie sich in irgendeiner Weise unterscheiden.
Es gibt drei spezielle Einträge, die immer vorhanden sein sollten, und die grundlegende Komponenten des Transports darstellen. Diese Komponenten sind:
- RED (REDundante Audiodaten)
-
Der Medientyp eines RED-Eintrags kann variieren, da es mehrere Versionen davon gibt, aber er wird mit
red
enden, wievideo/red
odervideo/fwdred
. Der Basisstandard für RED kann in RFC 2198 gefunden werden. Es kann mehrere Einträge für RED geben, wenn verschiedene Formen unterstützt werden; jeder wird in diesem Fall einen einzigartigen Medientyp haben. - FEC (Forward Error Correction)
-
Eine FEC-Komponente bearbeitet Fehlerkorrekturdaten; ihr Medientyp kann ebenfalls variieren, da es fortgeschrittene Versionen des Standards gibt, aber sie wird immer mit
fec
enden. Ein möglicher Wert istvideo/ulpfec
(ein allgemeines Fehlerkorrekturmodell). Es kann auch mehrere FEC-Einträge geben, wenn mehr als eine Form unterstützt wird. - RTX (Retransmission)
-
Diese Komponente ist für die erneute Übertragung von Daten verantwortlich; ihr Medientyp sollte
video/rtx
sein. Es wird nur einen Eintrag für RTX geben, und er wird keinesdpFmtpLine
-Eigenschaft haben.
Diese Einträge sollten ignoriert werden, wenn nur an den mit den Medien verbundenen Codecs Interesse besteht.
Beispiele
Funktionsunterstützung
Sie können Object.hasOwn()
verwenden, um zu prüfen, ob RTCRtpSender.getCapabilities()
unterstützt wird:
log.textContent = `RTCRtpSender.getCapabilities() supported: ${Object.hasOwn(
RTCRtpSender,
"getCapabilities",
)}`;
Überprüfung der Unterstützung eines bestimmten Codecs
Die folgende Funktion gibt ein true
oder false
zurück, das angibt, ob das Gerät das Senden von H.264-Video auf einem RTCRtpSender
unterstützt.
Hinweis:
Da RTCRtpSender.getCapabilities()
tatsächlich nur wahrscheinliche Unterstützung anzeigt.
Daher könnte die Unterstützung von H.264 trotzdem fehlschlagen, selbst nachdem eine positive Antwort von dieser Funktion erhalten wurde.
function canSendH264() {
let capabilities = RTCRtpSender.getCapabilities("video");
capabilities.codecs.forEach((codec) => {
if (codec.mimeType === "video/H264") {
return true;
}
});
return false;
}
Abrufen aller Fähigkeiten
Dieses Codebeispiel zeigt, wie wir alle unterstützten Codecs und Header abrufen könnten. Das HTML definiert eine Auswahlliste für die zwei Arten von Fähigkeiten und einen Protokollbereich.
<select id="kind">
<option value="audio">audio</option>
<option value="video">video</option>
</select>
<textarea rows="40" cols="100" id="log"></textarea>
Das JavaScript definiert eine Funktion, die die Fähigkeiten für eine bestimmte "Art" protokolliert.
Diese wird anfangs mit dem Wert audio
aufgerufen.
Ein Listener aktualisiert den Wert, wenn die Auswahlliste kind
geändert wird.
const log = document.querySelector("#log");
const kindSelector = document.querySelector("#kind");
logMediaCapabilities("audio");
kindSelector.addEventListener("click", () => {
log.textContent = "";
logMediaCapabilities(kindSelector.value);
});
function logMediaCapabilities(kind) {
const capabilities = RTCRtpSender.getCapabilities(`${kind}`);
log.textContent += "Headers\n";
capabilities.headerExtensions.forEach((header) => {
log.textContent += ` uri: ${header.uri}\n`;
});
log.textContent += "\nCodecs\n";
capabilities.codecs.forEach((codec) => {
log.textContent += ` mime type: ${codec.mimeType}\n`;
log.textContent += ` channels: ${codec.channels}\n`; // max channels - e.g. 2 is stereo
log.textContent += ` clockRate: ${codec.clockRate}\n`; // clock rate in Hz
log.textContent += ` sdpFmtpLine: ${codec.sdpFmtpLine}\n`; // mime media type and subtype
});
}
Ergebnis
Spezifikationen
Specification |
---|
WebRTC: Real-Time Communication in Browsers # dom-rtcrtpsender-getcapabilities |