En Google, luchamos por la equidad racial de la comunidad negra. Más información
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Captura de medios y limitaciones

La parte de medios de WebRTC cubre cómo acceder al hardware capaz de capturar video y audio, como cámaras y micrófonos, así como cómo funcionan los flujos de medios. También cubre los medios de visualización, que es cómo una aplicación puede realizar capturas de pantalla.

Dispositivos multimedia

Todas las cámaras y micrófonos compatibles con el navegador se acceden y gestionan a través del objeto navigator.mediaDevices . Las aplicaciones pueden recuperar la lista actual de dispositivos conectados y también escuchar 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. Dado que el estado de un dispositivo de medios puede cambiar en cualquier momento, se recomienda que las aplicaciones se registren para los cambios de dispositivo a fin de manejarlos correctamente.

Restricciones

Al acceder a los dispositivos multimedia, es una buena práctica proporcionar restricciones lo más detalladas posible. Si bien es posible abrir la cámara y el micrófono predeterminados con una simple restricción, es posible que proporcione un flujo de medios que está lejos de ser el más óptimo para la aplicación.

Las restricciones específicas se definen en un objeto MediaTrackConstraint , uno para audio y otro para video. Los atributos de este objeto son de tipo ConstraintLong , ConstraintBoolean , ConstraintDouble o ConstraintDOMString . Estos pueden ser un valor específico (por ejemplo, un número, booleano o cadena), 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 parecido posible. Para un rango, se usará el mejor valor en ese rango. Cuando se especifica exact , solo se devolverán los flujos de medios que coincidan exactamente con esa restricción.

Cerca

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

Distancia

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

Exacto

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

Para determinar la configuración real que tiene una determinada pista de un flujo de medios, podemos llamar a MediaStreamTrack.getSettings() que devuelve los MediaTrackSettings aplicados actualmente.

También es posible actualizar las restricciones de una pista desde un dispositivo de medios que hemos abierto, llamando a applyConstraints() en la pista. Esto permite que una aplicación vuelva a configurar un dispositivo multimedia sin tener que cerrar primero la transmisión existente.

Medios de visualización

Una aplicación que desee poder realizar capturas y grabaciones de pantalla debe utilizar Display Media API. La función getDisplayMedia() (que es parte de navigator.mediaDevices es similar a getUserMedia() y se utiliza para el propósito de abrir el contenido de la pantalla (o una parte de ella, tal como una ventana). La devuelto MediaStream funciona el lo mismo que cuando se usa getUserMedia() .

Las restricciones para getDisplayMedia() difieren de las que se utilizan para la entrada de audio o vídeo normal.

{
    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. Tenga en cuenta que es posible que estos no sean compatibles con todos los navegadores compatibles con medios de visualización.

Streams y pistas

Un MediaStream representa un flujo de contenido multimedia, que consta de pistas ( MediaStreamTrack ) de audio y video. Puede recuperar todas las pistas de MediaStream llamando a MediaStream.getTracks() , que devuelve una matriz de objetos MediaStreamTrack .

MediaStreamTrack

Un MediaStreamTrack tiene una propiedad de kind que es audio o video , lo que indica el tipo de medio que representa. Cada pista se puede silenciar alternando su propiedad enabled . Una pista tiene una propiedad booleana remote que indica si proviene de un RTCPeerConnection y proviene de un par remoto.