Penghentian MediaStream

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

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

Ada tiga penghentian penggunaan MediaStream di Chrome 45:

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

Secara paralel, ada dua tambahan:

  • MediaStream.active
  • MediaStreamTrack.stop()

Hal ini memerlukan perubahan berikut:

  • Gunakan MediaStream.active untuk memeriksa apakah MediaStream sedang 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 bagi perangkat sumber untuk streaming, misalnya Kamera FaceTime HD (Bawaan) (05ac:8510).

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

Screenshot yang menunjukkan MediaStream dan MediaStreamTrack di konsol Chrome DevTools

Stop(), berakhir dan aktif

Saat Grup Kerja W3C Media Capture and Streams melihat masalah yang terjadi saat Anda menambahkan trek baru ke MediaStream, dan apakah MediaStream kosong diakhiri, mereka menyadari bahwa tidak ada cara yang logis untuk menerapkan ended pada MediaStream (seperti 'tidak akan pernah dimulai lagi'). Di bagian lain dari HTML5 'berakhir' berarti 'ini telah berakhir dan tidak akan dilanjutkan'. 'Aktif' tidak memiliki implikasi seperti itu: streaming yang tidak aktif dapat menjadi aktif kembali, misalnya jika jalur baru ditambahkan ke dalamnya. Alih-alih mempertahankan atribut dan fungsi yang membingungkan, Kelompok Kerja memutuskan untuk menghapusnya.

Berikut adalah contoh cara menggunakan 'MediaStream.active' untuk memeriksa status streaming:

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 apa pun: proses untuk melepaskan perangkat sumber dan seterusnya harus dilakukan pada MediaStreamTrack. Sebagai gantinya, gunakan stop() di 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);
    });

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 kegunaan label. Kami juga tidak dapat memastikan apa yang terjadi pada label saat streaming dikirim melalui RTCPeerConnection.

Kelompok Kerja W3C bertanya-tanya, dan tidak ada yang menginginkan hal itu, jadi mereka menghapusnya.

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

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

Seperti biasa, kami menghargai masukan Anda terkait perubahan pada Chrome. Anda dapat memantau bug untuk penghentian penggunaan ini (di sini dan di sini) serta menemukan diskusi dan detail selengkapnya di Intent to Implement.