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.