5. RTP Medya API
RTP medya API’si, bir web uygulamasının eşler arası bir bağlantı
üzerinden MediaStreamTrack’ler göndermesine ve almasına
olanak tanır. İzler bir RTCPeerConnection’a eklendiğinde
sinyalleşmeye yol açar; bu sinyalleşme uzak bir eşe iletildiğinde, uzak
tarafta karşılık gelen izlerin oluşturulmasına neden olur.
RTCPeerConnection tarafından gönderilen izler ile
diğeri tarafından alınan izler arasında bire bir (1:1) tam bir eşleşme
yoktur. Öncelikle, gönderilen izlerin kimlikleri alınan izlerin
kimlikleriyle eşleşmez. Ayrıca, replaceTrack, bir
RTCRtpSender tarafından gönderilen izi, alıcı tarafında
yeni bir iz oluşturmadan değiştirir; karşılık gelen
RTCRtpReceiver yalnızca tek bir ize sahip olur ve bu iz,
potansiyel olarak bir araya getirilmiş birden fazla medya kaynağını
temsil edebilir. Hem addTransceiver hem de
replaceTrack, aynı izin birden fazla kez gönderilmesine
neden olacak şekilde kullanılabilir; bu durum alıcı tarafında, her
biri kendi ayrı izine sahip birden fazla alıcı olarak gözlemlenir. Bu
nedenle, gerekirse RTCRtpTransceiver’ın
mid’i kullanılarak göndericiler ve alıcılar eşleştirilmek
suretiyle, bir taraftaki bir RTCRtpSender ile diğer
taraftaki bir RTCRtpReceiver’ın izi arasında bire bir bir
ilişki olduğunu düşünmek daha doğrudur.
Medya gönderilirken, göndericinin; SDP tarafından müzakere edilen zarf, kodlayıcının hizalama kısıtları ya da hatta CPU aşırı kullanım tespiti veya bant genişliği kestirimi gibi çeşitli gereksinimleri karşılamak için medyayı yeniden ölçeklendirmesi veya yeniden örneklemesi gerekebilir.
[RFC9429]’daki kurallara (bölüm 3.6.) uygun olarak, video AZALTILABİLİR. Girdi kaynağında meydana gelmemiş sahte veriler oluşturmak için medya BÜYÜTÜLMEMELİDİR; piksel sayıları üzerindeki kısıtları karşılamak için gerekli olanlar dışında medya KIRPILMAMALIDIR ve en-boy oranı DEĞİŞTİRİLMEMELİDİR.
Video, scaleResolutionDownBy sonucunda yeniden
ölçeklendirildiğinde, ortaya çıkan genişlik veya yüksekliğin bir tam
sayı olmadığı durumlar meydana gelebilir. Kullanıcı aracısı, bir
kodlayıcının asgari çözünürlüğüne uymak dışında,
scaleResolutionDownBy’dan elde edilen ölçeklenmiş genişlik
ve yüksekliğin
tam sayı kısmından
daha büyük video GÖNDERMEMELİDİR. Ölçeklenmiş genişlik veya
yüksekliğin tam sayı kısmının sıfır olması durumunda neyin gönderileceği
uygulamaya bağlıdır.
MediaStreamTrack’lerin gerçek kodlanması ve iletimi
RTCRtpSender olarak adlandırılan nesneler aracılığıyla
yönetilir. Benzer şekilde, MediaStreamTrack’lerin alınması
ve kod çözümü RTCRtpReceiver olarak adlandırılan nesneler
aracılığıyla yönetilir. Her RTCRtpSender en fazla bir izle
ilişkilidir ve alınacak her iz tam olarak bir
RTCRtpReceiver ile ilişkilidir.
Her bir MediaStreamTrack’in kodlanması ve iletimi,
özelliklerinin (video izleri için width,
height ve frameRate; ses izleri için
sampleSize, sampleRate ve
channelCount) makul bir ölçüde uzak tarafta oluşturulan iz
tarafından korunacak şekilde YAPILMALIDIR. Bunun geçerli
olmadığı durumlar vardır; örneğin her iki uçta ya da ağda kaynak
kısıtları olabilir veya uygulamanın farklı davranmasını talimatlandıran
RTCRtpSender ayarları uygulanmış olabilir.
Bir RTCPeerConnection nesnesi, eşleştirilmiş göndericileri
ve alıcıları bazı paylaşılan durumlarla temsil eden bir
RTCRtpTransceiver kümesi içerir. Bu küme,
RTCPeerConnection nesnesi oluşturulduğunda boş küme olarak
başlatılır. RTCRtpSender’lar ve
RTCRtpReceiver’lar her zaman bir
RTCRtpTransceiver ile aynı anda oluşturulur ve yaşam
süreleri boyunca ona bağlı kalırlar. RTCRtpTransceiver’lar,
uygulama addTrack() yöntemi aracılığıyla bir
MediaStreamTrack’i bir RTCPeerConnection’a
bağladığında örtük olarak ya da uygulama
addTransceiver yöntemini kullandığında açıkça oluşturulur.
Ayrıca, yeni bir medya tanımı içeren bir uzak tanım uygulandığında da
oluşturulurlar. Ek olarak, uzak uç noktanın gönderilecek medyası
olduğunu belirten bir uzak tanım uygulandığında, ilgili
MediaStreamTrack ve RTCRtpReceiver,
track olayı aracılığıyla uygulamaya sunulur.
Bir RTCRtpTransceiver’ın başka bir uç nokta ile medya
gönderebilmesi ve/veya alabilmesi için, her iki uç noktanın da aynı
medya tanımıyla ilişkilendirilmiş bir
RTCRtpTransceiver nesnesine sahip olacak şekilde SDP ile
müzakere edilmesi gerekir.
Bir teklif oluşturulurken, o uçtaki tüm transceiver’ları kapsayacak kadar medya tanımı üretilecektir. Bu teklif yerel tanım olarak ayarlandığında, ilişkilendirilmemiş tüm transceiver’lar teklifteki medya tanımlarıyla ilişkilendirilir.
Bir teklif uzak tanım olarak ayarlandığında, içindeki ve henüz bir
transceiver ile ilişkilendirilmemiş tüm medya tanımları yeni veya mevcut
bir transceiver ile ilişkilendirilir. Bu durumda yalnızca
addTrack() yöntemiyle oluşturulmuş ve
ilişkilendirilmemiş transceiver’lar ilişkilendirilebilir. Buna karşılık,
addTransceiver() yöntemiyle oluşturulmuş ve
ilişkilendirilmemiş transceiver’lar, uzak teklifte medya tanımları
mevcut olsa bile ilişkilendirilmez. Bunun yerine, yeterli sayıda
addTrack() ile oluşturulmuş transceiver yoksa,
yeni transceiver’lar oluşturulur ve ilişkilendirilir. Bu durum,
addTrack() ile oluşturulan ve
addTransceiver() ile oluşturulan
transceiver’ları, özniteliklerine bakılarak gözlemlenemeyen kritik bir
şekilde birbirinden ayırır.
Bir yanıt oluşturulurken, yalnızca teklifte mevcut olan medya tanımları
yanıtta listelenebilir. Bunun bir sonucu olarak, uzak teklif
ayarlanırken ilişkilendirilmemiş olan tüm transceiver’lar, yerel yanıt
ayarlandıktan sonra da ilişkilendirilmemiş olarak kalır. Bu durum,
yanıtlayanın bir takip teklifi oluşturmasıyla, başka bir teklif/yanıt
değişimini başlatmasıyla ya da addTrack() ile
oluşturulmuş transceiver’lar kullanılıyorsa, ilk değişimde yeterli
sayıda medya tanımının sunulduğundan emin olunmasıyla giderilebilir.
5.2 RTCRtpSender Arayüzü
RTCRtpSender arayüzü, bir uygulamanın belirli bir
MediaStreamTrack’in nasıl kodlandığını ve uzak bir eşe
nasıl iletildiğini denetlemesine olanak tanır. Bir
RTCRtpSender nesnesinde
setParameters çağrıldığında, kodlama uygun şekilde
değiştirilir.
Bir MediaStreamTrack, track, bir dize,
kind, MediaStream nesnelerinden oluşan bir
liste, streams ve isteğe bağlı olarak
RTCRtpEncodingParameters nesnelerinden oluşan bir liste,
sendEncodings ile bir RTCRtpSender oluşturmak için
aşağıdaki adımları çalıştır:
- Yeni bir
RTCRtpSendernesnesi olsun. -
sender’ın [[SenderTrack]] dahili yuvasıtrackile başlatılsın. -
sender’ın [[SenderTransport]] dahili yuvasınullile başlatılsın. -
sender’ın [[LastStableStateSenderTransport]] dahili yuvasınullile başlatılsın. -
sender’ın [[Dtmf]] dahili yuvasınullile başlatılsın. -
kind"audio"ise bir RTCDTMFSenderdtmfoluştur ve [[Dtmf]] dahili yuvasınıdtmfolarak ayarla. -
sender’ın [[AssociatedMediaStreamIds]] dahili yuvası olsun; bu yuva, bu göndericinin ilişkilendirileceğiMediaStreamnesnelerinin Kimliklerinin bir listesini temsil eder. [[AssociatedMediaStreamIds]] yuvası,sender’ın [RFC9429]’da açıklandığı şekilde SDP’de temsil edilmesi için kullanılır (bölüm 5.2.1.). -
sender.[[AssociatedMediaStreamIds]]’i boş bir küme olarak ayarla. -
streamsiçindeki herstreamiçin, zaten yoksastream.id’yi[[AssociatedMediaStreamIds]]’e ekle. -
sender’ın [[SendEncodings]] dahili yuvası olsun; bu yuva,RTCRtpEncodingParameterssözlüklerinin bir listesini temsil eder. -
sendEncodingsbu algoritmaya girdi olarak verilmişse ve boş değilse, [[SendEncodings]] yuvasınısendEncodingsolarak ayarla. Aksi halde, tek bir yeniRTCRtpEncodingParameterssözlüğü içeren bir listeye ayarla vekind"video"ise bu sözlüğe değeri1.0olan birscaleResolutionDownByüyesi ekle.
RTCRtpEncodingParameters sözlükleri, varsayılan olarak
değeri true olan active üyeleri içerir.
- Aday Düzeltme 13:Geri alma, sRD(simulcastOffer) tarafından ezilen RID’siz kodlamayı geri yükler. (PR #2797)
-
sender’ın [[SendCodecs]] dahili yuvası olsun; bu yuvaRTCRtpCodecParameterssözlüklerinin bir listesini temsil eder ve boş bir liste ile başlatılır. -
sender’ın [[LastReturnedParameters]] dahili yuvası olsun; bu yuvagetParametersvesetParametersişlemlerini eşleştirmek için kullanılacaktır. sender’ı döndür.
sender’ın
[[LastStableRidlessSendEncodings]] dahili
yuvası null ile başlatılsın.
WebIDL[Exposed=Window]
interface RTCRtpSender {
readonly attribute MediaStreamTrack? track;
readonly attribute RTCDtlsTransport? transport;
static RTCRtpCapabilities? getCapabilities(DOMString kind);
Promise<undefined> setParameters(RTCRtpSendParameters parameters,
optional RTCSetParameterOptions setParameterOptions = {});
RTCRtpSendParameters getParameters();
Promise<undefined> replaceTrack(MediaStreamTrack? withTrack);
undefined setStreams(MediaStream... streams);
Promise<RTCStatsReport> getStats();
};
Öznitelikler
track, MediaStreamTrack türünde, salt okunur,
null olabilir
track özniteliği, bu RTCRtpSender nesnesiyle
ilişkilendirilmiş olan izdir. track sonlandırılmışsa ya da
iz çıktısı devre dışıysa; yani iz devre dışı bırakılmış ve/veya sessize
alınmışsa, RTCRtpSender MUST siyah kareler (video)
göndermeli ve MUST NOT (ses) göndermemelidir. Video durumunda,
RTCRtpSender SHOULD saniyede bir siyah kare
göndermelidir. track null ise,
RTCRtpSender gönderim yapmaz. Getter çağrıldığında,
öznitelik MUST
[[SenderTrack]] yuvasının
değerini döndürmelidir.
transport türü RTCDtlsTransport, salt-okunur,
nullable
transport özniteliği, trackten gelen medyanın
RTP paketleri biçiminde gönderildiği taşıyıcıdır.
RTCDtlsTransport nesnesi oluşturulmadan önce,
transport özniteliği null olacaktır. Bundling
kullanıldığında, birden fazla RTCRtpSender nesnesi tek bir
transportu paylaşır ve tümü RTP ve RTCP’yi aynı taşıyıcı
üzerinden gönderir.
Getter çağrıldığında, öznitelik MUST
[[SenderTransport]] yuvasının
değerini döndürmelidir.
Yöntemler
getCapabilities · static
Statik RTCRtpSender.getCapabilities() yöntemi, herhangi bir kaynak, port veya başka bir
durum ayırmadan, verilen türde medya göndermek için kullanıcı
aracısının desteklediği yetenek türlerini keşfetmenin bir yolunu
sağlar.
getCapabilities yöntemi çağrıldığında, kullanıcı
aracısı MUST aşağıdaki adımları çalıştırmalıdır:
kind, yöntemin ilk argümanı olsun.-
kindne"video"ne de"audio"isenulldöndür. -
kindiçin uygulanmış gönderim codec’lerinin listesiyle başlatılmışcodecsüyesine vekindile gönderim için uygulanmış başlık uzantılarının listesiyle başlatılmışheaderExtensionsüyesine sahip yeni birRTCRtpCapabilitiessözlüğü döndür.
Verilen kind için uygulanmış gönderim codec’lerinin
listesi, kullanıcı aracısının verilen kind (video veya
audio) için medya gönderimini desteklediği codec’lerin en iyimser
görünümünü temsil eden RTCRtpCodec sözlüklerinden oluşan,
uygulamaya özgü bir listedir.
Verilen kind için gönderim amacıyla uygulanmış başlık
uzantılarının listesi, kullanıcı aracısının verilen
kind (video veya audio) için medya gönderimini desteklediği
başlık uzantılarının en iyimser görünümünü temsil eden
RTCRtpHeaderExtensionCapability sözlüklerinden oluşan,
uygulamaya özgü bir listedir.
Bu yetenekler cihaz hakkında genel olarak kalıcı, kökenler arası bilgiler sağlar ve bu nedenle uygulamanın parmak izi yüzeyini artırır. Gizliliğe duyarlı bağlamlarda, kullanıcı aracıları yalnızca yeteneklerin ortak bir alt kümesini raporlamak gibi azaltma önlemlerini MAY değerlendirebilir. !(Bu bir parmak izi vektörüdür.){width="15" height="21"}
setCodecPreferences() algoritmasını ve hangi girdilerde
InvalidModificationError fırlattığını etkiler ve ayrıca
gönderim için müzakere edilen codec’ler hakkında
createOffer() ve createAnswer()
tarafından açığa çıkarılan bilgilerle tutarlı olmalıdır; böylece
herhangi bir gizlilik azaltma önleminin etkili olması sağlanır.
setParameters
setParameters yöntemi, trackin nasıl
kodlandığını ve uzak bir eşe nasıl iletildiğini günceller.
setParameters yöntemi çağrıldığında, kullanıcı aracısı
MUST aşağıdaki adımları çalıştırmalıdır:
parameters, yöntemin ilk argümanı olsun.-
sender,setParametersçağrısının yapıldığıRTCRtpSendernesnesi olsun. -
transceiver,senderile ilişkiliRTCRtpTransceivernesnesi olsun (yanisender,transceiver.[[Sender]]dir). -
transceiver.[[Stopping]]trueise, yeni oluşturulmuş birInvalidStateErrorile reddedilmiş bir promise döndür. -
sender.[[LastReturnedParameters]]nullise, yeni oluşturulmuş birInvalidStateErrorile reddedilmiş bir promise döndür. -
Aşağıdaki setParameters doğrulama adımlarını çalıştırarak
parameters’ı doğrula: -
encodings,parameters.encodingsolsun. -
codecs,parameters.codecsolsun. - Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
- Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
- Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
-
N,sender.[[SendEncodings]]içinde depolananRTCRtpEncodingParameterssayısı olsun. -
Aşağıdaki koşullardan herhangi biri sağlanıyorsa, yeni oluşturulmuş
bir
InvalidModificationErrorile reddedilmiş bir promise döndür: -
encodings.length,N’den farklıdır. encodingsyeniden sıralanmıştır.-
parametersiçindeki herhangi bir parametre salt-okunur olarak işaretlenmiştir (RID gibi) vesender.[[LastReturnedParameters]]içindeki karşılık gelen parametre değerinden farklı bir değere sahiptir. BununtransactionIdiçin de geçerli olduğunu unutmayın. - Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
-
Transceiver türü
"audio"ise, içeren tümencodings’lerdenscaleResolutionDownByvemaxFramerateüyelerini kaldır. -
Transceiver türü
"video"ise,encodingsiçindeki vescaleResolutionDownByüyesi içermeyen her encoding için değeri1.0olan birscaleResolutionDownByüyesi ekle. -
Transceiver türü
"video"ise veencodingsiçindeki herhangi bir encoding, değeri1.0’dan küçük olan birscaleResolutionDownByüyesi içeriyorsa, yeni oluşturulmuş birRangeErrorile reddedilmiş bir promise döndür. -
encodingsiçindeki her encoding’in değeri0.0’a eşit veya daha büyük olan birmaxFramerateüyesine sahip olduğunu doğrula.maxFrameratedeğerlerinden biri bu gereksinimi karşılamıyorsa, yeni oluşturulmuş birRangeErrorile reddedilmiş bir promise döndür. - Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
p, yeni bir promise olsun.-
Paralel olarak, medya yığınını
parameters’ı kullanaraksender.[[SenderTrack]]’i iletecek şekilde yapılandır. -
Medya yığını
parametersile başarıyla yapılandırılırsa, aşağıdaki adımları çalıştıracak bir görev sıraya al: -
sender.[[LastReturnedParameters]]’ınullolarak ayarla. -
sender.[[SendEncodings]]’iparameters.encodingsolarak ayarla. p’yiundefinedile çöz.- Medya yığını yapılandırılırken herhangi bir hata oluşursa, aşağıdaki adımları çalıştıracak bir görev sıraya al:
-
Hata, donanım kaynaklarının kullanılabilir olmamasından
kaynaklandıysa,
errorDetaildeğeri "hardware-encoder-not-available" olarak ayarlanmış yeni oluşturulmuş birRTCErrorilep’yi reddet ve bu adımları sonlandır. -
Hata, bir donanım kodlayıcının
parameters’ı desteklememesinden kaynaklandıysa,errorDetaildeğeri "hardware-encoder-error" olarak ayarlanmış yeni oluşturulmuş birRTCErrorilep’yi reddet ve bu adımları sonlandır. -
Diğer tüm hatalar için, yeni oluşturulmuş bir
OperationErrorilep’yi reddet. p’yi döndür.
choosableCodecs, codecs olsun.
choosableCodecs boş bir listeyse,
choosableCodecs’u transceiver.[[PreferredCodecs]]
olarak ayarla ve uygulanmış gönderim codec’leri listesinde yer almayan
codec’leri hariç tut.
choosableCodecs hâlâ boş bir listeyse,
choosableCodecs’u transceiver türü için uygulanmış
gönderim codec’lerinin listesi olarak ayarla.
encodings içindeki herhangi bir encoding,
ignoreLevels true olarak ayarlanmış codec
sözlüğü eşleştirme algoritması kullanıldığında
choosableCodecs içinde bulunmayan bir codec içerir.
Kullanıcı aracı herhangi bir encoding için codec ayarlamayı veya
farklı encoding’lerde farklı codec değerlerini karıştırmayı
desteklemiyorsa, yeni oluşturulmuş bir OperationError ile
reddedilmiş bir promise döndür.
setParameters, SDP yeniden müzakeresine neden olmaz ve
yalnızca Offer/Answer tarafından müzakere edilen zarf içinde medya
yığınının ne gönderdiğini veya aldığını değiştirmek için kullanılabilir.
RTCRtpSendParameters sözlüğündeki öznitelikler bunu mümkün
kılmayacak şekilde tasarlanmıştır; bu nedenle değiştirilemeyen
cname gibi öznitelikler salt-okunurdur. Bit hızı gibi diğer
unsurlar ise maxBitrate gibi sınırlar kullanılarak
denetlenir; burada kullanıcı aracısının,
maxBitrate tarafından belirtilen azami bit hızını
aşmamasını sağlarken aynı zamanda SDP gibi diğer yerlerde belirtilen bit
hızı kısıtlarını da karşılaması gerekir.
getParameters
getParameters() yöntemi, trackin
uzak bir RTCRtpReceiver’a nasıl kodlandığı ve iletildiğine
ilişkin RTCRtpSender nesnesinin geçerli parametrelerini
döndürür.
getParameters çağrıldığında, kullanıcı aracısı
MUST aşağıdaki adımları çalıştırmalıdır:
-
sender, getter’ın çağrıldığıRTCRtpSendernesnesi olsun. -
sender.[[LastReturnedParameters]]nulldeğilse,sender.[[LastReturnedParameters]]’ı döndür ve bu adımları sonlandır. -
result, aşağıdaki şekilde oluşturulmuş yeni birRTCRtpSendParameterssözlüğü olsun:
-
transactionId, yeni ve benzersiz bir tanımlayıcıya ayarlanır. -
encodings,[[SendEncodings]]dahili yuvasının değerine ayarlanır. -
headerExtensionsdizisi, gönderim için müzakere edilmiş başlık uzantılarına göre doldurulur. -
codecs,[[SendCodecs]]dahili yuvasının değerine ayarlanır. -
rtcp.cname, ilişkiliRTCPeerConnection’ın CNAME’ine ayarlanır.rtcp.reducedSize, gönderim için reduced-size RTCP müzakere edildiysetrue, aksi haldefalseolarak ayarlanır.
-
sender.[[LastReturnedParameters]]’ıresultolarak ayarla. -
sender.[[LastReturnedParameters]]’ınullolarak ayarlayan bir görev sıraya al. result’ı döndür.
getParameters, aşağıdaki şekilde parametreleri değiştirmek
için setParameters ile birlikte kullanılabilir:
async function updateParameters() {
try {
const params = sender.getParameters();
// ... parametrelerde değişiklikler yap
params.encodings[0].active = false;
await sender.setParameters(params);
} catch (err) {
console.error(err);
}
}
setParameters’ın tamamlanmış bir çağrısından sonra,
getParameters’a yapılan sonraki çağrılar değiştirilmiş
parametreler kümesini döndürecektir.
replaceTrack
RTCRtpSender’ın mevcut
track’ini sağlanan başka bir iz ile (ya da
null bir iz ile) değiştirmeye çalışır.
replaceTrack yöntemi çağrıldığında, kullanıcı aracısı
MUST aşağıdaki adımları çalıştırmalıdır:
-
sender,replaceTrack’in çağrıldığıRTCRtpSendernesnesi olsun. -
transceiver,senderile ilişkiliRTCRtpTransceivernesnesi olsun. -
connection,senderile ilişkiliRTCPeerConnectionnesnesi olsun. withTrack, bu yöntemin argümanı olsun.-
withTracknulldeğilse vewithTrack.kind,transceiver’ın transceiver türünden farklıysa, yeni oluşturulmuş birTypeErrorile reddedilmiş bir promise döndür. -
Aşağıdaki adımların
connection’ın işlemler zincirine eklenmesinin sonucunu döndür: -
transceiver.[[Stopping]]trueise, yeni oluşturulmuş birInvalidStateErrorile reddedilmiş bir promise döndür. p, yeni bir promise olsun.-
sending,transceiver.[[CurrentDirection]]"sendrecv" veya "sendonly" isetrue, aksi haldefalseolsun. - Aşağıdaki adımları paralel olarak çalıştır:
-
sendingtrueise vewithTracknullise, göndericinin gönderimi durdurmasını sağla. -
sendingtrueise vewithTracknulldeğilse,withTrack’in gönderici tarafından, göndericinin halihazırda müzakere edilmiş zarfını ihlal etmeden derhal gönderilip gönderilemeyeceğini belirle; gönderilemiyorsa: -
Geçerli realm’in global nesnesi
globalolarak verilerek ağ görev kaynağı üzerinde küresel bir görev sıraya al vep’yi yeni oluşturulmuş birInvalidModificationErrorile reddet. - Bu adımları sonlandır.
-
sendingtrueise vewithTracknulldeğilse, göndericinin mevcut izi yerinewithTrack’i sorunsuz bir şekilde iletmeye geçmesini sağla. - Aşağıdaki adımları çalıştıran bir görev sıraya al:
-
connection.[[IsClosed]]trueise, bu adımları sonlandır. -
sender.[[SenderTrack]]’iwithTrackolarak ayarla. -
Geçerli realm’in global nesnesi
globalolarak verilerek ağ görev kaynağı üzerinde küresel bir görev sıraya al vep’yiundefinedile çöz. p’yi döndür.
- [RFC6236]’da açıklandığı üzere, bir çözünürlüğün müzakere edilmiş imageattr sınırlarının dışındaki bir değere değiştirilmesi.
- Bir kare hızının, codec için blok hızının aşılmasına neden olan bir değere değiştirilmesi.
- Ham ve önceden kodlanmış formatlar arasında farklılık gösteren bir video izi.
- Farklı sayıda kanala sahip bir ses izi.
- Kodlama da yapan kaynaklar (genellikle donanım kodlayıcıları) müzakere edilmiş codec’i üretemeyebilir; benzer şekilde, yazılım kaynakları bir kodlama kaynağı için müzakere edilmiş codec’i uygulamamış olabilir.
setStreams
MediaStream’leri
ayarlar.
setStreams yöntemi çağrıldığında, kullanıcı aracısı
MUST aşağıdaki adımları çalıştırmalıdır:
-
sender, bu yöntemin çağrıldığıRTCRtpSendernesnesi olsun. -
connection, bu yöntemin çağrıldığıRTCPeerConnectionnesnesi olsun. -
connection.[[IsClosed]]trueise, birInvalidStateErrorfırlat. -
streams, yöntemin argümanlarından oluşturulmuş birMediaStreamnesneleri listesi olsun; yöntem argümansız çağrıldıysa boş bir liste olsun. -
sender.[[AssociatedMediaStreamIds]]’i boş bir küme olarak ayarla. -
streamsiçindeki herstreamiçin,stream.iddaha önce eklenmemişse[[AssociatedMediaStreamIds]]’e ekle. -
connectioniçin müzakere-gerekli bayrağını güncelle.
getStats
getStats() yöntemi çağrıldığında, kullanıcı
aracısı MUST aşağıdaki adımları çalıştırmalıdır:
-
selector, yöntemin çağrıldığıRTCRtpSendernesnesi olsun. -
p, yeni bir promise olsun ve aşağıdaki adımları paralel olarak çalıştır: -
İstatistik seçimi algoritmasına göre
selectortarafından belirtilen istatistikleri topla. -
Geçerli realm’in global nesnesi
globalolarak verilerek ağ görev kaynağı üzerinde küresel bir görev sıraya al ve toplanan istatistikleri içeren ortaya çıkanRTCStatsReportnesnesi ilep’yi çöz. p’yi döndür.
5.2.1 RTCRtpParameters Dictionary
WebIDLdictionary RTCRtpParameters {
required sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
required RTCRtcpParameters rtcp;
required sequence<RTCRtpCodecParameters> codecs;
};
RTCRtpParameters Sözlüğü Üyeleri
headerExtensions ·
sequence<RTCRtpHeaderExtensionParameters> · zorunlu
RTP başlık uzantıları için parametreleri içeren bir dizi. Salt okunur parametre.
rtcp · RTCRtcpParameters · zorunlu
RTCP için kullanılan parametreler. Salt okunur parametre.
codecs ·
sequence<RTCRtpCodecParameters> · zorunlu
Bir RTCRtpSender nesnesinin seçeceği medya
kodeklerini içeren bir dizi ile RTX, RED ve FEC mekanizmalarına
ilişkin girdiler. RTX üzerinden yeniden iletimin etkin olduğu her
bir medya kodeğine karşılık, codecs içinde
audio/rtx veya video/rtx üzerinden
yeniden iletimi belirten bir mimeType özniteliğine ve
(apt ve rtx-time parametrelerini
sağlayan) bir sdpFmtpLine özniteliğine sahip bir
girdi bulunur. Salt okunur parametre.
5.2.2 RTCRtpSendParameters Sözlüğü
WebIDLdictionary RTCRtpSendParameters : RTCRtpParameters {
required DOMString transactionId;
required sequence<RTCRtpEncodingParameters> encodings;
};
RTCRtpSendParameters Sözlüğü Üyeleri
transactionId · DOMString · zorunlu
Uygulanan son parametre kümesi için benzersiz bir tanımlayıcı.
setParameters çağrısının yalnızca önceki bir
getParameters çağrısına dayanarak yapılabilmesini ve
arada herhangi bir değişiklik olmamasını sağlar. Salt okunur
parametre.
encodings ·
sequence<RTCRtpEncodingParameters> · zorunlu
Medyanın RTP kodlamaları için parametreleri içeren bir dizi.
5.2.3 RTCRtpReceiveParameters Sözlüğü
WebIDLdictionary RTCRtpReceiveParameters : RTCRtpParameters {
};
5.2.4 RTCRtpCodingParameters Sözlüğü
WebIDLdictionary RTCRtpCodingParameters {
DOMString rid;
};
RTCRtpCodingParameters Sözlüğü Üyeleri
rid · DOMString
Ayarlanmışsa, bu RTP kodlaması [RFC9429] (bölüm 5.2.1.) tarafından tanımlandığı şekilde RID başlık uzantısı ile
gönderilir. RID, setParameters aracılığıyla
değiştirilemez. Yalnızca gönderim tarafında
addTransceiver içinde ayarlanabilir veya
değiştirilebilir. Salt okunur parametre.
5.2.5 RTCRtpEncodingParameters Sözlüğü
WebIDLdictionary RTCRtpEncodingParameters : RTCRtpCodingParameters {
boolean active = true;
RTCRtpCodec codec;
unsigned long maxBitrate;
double maxFramerate;
double scaleResolutionDownBy;
};
RTCRtpEncodingParameters Sözlüğü Üyeleri
active · boolean · varsayılan değer true
Bu kodlamanın etkin olarak gönderildiğini belirtir.
false olarak ayarlanması, bu kodlamanın artık
gönderilmemesine neden olur. true olarak ayarlanması,
bu kodlamanın gönderilmesine neden olur. Değerin
false yapılması SSRC’nin kaldırılmasına yol
açmadığından, bir RTCP BYE gönderilmez.
codec · RTCRtpCodecBu kodlamanın RTP akışı için hangi kodeğin kullanılacağını seçen isteğe bağlı bir değerdir. Yoksa, kullanıcı aracısı gönderim için müzakere edilen herhangi bir kodeği seçebilir.
codec ayarlandığında ve
[[SendCodecs]] müzakere
edilmişse, kullanıcı aracısı, kodek sözlüğü eşleştirme
algoritmasına göre ignoreLevels değeri
true olacak şekilde, gönderim için
codec ile eşleşen ilk
[[SendCodecs]] öğesini
KULLANMALIDIR.
maxBitrate · unsigned long
Mevcut olduğunda, bu kodlamayı göndermek için kullanılabilecek
azami bit hızını belirtir. Kullanıcı aracısı,
maxBitrate değeri aşılmadığı sürece bant genişliğini
kodlamalar arasında serbestçe dağıtabilir. Kodlama, burada
belirtilen azami değerin altındaki diğer sınırlamalarla (taşıma
başına veya oturum başına bant genişliği sınırları gibi) daha da
kısıtlanabilir. maxBitrate, [RFC3890] Bölüm 6.2.2’de
tanımlanan, IP veya TCP ya da UDP gibi diğer taşıma katmanlarını
hesaba katmadan gereken azami bant genişliği olan Taşıma Bağımsız
Uygulamaya Özgü Azami (TIAS) bant genişliği ile aynı şekilde
hesaplanır. maxBitrate birimi saniye başına bit’tir.
maxFramerate · double
Bu üye yalnızca göndericinin kind değeri
"video" ise mevcut olabilir. Mevcut olduğunda, bu
kodlamayı göndermek için kullanılabilecek saniye başına kare
cinsinden azami kare hızını belirtir. Kullanıcı aracısı,
maxFramerate değeri aşılmadığı sürece bant genişliğini
kodlamalar arasında serbestçe dağıtabilir.
setParameters() ile değiştirildiğinde,
yeni kare hızı geçerli görüntü tamamlandıktan sonra yürürlüğe girer;
bu nedenle azami kare hızını sıfıra ayarlamak, videonun bir sonraki
karede donmasına neden olur.
scaleResolutionDownBy · double
Bu üye yalnızca göndericinin kind değeri
"video" ise mevcuttur. Videonun çözünürlüğü,
gönderilmeden önce her boyutta verilen değer kadar küçültülür.
Örneğin değer 2.0 ise, video her boyutta 2 kat küçültülür ve sonuç
olarak alan olarak dörtte bir boyutunda bir video gönderilir. Değer
1.0 ise, video etkilenmez. Değer 1.0’a eşit veya daha büyük
olmalıdır. Varsayılan olarak ölçekleme, daha küçükten daha yüksek
çözünürlüklere doğru bir sıralama üretmek üzere iki katlık bir
çarpanla ters sırada uygulanır; örneğin 4:2:1. Yalnızca tek bir
katman varsa, gönderici varsayılan olarak herhangi bir ölçekleme
uygulamaz (yani scaleResolutionDownBy 1.0 olur).
5.2.6 RTCRtcpParameters Sözlüğü
WebIDLdictionary RTCRtcpParameters {
DOMString cname;
boolean reducedSize;
};
RTCRtcpParameters Sözlüğü Üyeleri
cname · DOMStringRTCP tarafından kullanılan Kanonik Ad (CNAME) (örneğin SDES iletilerinde). Salt okunur parametre.
reducedSize · booleanKüçültülmüş boyutlu RTCP’nin [RFC5506] yapılandırılıp yapılandırılmadığını (true ise) ya da [RFC3550]’da belirtildiği şekilde bileşik RTCP’nin kullanılıp kullanılmadığını (false ise) belirtir. Salt okunur parametre.
5.2.7 RTCRtpHeaderExtensionParameters Sözlüğü
WebIDLdictionary RTCRtpHeaderExtensionParameters {
required DOMString uri;
required unsigned short id;
boolean encrypted = false;
};
RTCRtpHeaderExtensionParameters Sözlüğü Üyeleri
uri · DOMString · zorunlu[RFC5285]’te tanımlandığı şekilde RTP başlık uzantısının URI’si. Salt okunur parametre.
id · unsigned short · zorunlu
Başlık uzantısını tanımlamak için RTP paketine yerleştirilen değer. Salt okunur parametre.
encrypted · booleanBaşlık uzantısının şifreli olup olmadığını belirtir. Salt okunur parametre.
RTCRtpHeaderExtensionParameters sözlüğü, bir
uygulamanın bir başlık uzantısının bir
RTCRtpSender veya RTCRtpReceiver içinde
kullanım için yapılandırılıp yapılandırılmadığını belirlemesini
sağlar. Bir RTCRtpTransceiver olan
transceiver için, bir uygulama SDP’yi ayrıştırmaya
gerek kalmadan bir başlık uzantısının "direction" parametresini
([RFC5285] Bölüm 5’te tanımlanmıştır) aşağıdaki şekilde
belirleyebilir:
-
sendonly: Başlık uzantısı yalnızca
transceiver.sender.getParameters().headerExtensionsiçinde yer alır. -
recvonly: Başlık uzantısı yalnızca
transceiver.receiver.getParameters().headerExtensionsiçinde yer alır. -
sendrecv: Başlık uzantısı hem
transceiver.sender.getParameters().headerExtensionshem detransceiver.receiver.getParameters().headerExtensionsiçinde yer alır. -
inactive: Başlık uzantısı ne
transceiver.sender.getParameters().headerExtensionsne detransceiver.receiver.getParameters().headerExtensionsiçinde yer alır.
5.2.8 RTCRtpCodec Sözlüğü
WebIDLdictionary RTCRtpCodec {
required DOMString mimeType;
required unsigned long clockRate;
unsigned short channels;
DOMString sdpFmtpLine;
};
RTCRtpCodec Sözlüğü Üyeleri
RTCRtpCodec sözlüğü · kodek nesneleri hakkında bilgi
sağlar.
mimeType · DOMString · zorunlu
Kodeğin MIME medya türü/alttürü. Geçerli medya türleri ve alttürleri [IANA-RTP-2]’de listelenmiştir.
clockRate · unsigned long · zorunlu
Hertz cinsinden ifade edilen kodek saat hızı.
channels · unsigned shortMevcutsa, azami kanal sayısını belirtir (mono=1, stereo=2).
sdpFmtpLine · DOMString
Kodeğe karşılık gelen SDP’deki a=fmtp satırından
alınan ve mevcutsa, [RFC9429] (bölüm 5.8.) tarafından tanımlanan "formata özgü parametreler" alanı.
5.2.9 RTCRtpCodecParameters Sözlüğü
WebIDLdictionary RTCRtpCodecParameters : RTCRtpCodec {
required octet payloadType;
};
RTCRtpCodecParameters sözlüğü, müzakere edilmiş kodekler
hakkında bilgi sağlar. RTCRtpCodec’ten devralınan alanların
tümü MUST salt okunur parametreler olmalıdır.
Bir RTCRtpSender için
sdpFmtpLine parametreleri
[[CurrentRemoteDescription]]’dan gelir; bir RTCRtpReceiver için ise yerel tanımdan
gelir (bu, null değilse
[[PendingLocalDescription]], aksi halde
[[CurrentLocalDescription]]’dır).
RTCRtpCodecParameters Sözlüğü Üyeleri
payloadType · octet · zorunlu
Bu kodeği tanımlamak için kullanılan RTP yük türü. Salt okunur parametre.
5.2.10 RTCRtpCapabilities Sözlüğü
WebIDLdictionary RTCRtpCapabilities {
required sequence<RTCRtpCodec> codecs;
required sequence<RTCRtpHeaderExtensionCapability> headerExtensions;
};
RTCRtpCapabilities Sözlüğü Üyeleri
codecs · sequence<RTCRtpCodec> ·
zorunlu
RTX, RED ve FEC mekanizmalarına ilişkin girdilerle birlikte desteklenen medya kodekleri. Yalnızca oluşturulan bir SDP teklifinde farklı yük türlerini kullanacak kombinasyonlar sağlanmalıdır. Örneğin:
- İki farklı packetization-mode değerini destekleyen iki H.264/AVC kodeği.
- Farklı saat hızlarına sahip iki CN kodeği.
RTX üzerinden yeniden iletim için codecs içinde yalnızca
tek bir girdi BULUNMALIDIR ve bu girdide
sdpFmtpLine mevcut olmamalıdır.
headerExtensions türü
sequence<RTCRtpHeaderExtensionCapability>, zorunlu
5.2.11 RTCRtpHeaderExtensionCapability Sözlüğü
WebIDLdictionary RTCRtpHeaderExtensionCapability {
required DOMString uri;
};
RTCRtpHeaderExtensionCapability Sözlüğü Üyeleri
uri · DOMString · zorunlu[RFC5285]’te tanımlandığı şekilde RTP başlık uzantısının URI’si.
5.2.12 RTCSetParameterOptions Sözlüğü
WebIDLdictionary RTCSetParameterOptions {
};
RTCSetParameterOptions Sözlüğü Üyeleri
RTCSetParameterOptions, genişletilebilirliğe olanak tanımak için boş bir sözlük olarak tanımlanmıştır.