API de MediaStream
==================

**Experimental:** **Esta es una tecnología experimental**  
Comprueba la Tabla de compabilidad de navegadores cuidadosamente antes de usarla en producción.

La API de proceso ***MediaStream***, a veces llamada *Media Stream API* o *Stream API*, es parte de la norma WebRTC (en-US) y describe un flujo de datos de audio o video, los métodos para trabajar con ellos, las limitaciones asociadas con este tipo de datos, las respuestas de error y éxito al usar los datos asincrónicamente y los eventos que se disparan durante el proceso.

Conceptos Básicos
-----------------

La API está basada sobre la manipulación de un objeto `MediaStream` (en-US) que representa un flujo de datos de audio o video. Generalmente, un objeto `MediaStream` es una simple cadena URL que puede ser usada para referirse a datos almacenados en un `Archivo` DOM o un objeto `Blob` creado con `window.URL.createObjectURL()` (en-US), como se lo describe en**Obtener el video**.

Un `MediaStream` está compuesto por más objetos [i]`MediaStreamTrack` que representan varias **pistas** de audio o video. Cada `MediaStreamTrack` puede tener uno o más **canales**. El canal representa la unidad menor de un flujo de medio, como una señal de audio asociada a un parlante específico, como el *izquierdo* o el *derecho* en una pista de audio estéreo.

Los objetos `MediaStream` poseen una sola **entrada** y **salida**[ii]**.** Un objeto `MediaStream` creado con **getUserMedia()** se denomina *local* y tiene como origen de entrada una de las cámaras o micrófonos del usuario. Un MediaStream no local puede estar representando un elemento de medio como `<video>` o `<audio>`, un flujo originado en la red y obtenido a través de la [iii]***PeerConnection API*** o un flujo creado con la **API de Audio Web** [iv]`MediaStreamAudioSourceNode`. La salida de un objeto `MediaStream` está enlazada a un **consumidor.** El mismo puede ser un elemento de medio como `<audio> o <video>`, la **PeerConnection API** de WebRTC o una **API de Audio Web** [v]`MediaStreamAudioDestinationNode` (en-US).

Referencia
----------

* `addtrack` (event)
* `AudioStreamTrack`
* `BlobEvent` (en-US)
* `BlobEventInit`
* `ended (MediaStream)` (en-US) (event)
* `ended (MediaStreamTrack)` (en-US) (event)
* `MediaStream` (en-US)
* `MediaStreamConstraints` (en-US)
* `MediaStreamTrack`
* `MediaStreamTrackEvent` (en-US)
* `MediaStreamTrackList`
* `MediaTrackConstraints` (en-US)
* `muted` (event)
* `NavigatorUserMedia`
* `NavigatorUserMediaError`
* `overconstrained` (event)
* `removetrack` (event)
* `started` (event)
* `unmuted` (event)
* `URL`
* `VideoStreamTrack`
Pista de MediaStream
--------------------

Una *MediaStreamTrack* puede ser de dos tipos, de audio o video, y representa el origen del medio, como una cámara.

### Atributos

`enabled`: Boolean

True si la pista sigue asociada a su fuente.

`id`: DOMString, read-only

Un *globally unique identifier* (GUID) que describe la pista de medios.

`kind`: DOMString, read-only

El **audio** o **video** para la pista de origen.

`label`: DOMString, read-only

Una cadena de tipo usuario-asignada que identifica la pista de origen, como en "internal microphone."

`onended`: EventHandler

Maneja el evento finalizado cuando se lo activa en el objeto MediaStreamTrack.

`onmute`: EventHandler

Maneja el evento mudo del objeto MediaStreamTrack.

`onoverconstrained`: EventHandler

Maneja el evento superrestricto cuando se lo activa en el objeto MediaStreamTrack.

`onstarted`: EventHandler

Maneja el evento iniciado cuando se lo activa en el objeto MediaStreamTrack.

`onunmute`: EventHandler

Manjea el evento sin enmudecer cuando se lo activa en el objeto MediaStreamTrack.

`readyState`: unsigned short, read-only

Valores para la pista lista:

* live - la pista está activa; la salida se puede activar *on* y *off* con el atributo habilitado.
* muted - el origen del medio subyacente de la pista no puede proveer temporalmente datos en tiempo real.

`sourceId`: DOMString, read-only

La identidad de este origen que es único para esta aplicación y persistente. Se recomienda una GUID pero no es obligatoria.

`sourceType`: SourceTypeEnum, read-only

Contiene el tipo de información del origen, si es que existe.

### Eventos

`started`: Event

El objeto MediaStreamTrack no es más "new" en el readyState.

`muted`: Event

