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 dikelirukan dengan elemen<track>!)

Ada tiga penghentian penggunaan MediaStream di Chrome 45:

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

Secara paralel, ada dua penambahan:

  • MediaStream.active
  • MediaStreamTrack.stop()

Hal ini memerlukan perubahan berikut:

  • Gunakan MediaStream.active untuk memeriksa apakah MediaStream 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 streaming, misalnya FaceTime HD Camera (Built-in) (05ac:8510).

Anda dapat melihat cara kerjanya: buka simpl.info/gum di Chrome (di perangkat dengan 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] untuk melihat MediaStreamTrack untuk streaming ini.

Screenshot yang menampilkan MediaStream dan MediaStreamTrack di konsol Chrome DevTools

Stop(), ended, dan active

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 masuk akal untuk menerapkan ended pada MediaStream (seperti 'tidak akan pernah dimulai lagi'). Di bagian lain HTML5, 'berakhir' berarti 'ini telah berakhir dan tidak akan pernah dilanjutkan'. 'Aktif' tidak memiliki implikasi tersebut: streaming yang tidak aktif dapat menjadi aktif lagi, misalnya jika trek baru ditambahkan ke streaming tersebut. Daripada mempertahankan atribut dan fungsi yang membingungkan, Grup 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 sebenarnya: proses untuk melepaskan perangkat sumber dan sebagainya harus dilakukan di 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 penggunaan properti ini.

MediaStream.label telah ditambahkan ke versi pertama spesifikasi, tetapi tidak ada yang benar-benar tahu tujuan label. Tidak jelas juga apa yang terjadi pada label saat streaming dikirim melalui RTCPeerConnection.

Grup Kerja W3C bertanya-tanya, dan tidak ada yang menginginkannya, jadi 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() di Merekam Audio & Video.

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