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çinMediaStream.ended
yerineMediaStream.active
öğesini kullanın.- Yayını durdurmak için
MediaStream.stop()
yerineMediaStreamTrack.stop()
öğesini kullanın. MediaStream
için benzersiz bir tanımlayıcıya ihtiyacınız varsaMediaStream.label
yerineMediaStream.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.
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.