MediaStream'in kullanımdan kaldırılması

getUserMedia() veya WebRTC ile çalışıyorsanız kodunuzu Chrome 45 ve sonraki sürümler için ayarlamanız gerekebilir.

MediaStream API, senkronize edilmiş medya akışlarını temsil eder. Örneğin, kamera ve mikrofon girişinden alınan bir akış, video ve ses parçalarını senkronize etmiştir. Her parça, bir MediaStreamTrack ile temsil edilir. (<track> öğesi ile karıştırılmamalıdır!)

Chrome 45'te MediaStream için üç desteğin sonlandırılması vardır:

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

Buna paralel olarak iki ekleme yapılmıştır:

  • MediaStream.active
  • MediaStreamTrack.stop()

Bunlar için aşağıdaki değişiklikler yapılması gerekir:

  • MediaStream akışı olup olmadığını kontrol etmek için MediaStream.ended yerine MediaStream.active öğesini kullanın.
  • Yayını durdurmak için MediaStream.stop() yerine MediaStreamTrack.stop() öğesini kullanın.
  • MediaStream için benzersiz bir tanımlayıcıya ihtiyacınız varsa MediaStream.label yerine MediaStream.id değerini kullanın. MediaStreamTrack.label, akış için kaynak cihaza kullanıcıların okuyabileceği bir ad sağlar; ör. FaceTime HD Kamera (Yerleşik) (05ac:8510).

Bunları çalışırken görebilirsiniz: Chrome'da simpl.info/gum sayfasını açın (kamera bulunan bir cihazda) ve Chrome DevTools konsolunu görüntüleyin. Bu demoda getUserMedia() geri çağırmaya iletilen stream MediaStream nesnesi, global kapsamdadır. Dolayısıyla bu nesneyi konsoldan inceleyebilirsiniz. Bu akışın MediaStreamTrack öğesini görüntülemek için stream.getTracks()[0] numaralı telefonu arayın.

Chrome Geliştirici Araçları konsolundaki MediaStream ve MediaStreamTrack&#39;i gösteren ekran görüntüsü

Stop(), sona erdi ve etkin

Medya Yakalama ve Akışlar W3C Çalışma Grubu, bir MediaStream öğesine yeni parçalar eklediğinizde ne olacağı ve boş bir MediaStream'nin sona erip ermediği sorusuna baktığında, ended öğesini MediaStream öğesine uygulamanın (örneğin "bir daha başlamayacak") mantıklı bir yolunu olmadığını fark etti. HTML5'in diğer bölümlerinde "sona erdi" ifadesi, "bu işlem bitti ve asla devam etmeyecek" anlamına gelir. "Etkin" seçeneğinin bu tür bir etkisi yoktur: Etkin olmayan bir akış tekrar etkin hale gelebilir (örneğin, bu kanala yeni bir kanal eklenirse). Çalışma Grubu, kafa karıştırıcı bir özelliği ve işlevi korumak yerine bunu kaldırmaya karar verdi.

Bir akışın durumunu kontrol etmek için "MediaStream.active" öğesinin nasıl kullanılacağıyla ilgili bir örneği aşağıda bulabilirsiniz:

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() öğesinin MediaStream öğesinden kaldırılması gerçek bir işlevi kaldırmadı: Kaynak cihazları çıkarmaya ilişkin işlemler ve diğer işlemlerin MediaStreamTrack üzerinde yine de yapılması gerekiyor. Bunun yerine MediaStreamTrack üzerinde stop() kullanın:

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

etiket

Hiç kimse bu özelliğin nasıl kullanılacağını tam olarak belirleyemedi.

MediaStream.label, spesifikasyonun ilk sürümüne eklenmişti, ancak kimse label ürününün ne olduğunu bilmiyordu. RTCPeerConnection aracılığıyla akış gönderildiğinde label hizmetine ne olduğu da anlaşılamadı.

W3C Çalışma Grubu, isteğinde bulunduğu için dosyayı kaldırdı.

Tekrar belirtmek gerekirse MediaStream.id, MediaStream için benzersiz bir tanımlayıcı; MediaStreamTrack.label ise bir akış kaynağının adını (ör. kamera veya mikrofon türü) sağlar.

Mozilla Developer Network'te MediaStream ve MediaStreamTrack hakkında daha fazla bilgi bulabilirsiniz. HTML5 Rocks, Ses ve Video Yakalama bölümünde getUserMedia() hakkında mükemmel bir başlangıç bilgileri sağlar.

Her zaman olduğu gibi, Chrome'da yapılan değişikliklerle ilgili geri bildirimleriniz bizim için değerlidir. Bu kullanımdan kaldırma işlemleriyle ilgili hataları (burada ve burada) takip edebilir, Uygulama Amacı bölümünde daha fazla tartışma ve ayrıntı bulabilirsiniz.