Google is committed to advancing racial equity for Black communities. See how.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Captura de medios y restricciones

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

Dispositivos de medios

Se accede a todas las cámaras y micrófonos compatibles con el navegador a través del objeto navigator.mediaDevices . Las aplicaciones pueden recuperar la lista actual de dispositivos conectados y también escuchar los 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 del dispositivo con el fin de manejar adecuadamente los cambios.

Restricciones

Al acceder a dispositivos de medios, es una buena práctica proporcionar las restricciones más detalladas posibles. Si bien es posible abrir la cámara y el micrófono predeterminados con una restricción simple, puede ofrecer una transmisión de medios que dista mucho de ser la más óptima para la aplicación.

Las restricciones específicas se definen en un objeto MediaTrackConstraint , uno para audio y otro para video. Los atributos en 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 cerca posible. Para un rango, se utilizará el mejor valor en ese rango. Cuando se especifica exact , solo se devolverán las secuencias 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
    }
}
 

Rango

 // 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 actualmente aplicados.

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 reconfigure un dispositivo multimedia sin tener que cerrar primero la transmisión existente.

Mostrar medios

Una aplicación que quiera poder realizar capturas de pantalla y grabaciones debe usar la API de medios de pantalla. La función getDisplayMedia() (que forma parte de navigator.mediaDevices es similar a getUserMedia() y se utiliza con el fin de abrir el contenido de la pantalla (o una parte de ella, como una ventana). El MediaStream devuelto funciona igual que cuando se usa getUserMedia() .

Las restricciones para getDisplayMedia() difieren de las utilizadas para la entrada de audio o video 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 que tienen soporte de medios de visualización.

Corrientes y pistas

Un MediaStream representa una secuencia 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 kind que es audio o video , que indica el tipo de medio que representa. Cada pista puede silenciarse al alternar su propiedad enabled . Una pista tiene una propiedad remote booleana que indica si proviene de un RTCPeerConnection y proviene de un par remoto.