MediaRecorder.ondataavailable
=============================

**`MediaRecorder.ondataavailable`** обработчик события (часть MediaStream Recording API) обрабатывает `dataavailable` событие, позволяет выполнить код, когда тип данных `Blob`, представляющий обработанные данные становиться доступным для использования.

Событие `dataavailable` вызывается когда MediaRecorder доставляет медиа данные в ваше приложение для использования. Они представляются в виде объекта типа `Blob`, содержащего данные. Это происходит в четырёх ситуациях:

* Когда медиа поток завершается, любые мультимедийные данные ещё не доставленные в обработчик `ondataavailable` немедленно передаются в объект `Blob`.
* При вызове метода `MediaRecorder.stop()` (en-US) , порция медиаданных, объем которых был захвачен с момента начала записи или после последнего вызова события `dataavailable` помещаются в объект `Blob`; после этого захват завершается.
* При вызове метода `MediaRecorder.requestData()` порция медиаданных, объем которых был захвачен с момента начала записи, или после последнего вызова события `dataavailable` помещаются в вновь созданный объект типа `Blob` , и захват порций медиаданных продолжается уже в этот новый объект `blob`.
* Если свойство `timeslice` передаётся в метод `MediaRecorder.start()`, который запускает захват порций медиаданных, событие `dataavailable` запускается каждые `timeslice` миллисекунд. Это значит, что каждый объект типа `blob` будет иметь специфический размер (за исключением последнего, который может быть короче, содержащий все, что осталось с момента последнего события ). Поэтому, если метод выглядит так : `recorder.start(1000);` то событие `dataavailable` будет запускаться каждую секунду общего потока медиа захвата, и обработчик события будет вызываться каждую секунду, содержащий в параметре объект типа `blob` , который будет содержать объем порции записи медиаданных продолжительностью в одну секунду. Можно использовать свойство `timeslice` вместе с `MediaRecorder.stop()` (en-US) и `MediaRecorder.requestData()` для создания нескольких объектов типа `blob` одинакового объёма данных , плюс последние короткие объекты типа `blob.`

**Примечание:** Медиаданные, содержащиеся в объекте типа `Blob` доступны в свойстве `data` , возвращаемого в параметре объекта события `dataavailable`.

Синтаксис
---------
```

MediaRecorder.ondataavailable = function(event) { ... }
MediaRecorder.addEventListener('dataavailable', function(event) { ... })
```

Пример
------


```js
...

  mediaRecorder.onstop = function(e) {
    console.log("data available after MediaRecorder.stop() called.");

    var audio = document.createElement('audio');
    audio.controls = true;
    var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
    var audioURL = window.URL.createObjectURL(blob);
    audio.src = audioURL;
    console.log("recorder stopped");
  }

  mediaRecorder.ondataavailable = function(e) {
    chunks.push(e.data);
  }

...
```

Спецификации
------------

| Specification |
| --- |
| MediaStream Recording # dom-mediarecorder-ondataavailable |

Совместимость с браузерами
--------------------------

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

Смотрите также
--------------

* Использование интерфейса записи медиапотока
* Веб диктофон: MediaRecorder + getUserMedia + Web Audio API пример визуализации, от Chris Mills (source on Github.)
* Демонстрационный пример записи медиапотока, от Sam Dutton.
* `Navigator.getUserMedia`