Penghentian MediaStream

Jika menggunakan getUserMedia() atau WebRTC, Anda mungkin perlu menyesuaikan kode untuk Chrome 45 dan yang lebih baru.

MediaStream API mewakili tersinkronisasi aliran media. Misalnya, streaming yang diambil dari kamera dan input mikrofon telah menyinkronkan trek video dan audio. Setiap trek diwakili oleh MediaStreamTrack. (Jangan bingung dengan elemen <track>!)

Ada tiga penghentian penggunaan MediaStream di Chrome 45:

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

Dua tambahan ditambahkan secara paralel:

  • MediaStream.active
  • MediaStreamTrack.stop()

Hal ini memerlukan perubahan berikut:

  • Gunakan MediaStream.active untuk memeriksa apakah MediaStream sedang melakukan streaming, bukan MediaStream.ended.
  • Gunakan MediaStreamTrack.stop() untuk menghentikan streaming, bukan MediaStream.stop().
  • Jika Anda memerlukan ID unik untuk MediaStream, gunakan MediaStream.id, bukan MediaStream.label. MediaStreamTrack.label memberikan nama yang dapat dibaca manusia untuk perangkat sumber untuk streaming, misalnya Kamera FaceTime HD (Bawaan) (05ac:8510).

Anda dapat melihat cara kerjanya: buka simpl.info/gum di Chrome (di perangkat dengan kamera) dan lihat konsol Chrome DevTools. Tujuan Objek MediaStream stream diteruskan ke callback getUserMedia() dalam demo berada dalam cakupan global, sehingga Anda dapat memeriksanya dari konsol. Telepon stream.getTracks()[0] untuk melihat MediaStreamTrack untuk streaming ini.

Screenshot yang menunjukkan MediaStream dan MediaStreamTrack di konsol Chrome DevTools

Stop(), berakhir, dan aktif

Saat Media Capture and Streams W3C Working Group mengamati masalah yang akan terjadi saat Anda menambahkan lagu baru ke MediaStream, dan apakah MediaStream kosong diakhiri, mereka menyadari bahwa ada bukan cara yang masuk akal untuk mengimplementasikan ended pada MediaStream (seperti dalam 'tidak akan pernah mulai lagi'). Di bagian lain HTML5 'berakhir' berarti 'ini telah berakhir dan akan jangan pernah lanjutkan'. 'Aktif' tidak membawa implikasi seperti itu: aliran yang tidak aktif dapat menjadi aktif lagi, misalnya jika jalur baru ditambahkan ke dalamnya. Alih-alih mempertahankan atribut dan fungsi yang membingungkan, Kelompok Kerja memutuskan untuk menghapusnya.

Berikut ini contoh cara menggunakan 'MediaStream.active' untuk memeriksa status feed:

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
}

Menghapus stop() dari MediaStream tidak menghapus fungsi yang sebenarnya: untuk melepaskan perangkat sumber dan sebagainya harus dilakukan pada MediaStreamTrack. Gunakan stop() di MediaStreamTrack sebagai gantinya:

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);
    });

label

Ternyata tidak ada yang bisa mengetahui kegunaan properti ini!

MediaStream.label telah ditambahkan ke versi pertama spesifikasi, tetapi tidak ada yang benar-benar tahu untuk apa label. Saya juga tidak tahu apa yang terjadi dengan label saat streaming dikirim via RTCPeerConnection.

W3C Working Group bertanya-tanya, dan tidak ada yang menginginkannya, sehingga mereka menghapusnya.

Untuk mengulangi: MediaStream.id memberikan ID unik untuk MediaStream dan MediaStreamTrack.label memberikan nama sumber streaming, seperti jenis kamera atau mikrofon.

Informasi selengkapnya tentang MediaStream dan MediaStreamTrack tersedia dari Mozilla Developer Network, dan HTML5 Rocks memberikan pengantar yang sangat baik tentang getUserMedia() Merekam Audio & Video.

Kami selalu menghargai masukan Anda tentang perubahan pada Chrome. Anda dapat mengikuti bug untuk masalah penghentian penggunaan ini (di sini dan di sini) serta menemukan diskusi dan detail lebih lanjut di Intent to Implement.