Im Medienteil von WebRTC wird erklärt, wie auf Hardware zugegriffen werden kann, die Video- und Audiodaten wie Kameras und Mikrofone aufnehmen kann, sowie auf die Funktionsweise von Medienstreams. Außerdem werden darin Display-Medien beschrieben, wie etwa durch eine Anwendung die Bildschirmaufnahme ermöglicht wird.
Mediengeräte
Auf alle Kameras und Mikrofone, die vom Browser unterstützt werden, wird über das navigator.mediaDevices
-Objekt zugegriffen. Anwendungen können die aktuelle Liste verbundener Geräte abrufen und auf Änderungen achten, da viele Kameras und Mikroporen über USB verbunden sind und während des Lebenszyklus der Anwendung verbunden und getrennt werden können. Da sich der Status eines Mediengeräts jederzeit ändern kann, wird empfohlen, dass Anwendungen sich für Geräteänderungen registrieren, damit Änderungen korrekt verarbeitet werden können.
Einschränkungen
Beim Zugriff auf Mediengeräte empfiehlt es sich, so viele Einschränkungen wie möglich anzugeben. Es ist zwar möglich, die Standardkamera und das Standardmikrofon mit einer einfachen Einschränkung zu öffnen, sie liefern aber möglicherweise einen Medienstream, der sich für die Anwendung nicht am besten eignet.
Die spezifischen Einschränkungen sind in einem MediaTrackConstraint
-Objekt definiert – einem für Audio und einem für Video. Die Attribute in diesem Objekt haben den 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, etwas so nah wie möglich auszuwählen.
Für einen Bereich wird der beste Wert in diesem Bereich verwendet. Wenn exact
angegeben ist, werden nur Medienstreams 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
}
}
}
Exact
// Camera with the exact resolution of 1024x768
{
"video": {
"width": {
"exact": 1024
},
"height": {
"exact": 768
}
}
}
Um die eigentliche Konfiguration eines bestimmten Tracks eines Medienstreams zu ermitteln, können wir MediaStreamTrack.getSettings()
aufrufen, das den aktuell angewendeten MediaTrackSettings
zurückgibt.
Es ist auch möglich, die Einschränkungen eines Tracks von einem Mediengerät zu aktualisieren, das wir geöffnet haben. Rufe dazu applyConstraints()
für den Track auf. Damit kann eine Anwendung ein Mediengerät neu konfigurieren, ohne den vorhandenen Stream schließen zu müssen.
Medien anzeigen
Eine Anwendung, die Bildschirme aufzeichnen und Aufnahmen machen 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 Bildschirms (oder einen Teil davon, z. B. ein Fenster) zu öffnen. Der zurückgegebene MediaStream
-Wert funktioniert auf dieselbe Weise wie bei der Verwendung von getUserMedia()
.
Die Einschränkungen für getDisplayMedia()
unterscheiden sich von denen für die normale Video- oder Audioeingabe.
{
video: {
cursor: 'always' | 'motion' | 'never',
displaySurface: 'application' | 'browser' | 'monitor' | 'window'
}
}
Der Code-Snipet oben zeigt, wie die besonderen Einschränkungen für die Bildschirmaufzeichnung funktionieren. Sie werden jedoch möglicherweise nicht von allen Browsern mit Anzeige unterstützt.
Streams und Tracks
Ein MediaStream
-Objekt repräsentiert einen Stream von Medieninhalten, die aus Audio- und Videotracks (MediaStreamTrack
) bestehen. Du kannst alle Tracks von MediaStream
abrufen, indem du MediaStream.getTracks()
aufrufst. Dadurch wird ein Array mit MediaStreamTrack
-Objekten zurückgegeben.
Logo: MediaStreamTrack
Ein MediaStreamTrack
hat eine kind
-Property, die entweder audio
oder video
ist. Damit wird die Art der dargestellten Medien angegeben. Jeder Track kann durch Umschalten der enabled
-Property stummgeschaltet werden. Ein Track hat eine boolesche Property remote
, die angibt, ob er von einem RTCPeerConnection
stammt und von einem Remote-Peer stammt.