Captura de medios y restricciones

En la parte multimedia de WebRTC, se explica cómo acceder al hardware capaz de capturar video y audio, como cámaras y micrófonos, y la manera en que funcionan las transmisiones multimedia. También se abarca la pantalla, que es la forma en que una aplicación puede capturar la pantalla.

Dispositivos de medios

Se accede a todas las cámaras y los micrófonos compatibles con el navegador y se administran a través del objeto navigator.mediaDevices. Las aplicaciones pueden recuperar la lista actual de dispositivos conectados y también detectar cambios, ya que muchas cámaras y microhpones se conectan a través de USB y se pueden conectar y desconectar durante el ciclo de vida de la aplicación. Debido a que el estado de un dispositivo multimedia puede cambiar en cualquier momento, se recomienda que las aplicaciones se registren para realizar cambios en el dispositivo a fin de manejar correctamente los cambios.

Limitaciones

Cuando accedes a dispositivos multimedia, se recomienda proporcionar las restricciones más detalladas posible. Si bien es posible abrir la cámara y el micrófono predeterminados con una restricción simple, es posible que transmita una transmisión multimedia que no sea la más óptima para la aplicación.

Las restricciones específicas se definen en un objeto MediaTrackConstraint: una para audio y otra para video. Los atributos de este objeto son de tipo ConstraintLong, ConstraintBoolean, ConstraintDouble o ConstraintDOMString. Pueden ser un valor específico (p.ej., un número, un booleano o una string), un rango (LongRange o DoubleRange con un valor mínimo y máximo) o un objeto con una definición ideal o exact. Para un valor específico, el navegador intentará elegir algo lo más cercano posible. Para un rango, se usará el mejor valor de ese rango. Cuando se especifica exact, solo se mostrarán las transmisiones de contenido multimedia que coincidan exactamente con la restricción.

Cerca

// Camera with a resolution as close to 640x480 as possible
{
    "video": {
        "width": 640,
        "height": 480
    }
}

Range

// 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
        }
    }
}

Para determinar la configuración real de un determinado recorrido de una transmisión multimedia, podemos llamar a MediaStreamTrack.getSettings(), que muestra el MediaTrackSettings aplicado actualmente.

También es posible actualizar las restricciones de un segmento desde un dispositivo de medios que abrimos llamando a applyConstraints() en el segmento. Esto permite que una aplicación reconfigure un dispositivo de medios sin tener que cerrar la transmisión existente.

Contenido multimedia en la Red de Display

Una aplicación que desee realizar capturas y grabaciones de pantalla debe usar la API de Display Media. La función getDisplayMedia() (que es parte de navigator.mediaDevices es similar a getUserMedia() y se usa con el propósito de abrir el contenido de la pantalla (o una parte de ella, como una ventana) El objeto MediaStream que se muestra funciona de la misma manera que cuando se usa getUserMedia().

Las restricciones para getDisplayMedia() difieren de las que se usan para la entrada normal de video o audio.

{
    video: {
        cursor: 'always' | 'motion' | 'never',
        displaySurface: 'application' | 'browser' | 'monitor' | 'window'
    }
}

El fragmento de código anterior muestra cómo funcionan las restricciones especiales para la grabación de pantalla. Ten en cuenta que es posible que no todos los navegadores que la admiten sean compatibles con la visualización.

Transmisiones y seguimientos

Un MediaStream representa un flujo de contenido multimedia, que consiste en pistas (MediaStreamTrack) de audio y video. Para recuperar todos los segmentos de MediaStream, llama a MediaStream.getTracks(), que muestra un arreglo de objetos MediaStreamTrack.

MediaStreamTrack

Un objeto MediaStreamTrack tiene una propiedad kind que sea audio o video, que indica el tipo de contenido multimedia que representa. Para silenciar cada pista, puedes activar o desactivar su propiedad enabled. Un segmento tiene una propiedad booleana remote que indica si proviene de un RTCPeerConnection y proviene de un par remoto.