Medienaufnahme und -einschränkungen

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.