MediaStreamTrack
içeriği, değiştirilebilen veya yeni içerik oluşturmak için kullanılabilecek bir akış olarak gösterilir
Arka plan
Media Capture and Streams API bağlamında MediaStreamTrack
arayüzü, akış içindeki tek bir medya kanalını temsil eder. Genellikle ses veya video parçalarıdır ancak başka kanal türleri de olabilir.
MediaStream
nesneleri, çeşitli ses veya video parçalarını temsil eden sıfır veya daha fazla MediaStreamTrack
nesnesinden oluşur. Her MediaStreamTrack
bir veya daha fazla kanala sahip olabilir. Kanal, bir medya akışının en küçük birimini temsil eder. Örneğin, bir hoparlörle ilişkili ses sinyali (ör. bir stereo ses parçasının sol veya sağı) gibi.
MediaStreamTrack
için eklenebilir akış nedir?
MediaStreamTrack
için eklenebilir akışların ardındaki temel fikir, MediaStreamTrack
içeriğini bir akış koleksiyonu (whatWG Streams API'de tanımlandığı şekilde) olarak ortaya çıkarmaktır. Bu akışlar, yeni bileşenleri tanıtmak için değiştirilebilir.
Geliştiricilere video (veya ses) akışına doğrudan erişim izni verdiğinizde, değişiklikleri doğrudan akışa uygulayabilirler. Buna karşılık, aynı video işleme görevinin geleneksel yöntemlerle gerçekleştirilmesi için geliştiricilerin <canvas>
öğeleri gibi aracılar kullanması gerekir. (Bu tür işlemlerin ayrıntıları için bkz. video + tuval = sihir.)
Tarayıcı desteği
MediaStreamTrack
için eklenebilir akışlar Chrome 94'ten desteklenir.
Kullanım alanları
MediaStreamTrack
için eklenebilir akışlara yönelik kullanım alanları aşağıdakileri içerir ancak bunlarla sınırlı değildir:
- "Komik şapkalar" veya sanal arka planlar gibi video konferans araçları.
- Yazılım vocoder'ları gibi ses işleme.
MediaStreamTrack
için eklenebilir akışlar nasıl kullanılır?
Özellik algılama
MediaStreamTrack
desteği için eklenebilir akışları aşağıdaki şekilde özellik algılama ile algılayabilirsiniz.
if ('MediaStreamTrackProcessor' in window && 'MediaStreamTrackGenerator' in window) {
// Insertable streams for `MediaStreamTrack` is supported.
}
Temel kavramlar
MediaStreamTrack
için eklenebilir akışlar, WebCodecs tarafından daha önce önerilen kavramları temel alır ve MediaStreamTrack
öğesini kavramsal olarak iki bileşene ayırır:
- Bir
MediaStreamTrack
nesnesinin kaynağını tüketen ve medya karelerinin, özellikleVideoFrame
veyaAudioFrame
nesnelerinin akışını oluşturanMediaStreamTrackProcessor
. Bunu, kodlanmamış kareleri kanaldanReadableStream
olarak gösterebilen bir kanal havuzu gibi düşünebilirsiniz. - Bir medya karesi akışını tüketen ve bir
MediaStreamTrack
arayüzü gösterenMediaStreamTrackGenerator
. TıpkıgetUserMedia()
kanalından gelen bir parça gibi tüm havuzlara sağlanabilir. Giriş olarak medya karelerini alır.
MediaStreamTrackProcessor
MediaStreamTrackProcessor
nesnesi readable
adlı bir özelliği gösterir. MediaStreamTrack
içindeki çerçevelerin okunmasını sağlar. Parça bir video parçasıysa readable
kaynağından okunan parçalar VideoFrame
nesne olur. Parça bir ses parçasıysa readable
kaynağından okunan parçalar AudioFrame
nesne olur.
MediaStreamTrackGenerator
Bir MediaStreamTrackGenerator
nesne de aynı şekilde bir özelliği writable
gösterir. Bu özellik, WritableStream
öğesinin kendisi bir MediaStreamTrack
olan MediaStreamTrackGenerator
öğesine medya çerçeveleri yazmaya olanak tanır. kind
özelliği "audio"
ise akış AudioFrame
nesnelerini kabul eder ve diğer türlerde başarısız olur. Tür "video"
ise akış VideoFrame
nesnelerini kabul eder ve diğer türlerde başarısız olur. writable
öğesine bir çerçeve yazıldığında, çerçevenin close()
yöntemi otomatik olarak çağrılır. Böylece medya kaynaklarına artık JavaScript'ten erişilemez.
MediaStreamTrackGenerator
, writable
alanına medya çerçeveleri yazılarak özel bir kaynağın uygulanabileceği kanaldır.
Tümünü bir araya getirin
Temel fikir, aşağıdaki gibi bir işleme zinciri oluşturmaktır:
Platform Kanalı → İşlemci → Dönüşüm → Oluşturucu → Platform Havuzları
Aşağıdaki örnekte, bir barkod tarayıcı uygulamasının canlı video akışında algılanan barkodu vurgulayan bu zinciri gösterilmektedir.
const stream = await getUserMedia({ video: true });
const videoTrack = stream.getVideoTracks()[0];
const trackProcessor = new MediaStreamTrackProcessor({ track: videoTrack });
const trackGenerator = new MediaStreamTrackGenerator({ kind: 'video' });
const transformer = new TransformStream({
async transform(videoFrame, controller) {
const barcodes = await detectBarcodes(videoFrame);
const newFrame = highlightBarcodes(videoFrame, barcodes);
videoFrame.close();
controller.enqueue(newFrame);
},
});
trackProcessor.readable.pipeThrough(transformer).pipeTo(trackGenerator.writable);
const videoBefore = document.getElementById('video-before');
const videoAfter = document.getElementById('video-after');
videoBefore.srcObject = stream;
const streamAfter = new MediaStream([trackGenerator]);
videoAfter.srcObject = streamAfter;
Demografi
Yukarıdaki bölümde yer alan QR kodu tarayıcı demosunu bir masaüstü veya mobil tarayıcıda çalışırken görebilirsiniz. Kameranın önünde bir QR kodu tuttuğunuzda uygulama kodu algılayıp vurgular. Uygulamanın kaynak kodunu Glitch'te görebilirsiniz.
Güvenlik ve Gizlilikle İlgili Dikkat Edilmesi Gerekenler
Bu API'nin güvenliği, web platformundaki mevcut mekanizmalara bağlıdır. Veriler VideoFrame
ve AudioFrame
arayüzleri kullanılarak sunulduğundan, bu arayüzlerin kaynakla ilişkili verilerle ilgili kuralları geçerli olur. Örneğin, kaynaklar arası kaynaklardan gelen verilere, bu tür kaynaklara erişimle ilgili mevcut kısıtlamalar nedeniyle (ör. kaynaklar arası bir resmin veya video öğesinin piksellerine erişmek mümkün değildir) erişilemez. Ayrıca kameralardan, mikrofonlardan veya ekranlardan medya verilerine erişim kullanıcı yetkilendirmesine tabidir. Bu API'nin sunduğu medya verileri, halihazırda diğer API'ler üzerinden kullanılabilir.
Geri bildirim
Chromium ekibi, MediaStreamTrack
için eklenebilir akışlarla ilgili deneyimlerinizi öğrenmek istiyor.
Bize API tasarımı hakkında bilgi verin
API'de beklediğiniz gibi çalışmayan bir durum mu var? Fikrinizi uygulamak için gereken yöntem veya özellikler eksik mi? Güvenlik modeliyle ilgili bir sorunuz veya yorumunuz mu var? İlgili GitHub deposuna özellik sorunu bildiriminde bulunun veya mevcut bir soruna düşüncelerinizi ekleyin.
Uygulamayla ilgili bir sorunu bildirin
Chromium'un uygulamasında bir hata buldunuz mu? Yoksa uygulama, spesifikasyondan farklı mı?
new.crbug.com adresinde hata bildiriminde bulunun. Mümkün olduğunca fazla ayrıntı eklediğinizden ve yeniden oluşturmaya ilişkin basit talimatları eklediğinizden emin olun ve Bileşenler kutusuna Blink>MediaStream
yazın.
Glitch, hızlı ve kolay yeniden oluşturmalar paylaşmak için idealdir.
API'ye desteği gösterin
MediaStreamTrack
için eklenebilir akışlar kullanmayı düşünüyor musunuz? Herkese açık desteğiniz, Chromium ekibinin özellikleri
önceliklendirmesine yardımcı olur ve diğer tarayıcı tedarikçilerine, bu özellikleri desteklemenin ne kadar kritik olduğunu
gösterir.
#InsertableStreams
hashtag'ini kullanarak @ChromiumDev adresine tweet gönderip bu tweet'i nerede ve nasıl kullandığınızı bize bildirin.
Faydalı bağlantılar
Teşekkür
MediaStreamTrack
spesifikasyonu için eklenebilir akışlar, Harald Alvestrand ve Guido Urdaneta tarafından yazılmıştır.
Bu makale Harald Alvestrand, Joe Medley, Ben Wagner, Huib Kleinhout ve François Beaufort tarafından incelenmiştir. Chris Montgomery tarafından Unsplash'teki hero resim.