Der Media-Teil von WebRTC behandelt den Zugriff auf Hardware, die Video und Audio aufnehmen kann, z. B. Kameras und Mikrofone, sowie die Funktionsweise von Media-Streams. Außerdem wird die Anzeige von Media behandelt, also wie eine Anwendung Bildschirmaufnahmen machen kann.
Mediengeräte
Auf alle Kameras und Mikrofone, die vom Browser unterstützt werden, wird über das navigator.mediaDevices-Objekt zugegriffen und sie werden darüber verwaltet. Anwendungen können die aktuelle Liste der verbundenen Geräte abrufen und auch auf Änderungen warten, da viele Kameras und Mikrofone über USB verbunden werden und während des Lebenszyklus der Anwendung verbunden und getrennt werden können. Da sich der Status eines Media-Geräts jederzeit ändern kann, wird empfohlen, dass Anwendungen sich für Geräteänderungen registrieren, um Änderungen richtig zu verarbeiten.
Einschränkungen
Beim Zugriff auf Mediengeräte ist es ratsam, so detaillierte Einschränkungen wie möglich anzugeben. Es ist zwar möglich, die Standardkamera und das Standardmikrofon mit einer einfachen Einschränkung zu öffnen, aber der resultierende Media-Stream ist möglicherweise nicht optimal für die Anwendung.
Die spezifischen Einschränkungen werden in einem MediaTrackConstraint-Objekt definiert, einem für Audio und einem für Video. Die Attribute in diesem Objekt sind vom Typ ConstraintLong, ConstraintBoolean, ConstraintDouble oder ConstraintDOMString. Dies kann entweder ein bestimmter Wert (z.B. eine Zahl, ein boolescher Wert oder ein String), ein Bereich (LongRange oder DoubleRange mit einem Mindest- und Höchstwert) oder ein Objekt mit einer ideal- oder exact-Definition sein. Für einen bestimmten Wert versucht der Browser, einen möglichst ähnlichen Wert auszuwählen.
Bei einem Bereich wird der beste Wert in diesem Bereich verwendet. Wenn exact angegeben ist, werden nur Media-Streams zurückgegeben, die genau dieser Einschränkung entsprechen.
Nah
// Camera with a resolution as close to 640x480 as possible
{
"video": {
"width": 640,
"height": 480
}
}
Bereich
// Camera with a resolution in the range 640x480 to 1024x768
{
"video": {
"width": {
"min": 640,
"max": 1024
},
"height": {
"min": 480,
"max": 768
}
}
}
Genau passend
// Camera with the exact resolution of 1024x768
{
"video": {
"width": {
"exact": 1024
},
"height": {
"exact": 768
}
}
}
Um die tatsächliche Konfiguration eines bestimmten Tracks eines Media-Streams zu ermitteln, können wir MediaStreamTrack.getSettings() aufrufen. Dadurch wird die aktuell angewendete MediaTrackSettings zurückgegeben.
Es ist auch möglich, die Einschränkungen eines Tracks über ein geöffnetes Mediengerät zu aktualisieren, indem applyConstraints() für den Track aufgerufen wird. So kann eine Anwendung ein Mediengerät neu konfigurieren, ohne den vorhandenen Stream zuerst schließen zu müssen.
Medien anzeigen
Eine Anwendung, die Bildschirmaufnahmen und ‑aufzeichnungen durchführen möchte, muss die Display Media API verwenden. Die Funktion getDisplayMedia() (die Teil von navigator.mediaDevices ist) ähnelt getUserMedia() und wird verwendet, um den Inhalt des Displays (oder einen Teil davon, z. B. ein Fenster) zu öffnen. Die zurückgegebene MediaStream funktioniert genauso wie bei Verwendung von getUserMedia().
Die Einschränkungen für getDisplayMedia() unterscheiden sich von denen, die für reguläre Video- oder Audioeingaben gelten.
{
video: {
cursor: 'always' | 'motion' | 'never',
displaySurface: 'application' | 'browser' | 'monitor' | 'window'
}
}
Das Code-Snippet oben zeigt, wie die speziellen Einschränkungen für die Bildschirmaufzeichnung funktionieren. Beachten Sie, dass diese möglicherweise nicht von allen Browsern unterstützt werden, die Displaymedien unterstützen.
Streams und Tracks
Ein MediaStream steht für einen Stream von Media-Inhalten, der aus Audio- und Videotracks (MediaStreamTrack) besteht. Sie können alle Tracks aus MediaStream abrufen, indem Sie MediaStream.getTracks() aufrufen. Dadurch wird ein Array von MediaStreamTrack-Objekten zurückgegeben.
MediaStreamTrack
Ein MediaStreamTrack hat die Property kind, die entweder audio oder video ist und den Medientyp angibt. Jeder Track kann durch Umschalten der enabled-Eigenschaft stummgeschaltet werden. Ein Track hat das boolesche Attribut remote, das angibt, ob er von einem RTCPeerConnection stammt und von einem Remote-Peer kommt.