Если вы работаете с getUserMedia()
или WebRTC, вам может потребоваться скорректировать код для Chrome 45 и более поздних версий.
API MediaStream представляет синхронизированные потоки медиа. Например, поток, полученный с камеры и микрофона, имеет синхронизированные видео- и аудиодорожки. Каждая дорожка представлена MediaStreamTrack . (Не путать с элементом <track> !)
В Chrome 45 есть три устаревших варианта MediaStream
:
-
MediaStream.ended
-
MediaStream.label
-
MediaStream.stop()
Параллельно идут два дополнения:
-
MediaStream.active
-
MediaStreamTrack.stop()
Для этого необходимо внести следующие изменения:
- Для проверки наличия потоковой передачи
MediaStream
используйтеMediaStream.active
, а неMediaStream.ended
. - Для остановки потоковой передачи используйте
MediaStreamTrack.stop()
, а неMediaStream.stop()
. - Если вам нужен уникальный идентификатор для
MediaStream
, используйтеMediaStream.id
вместоMediaStream.label
.MediaStreamTrack.label
предоставляет понятное человеку имя исходного устройства для потока, например , FaceTime HD Camera (Built-in) (05ac:8510) .
Вы можете увидеть это в действии: откройте simpl.info/gum в Chrome (на устройстве с камерой) и просмотрите консоль Chrome DevTools. stream
объектов MediaStream, переданный обратному вызову getUserMedia()
в этой демонстрации, находится в глобальной области видимости, поэтому вы можете проверить его из консоли. Вызовите stream.getTracks()[0]
, чтобы просмотреть MediaStreamTrack
для этого потока.

Stop(), завершен и активен
Когда рабочая группа W3C Media Capture and Streams рассмотрела проблему того, что происходит при добавлении новых дорожек в MediaStream
, и заканчивается ли пустой MediaStream
, они поняли, что не существует разумного способа реализовать ended
в MediaStream
(как в 'никогда не начнется снова'). В других частях HTML5 'ended' означает 'это закончилось и никогда не возобновится'. 'Active' не несет такого смысла: неактивный поток может снова стать активным, например, если к нему добавляется новая дорожка. Вместо того, чтобы сохранять запутанный атрибут и функцию, рабочая группа решила удалить его.
Вот пример использования «MediaStream.active» для проверки статуса потока:
var gumStream;
navigator.getUserMedia({audio: false, video: true},
function(stream) {
gumStream = stream;
// ...
},
function(error) {
console.log('getUserMedia() error', error);
});
// …
if (gumStream.active) {
// do something with the stream
}
Удаление stop()
из MediaStream
не удалило никакой реальной функциональности: процессы отсоединения исходных устройств и т. д. в любом случае должны выполняться на MediaStreamTrack
. Вместо этого используйте stop()
на MediaStreamTrack
:
navigator.getUserMedia({audio: false, video: true},
function(stream) {
// can also use getAudioTracks() or getVideoTracks()
var track = stream.getTracks()[0]; // if only one media track
// ...
track.stop();
},
function(error){
console.log('getUserMedia() error', error);
});
этикетка
Оказывается, никто не мог придумать, как использовать эту недвижимость!
MediaStream.label
был добавлен в первую версию спецификации, но никто толком не знал, для чего нужна label
. Также было неясно, что происходит с label
, когда поток отправляется через RTCPeerConnection
.
Рабочая группа W3C опросила всех , но никому это не понравилось, поэтому они удалили это.
Повторим: MediaStream.id
предоставляет уникальный идентификатор для MediaStream
, а MediaStreamTrack.label
предоставляет имя источника потока, например тип камеры или микрофона.
Более подробную информацию о MediaStream
и MediaStreamTrack
можно найти на сайте Mozilla Developer Network , а HTML5 Rocks предоставляет превосходное введение в getUserMedia()
в разделе «Захват аудио и видео» .
Как всегда, мы ценим ваши отзывы об изменениях в Chrome. Вы можете следить за ошибками для этих устаревших функций ( здесь и здесь ) и найти больше обсуждений и подробностей в Intent to Implement .