El origen del objeto MediaStreamTrack no puede proveer datos temporalmente.

`unmuted`: Event

El origen del objeto MediaStreamTrack a recomenzado a proveer datos

`overconstrained`: Event

El origen del objeto MediaStreamTrack no puede ser confugurado para que encaje en las restricciones impuestas por la pista. Esto podría ocurrir con la altura en el caso de un video, entre otras posibilidades.

`ended`: Event

El origen del objeto MediaStreamTrack no proveerá datos; puede ocurrir por lo siguiente:

* el usuario a deshabilitado los permisos de la aplicación
* el dispositivo de origen está desconectado
* el *peer* remoto no transmite datos
* se llamó el método stop()

### appendConstraint()

Agrega la restricción al final de la lista. Esto sólo es un método para añadir restricciones optativas.

Parámetros

constraintName **DOMString**, required.

constraintValue **Primitive (DOMString, float, etc.)** or **MinMaxConstraint**, required.

Devuelve

void

Excepciones

None.

### applyConstraints()

Aplica una lista de opciones optativas a la pista. Sobrescribe cualquier otra restricción optativa ya existente en la pista.

**Parámetros**

constraints **MediaTrackConstraints**, required.

Devuelve

void

Excepciones

None.

### constraints()

Devuelte todas las [i]restricciones en la pista, obligatorias y optativas. Si tanto `mandatory` u `optional` no tienen restricciones, ese campo será `undefined`. Si ninguno tiene restricciones, entonces `constraints()` devolverá `null.`

Parámetros

None.

Devuelve

**MediaTrackConstraints** or **null**

Excepciones

None.

### getConstraint()

Trae una restricción específica, por nombre, de la pista. Este método puede devolver una de varias posibilidades:

* Si su restricción no existe, devuelve `null.`
* Si no provee true para parámetro optativo `mandatory` y su búsqueda resulta en más de una restricción, este método devolverá una lista. Cada ítem de la lista será el nombre de la búsqueda así como su valor o un objeto `MinMaxConstraint`. La lista se agrupa con la entrada 0º como la más importante y cada entrada posterior es progresivamente menos importante.
* Si provee `True` al parámetro `mandatory` y su búsqueda es miembro del `MediaTrackConstraintSet` de la pista, este método devuelve su valor primitivo o su `MinMaxConstraint`, cualquiera que aplique al caso.

Parámetros

constraintName **DOMString**, required.

mandatory **boolean**, optional, default false.

Devuelve

Any of the possibilities mentioned above.

Excepciones

None.

--

### stop()

Detiene permanentemente la creación de datos para las pistas y remueve las referencias a los orígines.

Parámetros

None.

Devuelve

Void.

Excepciones

None.

Lista de pistas de MediaStream
------------------------------

Un MediaStream tiene dos objetos MediaStreamTrackList, uno para la pista de video y otro para la de audio.

| Atributo | Tipo | Descripción |
| --- | --- | --- |
| length | unsigned long, read-only | El número de pistas en la lista. |
| onaddtrack | EventHandler | Maneja el evento addtrack. |
| onremovetrack | EventHandler | Maneja el evento removetrack. |

### Eventos

| Evento | Interfaz | Descripción |
| --- | --- | --- |
| addtrack | MediaStreamTrackEvent | Se agregó una MediaStreamTrack a la lista. |
| removetrack | MediaStreamTrackEvent | Se removió una MediaStreamTrack de la lista. |

### add()

Agrega una MediaStreamTrack a la lista de pistas.

Parámetros

MediaStreamTrack **track**, required.

Devuelve

Void.

Excepciones

INVALID\_STATE\_ERR if the stream is finished (all tracks have ended).

### item()

Devuelve la MediaStreamTrack al valor de índice (index) especificado.

Parámetros

unsigned long **index**, required.

Devuelve

MediaStreamTrack

Excepciones

None.

### Remove()

Remueve una MediaStreamTrack de la lista de pistas.

Parámetros

MediaStreamTrack **track**, required.

Devuelve

Void.

Excepciones

INVALID\_STATE\_ERR if the stream is finished (all tracks have ended).

Especificaciones
----------------

| Specification |
| --- |
| Media Capture and Streams  |
| Media Capture from DOM Elements  |

Compatibilidad con navegadores
------------------------------

### api.MediaStream

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### api.MediaStreamTrack

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### api.MediaDevices

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### api.MediaDeviceInfo

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### api.InputDeviceInfo

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### api.CanvasCaptureMediaStreamTrack

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Ver también
-----------

* WebRTC (en-US) - la página de introducción a la API
* getUserMedia() (en-US)
* Taking webcam photos - un tutorial para usar getUserMedia()