Captura de medios y restricciones

La parte multimedia de WebRTC abarca cómo acceder al hardware capaz de capturar video y audio, como cámaras y micrófonos, así como el modo en que el trabajo. También abarca los medios de visualización, que es la forma en que una aplicación puede ejecutar pantallas captura.

Dispositivos de medios

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

Limitaciones

Cuando se accede a dispositivos de medios, es una buena práctica proporcionar información restricciones posibles. Si bien es posible abrir la cámara predeterminada y micrófono con una restricción simple, podría ofrecer una transmisión de medios de la más óptima para la aplicación.

Las restricciones específicas se definen en un objeto MediaTrackConstraint, una para audio y uno 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, booleano o cadena), un rango (LongRange o DoubleRange con un valor mínimo y valor máximo) o un objeto con una definición ideal o exact. Para un el navegador intentará seleccionar algo lo más cerca posible. En un rango, se usará el mejor valor de ese rango. Cuando exact sea especificada, solo se mostrarán las transmisiones que se devuelven.

Cerca

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

Rango

// Camera with a resolution in the range 640x480 to 1024x768
{
    "video": {
        "width": {
            "min": 640,
            "max": 1024
        },
        "height": {
            "min": 480,
            "max": 768
        }
    }
}

Exacta

// Camera with the exact resolution of 1024x768
{
    "video": {
        "width": {
            "exact": 1024
        },
        "height": {
            "exact": 768
        }
    }
}

Para determinar la configuración real de una pista determinada de una transmisión multimedia, podemos llamar a MediaStreamTrack.getSettings(), que devuelve el Actualmente, se aplica la MediaTrackSettings.

También se pueden actualizar las restricciones de una pista desde un dispositivo multimedia que se abrió, llamando a applyConstraints() en el segmento. Esto permite que un reconfigurar un dispositivo de medios sin tener que cerrar transmisión existente.

Mostrar medios

Una aplicación que quiere realizar una captura y grabación 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 para la propósito de abrir el contenido de la pantalla (o una parte de esta, como una ventana). El MediaStream que se muestra funciona igual que cuando se usa getUserMedia()

Las restricciones de getDisplayMedia() difieren de las que se usan para la configuración regular entrada de audio o video.

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

En el fragmento de código anterior, se muestra cómo las restricciones especiales para la grabación de pantalla funciona. Ten en cuenta que podrían no ser compatibles con todos los navegadores que tienen soporte de medios de comunicación.

Transmisiones y pistas

Una MediaStream representa un flujo de contenido multimedia, que consta de pistas. (MediaStreamTrack) de audio y video. Puedes recuperar todas las pistas de MediaStream llamando a MediaStream.getTracks(), que muestra un array de Objetos MediaStreamTrack.

MediaStreamTrack

Un MediaStreamTrack tiene una propiedad kind que es audio o video. que indica el tipo de medio que representa. Para silenciar cada pista, activa o desactiva su propiedad enabled Una pista tiene una propiedad booleana remote que indica si proviene de un RTCPeerConnection y proviene de un par remoto.