WebRTC'nin medya bölümü, video ve ses yakalayabilen donanımlara (ör. kamera ve mikrofon) erişimin yanı sıra medya akışlarının nasıl çalıştığını kapsar. Ayrıca, bir uygulamanın ekran görüntüsü alabilme şekli olan görüntüleme medyası da ele alınır.
Medya cihazları
Tarayıcı tarafından desteklenen tüm kamera ve mikrofonlara navigator.mediaDevices nesnesi üzerinden erişilir ve bu nesneler yönetilir. Birçok kamera ve mikrofon USB üzerinden bağlandığı ve uygulamanın yaşam döngüsü boyunca bağlanıp bağlantısı kesilebildiği için uygulamalar, bağlı cihazların mevcut listesini alabilir ve değişiklikleri dinleyebilir. Bir medya cihazının durumu herhangi bir zamanda değişebileceğinden, uygulamaların değişiklikleri düzgün şekilde işlemek için cihaz değişikliklerine kaydolması önerilir.
Sınırlamalar
Medya cihazlarına erişirken mümkün olduğunca ayrıntılı kısıtlamalar sağlamak iyi bir uygulamadır. Varsayılan kamera ve mikrofonu basit bir kısıtlamayla açmak mümkün olsa da bu, uygulama için en uygun medya akışını sağlamayabilir.
Belirli kısıtlamalar, biri ses, diğeri video için olmak üzere iki MediaTrackConstraint nesnesinde tanımlanır. Bu nesnedeki özellikler ConstraintLong, ConstraintBoolean, ConstraintDouble veya ConstraintDOMString türündedir. Bunlar belirli bir değer (ör. sayı, Boole veya dize), bir aralık (minimum ve maksimum değer içeren LongRange veya DoubleRange) ya da ideal veya exact tanımı içeren bir nesne olabilir. Tarayıcı, belirli bir değer için mümkün olduğunca yakın bir değer seçmeye çalışır.
Bir aralık için, o aralıktaki en iyi değer kullanılır. exact belirtildiğinde yalnızca bu kısıtlamayla tam olarak eşleşen medya akışları döndürülür.
Yakın
// Camera with a resolution as close to 640x480 as possible
{
"video": {
"width": 640,
"height": 480
}
}
Aralık
// Camera with a resolution in the range 640x480 to 1024x768
{
"video": {
"width": {
"min": 640,
"max": 1024
},
"height": {
"min": 480,
"max": 768
}
}
}
Tam
// Camera with the exact resolution of 1024x768
{
"video": {
"width": {
"exact": 1024
},
"height": {
"exact": 768
}
}
}
Bir medya akışının belirli bir parçasının gerçek yapılandırmasını belirlemek için MediaStreamTrack.getSettings() işlevini çağırabiliriz. Bu işlev, şu anda uygulanan MediaTrackSettings değerini döndürür.
Ayrıca, bir parçadaki kısıtlamaları, parçada applyConstraints() çağrısı yaparak açtığımız bir medya cihazından da güncelleyebilirsiniz. Bu, bir uygulamanın mevcut akışı kapatmak zorunda kalmadan bir medya cihazını yeniden yapılandırmasına olanak tanır.
Medya görüntüleme
Ekran görüntüsü yakalama ve kaydetme işlemleri yapmak isteyen uygulamalar, Display Media API'yi kullanmalıdır. getDisplayMedia() işlevi (navigator.mediaDevices'in bir parçasıdır), getUserMedia()'ye benzer ve ekranın içeriğini (veya bir bölümünü, örneğin bir pencere) açmak için kullanılır. Döndürülen MediaStream, getUserMedia() kullanılırken olduğu gibi çalışır.
getDisplayMedia() ile ilgili kısıtlamalar, normal video veya ses girişi için kullanılanlardan farklıdır.
{
video: {
cursor: 'always' | 'motion' | 'never',
displaySurface: 'application' | 'browser' | 'monitor' | 'window'
}
}
Yukarıdaki kod snippet'inde, ekran kaydıyla ilgili özel kısıtlamaların nasıl çalıştığı gösterilmektedir. Bunların, medya görüntüleme desteği olan tüm tarayıcılar tarafından desteklenmeyebileceğini unutmayın.
Akışlar ve parçalar
MediaStream, ses ve video parçalarından (MediaStreamTrack) oluşan bir medya içeriği akışını temsil eder. MediaStream.getTracks() işlevini çağırarak MediaStream konumundaki tüm parçaları alabilirsiniz. Bu işlev, MediaStreamTrack nesnelerinden oluşan bir dizi döndürür.
MediaStreamTrack
Bir MediaStreamTrack, temsil ettiği medya türünü belirten audio veya video değerine sahip bir kind özelliğine sahiptir. Her parça, enabled özelliği değiştirilerek sessize alınabilir. Bir parçanın, RTCPeerConnection tarafından kaynaklanıp uzak bir eşten gelip gelmediğini belirten bir Boole özelliği remote vardır.