Если вы работаете с getUserMedia()
или WebRTC, вам может потребоваться настроить код для Chrome 45 и более поздних версий.
API MediaStream представляет синхронизированные потоки мультимедиа. Например, поток, поступающий со входа камеры и микрофона, синхронизирует видео и аудио дорожки. Каждая дорожка представлена MediaStreamTrack . (Не путать с элементом <track> !)
В Chrome 45 есть три устаревших варианта MediaStream
:
-
MediaStream.ended
-
MediaStream.label
-
MediaStream.stop()
Параллельно идут два дополнения:
-
MediaStream.active
-
MediaStreamTrack.stop()
Они требуют следующих изменений:
- Используйте
MediaStream.active
чтобы проверить, выполняется ли потоковая передачаMediaStream
, а неMediaStream.ended
. - Используйте
MediaStreamTrack.stop()
чтобы остановить потоковую передачу, а неMediaStream.stop()
. - Если вам нужен уникальный идентификатор для
MediaStream
используйтеMediaStream.id
вместоMediaStream.label
.MediaStreamTrack.label
предоставляет удобочитаемое имя исходного устройства для потока, например FaceTime HD Camera (встроенная) (05ac:8510) .
Вы можете увидеть это в действии: откройте simpl.info/gum в Chrome (на устройстве с камерой) и просмотрите консоль Chrome DevTools. stream
объектов MediaStream, передаваемый обратному вызову getUserMedia()
в этой демонстрации, находится в глобальной области видимости, поэтому вы можете проверить его с консоли. Вызовите stream.getTracks()[0]
, чтобы просмотреть MediaStreamTrack
для этого потока.
Stop(), завершено и активно
Когда рабочая группа W3C по захвату и потокам мультимедиа рассмотрела проблему того, что происходит, когда вы добавляете новые дорожки в MediaStream
, и завершается ли пустой MediaStream
, они поняли, что не существует разумного способа реализовать ended
в MediaStream
(как в «никогда больше не начну»). В других частях HTML5 «окончание» означает «это закончилось и никогда не возобновится». «Активный» не имеет такого значения: неактивный поток может снова стать активным, например, если к нему добавлен новый трек. Вместо того, чтобы сохранять сбивающий с толку атрибут и функцию, Рабочая группа решила удалить его.
Вот пример использования 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 , а HTML5 Rocks представляет собой отличное введение в getUserMedia()
в разделе «Захват аудио и видео» .
Как всегда, мы ценим ваши отзывы об изменениях в Chrome. Вы можете следить за ошибками в этих устареваниях ( здесь и здесь ) и найти более подробное обсуждение и подробности в Намерении реализовать .