← WebRTC 1.0 Spesifikasyonu

RTP Medya API

W3C WebRTC 1.0 Spesifikasyonu — Türkçe Çeviri

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.

Bir 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.

WebRTC Çalışma Grubu, bu durumun daha karmaşık bir şekilde ele alınmasının gerekliliği ve zamanlaması konusunda uygulama geri bildirimi aramaktadır. Olası bazı tasarımlar GitHub issue 1283 içinde tartışılmıştı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:

  1. Yeni bir RTCRtpSender nesnesi olsun.
  2. sender’ın [[SenderTrack]] dahili yuvası track ile başlatılsın.
  3. sender’ın [[SenderTransport]] dahili yuvası null ile başlatılsın.
  4. sender’ın [[LastStableStateSenderTransport]] dahili yuvası null ile başlatılsın.
  5. sender’ın [[Dtmf]] dahili yuvası null ile başlatılsın.
  6. kind "audio" ise bir RTCDTMFSender dtmf oluştur ve [[Dtmf]] dahili yuvasını dtmf olarak ayarla.
  7. sender’ın [[AssociatedMediaStreamIds]] dahili yuvası olsun; bu yuva, bu göndericinin ilişkilendirileceği MediaStream nesnelerinin 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.).
  8. sender.[[AssociatedMediaStreamIds]]’i boş bir küme olarak ayarla.
  9. streams içindeki her stream için, zaten yoksa stream.id’yi [[AssociatedMediaStreamIds]]’e ekle.
  10. sender’ın [[SendEncodings]] dahili yuvası olsun; bu yuva, RTCRtpEncodingParameters sözlüklerinin bir listesini temsil eder.
  11. sendEncodings bu algoritmaya girdi olarak verilmişse ve boş değilse, [[SendEncodings]] yuvasını sendEncodings olarak ayarla. Aksi halde, tek bir yeni RTCRtpEncodingParameters sözlüğü içeren bir listeye ayarla ve kind "video" ise bu sözlüğe değeri 1.0 olan bir scaleResolutionDownBy üyesi ekle.
RTCRtpEncodingParameters sözlükleri, varsayılan olarak değeri true olan active üyeleri içerir.
  1. Aday Düzeltme 13:Geri alma, sRD(simulcastOffer) tarafından ezilen RID’siz kodlamayı geri yükler. (PR #2797)
  2. sender’ın [[LastStableRidlessSendEncodings]] dahili yuvası null ile başlatılsın.

  3. sender’ın [[SendCodecs]] dahili yuvası olsun; bu yuva RTCRtpCodecParameters sözlüklerinin bir listesini temsil eder ve boş bir liste ile başlatılır.
  4. sender’ın [[LastReturnedParameters]] dahili yuvası olsun; bu yuva getParameters ve setParameters işlemlerini eşleştirmek için kullanılacaktır.
  5. sender’ı döndür.
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:

  1. kind, yöntemin ilk argümanı olsun.
  2. kind ne "video" ne de "audio" ise null döndür.
  3. kind için uygulanmış gönderim codec’lerinin listesiyle başlatılmış codecs üyesine ve kind ile gönderim için uygulanmış başlık uzantılarının listesiyle başlatılmış headerExtensions üyesine sahip yeni bir RTCRtpCapabilities sö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"}

Döndürülen codec yetenekleri 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:

  1. parameters, yöntemin ilk argümanı olsun.
  2. sender, setParameters çağrısının yapıldığı RTCRtpSender nesnesi olsun.
  3. transceiver, sender ile ilişkili RTCRtpTransceiver nesnesi olsun (yani sender, transceiver.[[Sender]]dir).
  4. transceiver.[[Stopping]] true ise, yeni oluşturulmuş bir InvalidStateError ile reddedilmiş bir promise döndür.
  5. sender.[[LastReturnedParameters]] null ise, yeni oluşturulmuş bir InvalidStateError ile reddedilmiş bir promise döndür.
  6. Aşağıdaki setParameters doğrulama adımlarını çalıştırarak parameters’ı doğrula:
  7. encodings, parameters.encodings olsun.
  8. codecs, parameters.codecs olsun.
  9. Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
  10. choosableCodecs, codecs olsun.

  11. Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
  12. choosableCodecs boş bir listeyse, choosableCodecs’u transceiver.[[PreferredCodecs]] olarak ayarla ve uygulanmış gönderim codec’leri listesinde yer almayan codec’leri hariç tut.

  13. Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
  14. choosableCodecs hâlâ boş bir listeyse, choosableCodecs’u transceiver türü için uygulanmış gönderim codec’lerinin listesi olarak ayarla.

  15. N, sender.[[SendEncodings]] içinde depolanan RTCRtpEncodingParameters sayısı olsun.
  16. Aşağıdaki koşullardan herhangi biri sağlanıyorsa, yeni oluşturulmuş bir InvalidModificationError ile reddedilmiş bir promise döndür:
    • encodings.length, N’den farklıdır.
    • encodings yeniden sıralanmıştır.
    • parameters içindeki herhangi bir parametre salt-okunur olarak işaretlenmiştir (RID gibi) ve sender.[[LastReturnedParameters]] içindeki karşılık gelen parametre değerinden farklı bir değere sahiptir. Bunun transactionId için de geçerli olduğunu unutmayın.
    • Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
    • 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.

  17. Transceiver türü "audio" ise, içeren tüm encodings’lerden scaleResolutionDownBy ve maxFramerate üyelerini kaldır.
  18. Transceiver türü "video" ise, encodings içindeki ve scaleResolutionDownBy üyesi içermeyen her encoding için değeri 1.0 olan bir scaleResolutionDownBy üyesi ekle.
  19. Transceiver türü "video" ise ve encodings içindeki herhangi bir encoding, değeri 1.0’dan küçük olan bir scaleResolutionDownBy üyesi içeriyorsa, yeni oluşturulmuş bir RangeError ile reddedilmiş bir promise döndür.
  20. encodings içindeki her encoding’in değeri 0.0’a eşit veya daha büyük olan bir maxFramerate üyesine sahip olduğunu doğrula. maxFramerate değerlerinden biri bu gereksinimi karşılamıyorsa, yeni oluşturulmuş bir RangeError ile reddedilmiş bir promise döndür.
  21. Candidate Addition 49:Add codec to RTCRtpEncodingParameters (PR #2985)
  22. 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.

  23. p, yeni bir promise olsun.
  24. Paralel olarak, medya yığınını parameters’ı kullanarak sender.[[SenderTrack]]’i iletecek şekilde yapılandır.
  25. Medya yığını parameters ile başarıyla yapılandırılırsa, aşağıdaki adımları çalıştıracak bir görev sıraya al:
  26. sender.[[LastReturnedParameters]]’ı null olarak ayarla.
  27. sender.[[SendEncodings]]’i parameters.encodings olarak ayarla.
  28. p’yi undefined ile çöz.
  29. 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:
  30. Hata, donanım kaynaklarının kullanılabilir olmamasından kaynaklandıysa, errorDetail değeri "hardware-encoder-not-available" olarak ayarlanmış yeni oluşturulmuş bir RTCError ile p’yi reddet ve bu adımları sonlandır.
  31. Hata, bir donanım kodlayıcının parameters’ı desteklememesinden kaynaklandıysa, errorDetail değeri "hardware-encoder-error" olarak ayarlanmış yeni oluşturulmuş bir RTCError ile p’yi reddet ve bu adımları sonlandır.
  32. Diğer tüm hatalar için, yeni oluşturulmuş bir OperationError ile p’yi reddet.
  33. p’yi 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:

  1. sender, getter’ın çağrıldığı RTCRtpSender nesnesi olsun.
  2. sender.[[LastReturnedParameters]] null değilse, sender.[[LastReturnedParameters]]’ı döndür ve bu adımları sonlandır.
  3. result, aşağıdaki şekilde oluşturulmuş yeni bir RTCRtpSendParameters sözlüğü olsun:
  • transactionId, yeni ve benzersiz bir tanımlayıcıya ayarlanır.
  • encodings, [[SendEncodings]] dahili yuvasının değerine ayarlanır.
  • headerExtensions dizisi, 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şkili RTCPeerConnection’ın CNAME’ine ayarlanır. rtcp.reducedSize, gönderim için reduced-size RTCP müzakere edildiyse true, aksi halde false olarak ayarlanır.
  1. sender.[[LastReturnedParameters]]’ı result olarak ayarla.
  2. sender.[[LastReturnedParameters]]’ı null olarak ayarlayan bir görev sıraya al.
  3. 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

Yeniden müzakere olmaksızın, 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:

  1. sender, replaceTrack’in çağrıldığı RTCRtpSender nesnesi olsun.
  2. transceiver, sender ile ilişkili RTCRtpTransceiver nesnesi olsun.
  3. connection, sender ile ilişkili RTCPeerConnection nesnesi olsun.
  4. withTrack, bu yöntemin argümanı olsun.
  5. withTrack null değilse ve withTrack.kind, transceiver’ın transceiver türünden farklıysa, yeni oluşturulmuş bir TypeError ile reddedilmiş bir promise döndür.
  6. Aşağıdaki adımların connection’ın işlemler zincirine eklenmesinin sonucunu döndür:
  7. transceiver.[[Stopping]] true ise, yeni oluşturulmuş bir InvalidStateError ile reddedilmiş bir promise döndür.
  8. p, yeni bir promise olsun.
  9. sending, transceiver.[[CurrentDirection]] "sendrecv" veya "sendonly" ise true, aksi halde false olsun.
  10. Aşağıdaki adımları paralel olarak çalıştır:
  11. sending true ise ve withTrack null ise, göndericinin gönderimi durdurmasını sağla.
  12. sending true ise ve withTrack null değ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:
  13. Geçerli realm’in global nesnesi global olarak verilerek ağ görev kaynağı üzerinde küresel bir görev sıraya al ve p’yi yeni oluşturulmuş bir InvalidModificationError ile reddet.
  14. Bu adımları sonlandır.
  15. sending true ise ve withTrack null değilse, göndericinin mevcut izi yerine withTrack’i sorunsuz bir şekilde iletmeye geçmesini sağla.
  16. Aşağıdaki adımları çalıştıran bir görev sıraya al:
  17. connection.[[IsClosed]] true ise, bu adımları sonlandır.
  18. sender.[[SenderTrack]]’i withTrack olarak ayarla.
  19. Geçerli realm’in global nesnesi global olarak verilerek ağ görev kaynağı üzerinde küresel bir görev sıraya al ve p’yi undefined ile çöz.
  20. p’yi döndür.
Boyutların ve/veya kare hızlarının değiştirilmesi müzakere gerektirmeyebilir. Müzakere gerektirebilecek durumlar şunları içerir:
  1. [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.
  2. 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.
  3. Ham ve önceden kodlanmış formatlar arasında farklılık gösteren bir video izi.
  4. Farklı sayıda kanala sahip bir ses izi.
  5. 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

Bu göndericinin iziyle ilişkilendirilecek 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:

  1. sender, bu yöntemin çağrıldığı RTCRtpSender nesnesi olsun.
  2. connection, bu yöntemin çağrıldığı RTCPeerConnection nesnesi olsun.
  3. connection.[[IsClosed]] true ise, bir InvalidStateError fırlat.
  4. streams, yöntemin argümanlarından oluşturulmuş bir MediaStream nesneleri listesi olsun; yöntem argümansız çağrıldıysa boş bir liste olsun.
  5. sender.[[AssociatedMediaStreamIds]]’i boş bir küme olarak ayarla.
  6. streams içindeki her stream için, stream.id daha önce eklenmemişse [[AssociatedMediaStreamIds]]’e ekle.
  7. connection için müzakere-gerekli bayrağını güncelle.

getStats

Yalnızca bu gönderici için istatistikleri toplar ve sonucu eşzamansız olarak raporlar.

getStats() yöntemi çağrıldığında, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:

  1. selector, yöntemin çağrıldığı RTCRtpSender nesnesi olsun.
  2. p, yeni bir promise olsun ve aşağıdaki adımları paralel olarak çalıştır:
  3. İstatistik seçimi algoritmasına göre selector tarafından belirtilen istatistikleri topla.
  4. Geçerli realm’in global nesnesi global olarak verilerek ağ görev kaynağı üzerinde küresel bir görev sıraya al ve toplanan istatistikleri içeren ortaya çıkan RTCStatsReport nesnesi ile p’yi çöz.
  5. 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 · RTCRtpCodec

Bu 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.

Bit hızının nasıl sağlandığı, medya ve kodlamaya bağlıdır. Video için, bir kare her zaman mümkün olan en hızlı şekilde gönderilir, ancak bit hızı yeterince düşene kadar kareler atılabilir. Bu nedenle, sıfır bit hızı bile bir kare gönderilmesine izin verir. Ses için ise, bit hızı seçilen kodlamanın gönderilmesi için yeterli bant genişliğini sağlamıyorsa oynatmayı durdurmak gerekebilir.
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 · DOMString

RTCP tarafından kullanılan Kanonik Ad (CNAME) (örneğin SDES iletilerinde). Salt okunur parametre.

reducedSize · boolean

Küçü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 · boolean

Baş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:
  1. sendonly: Başlık uzantısı yalnızca transceiver.sender.getParameters().headerExtensions içinde yer alır.
  2. recvonly: Başlık uzantısı yalnızca transceiver.receiver.getParameters().headerExtensions içinde yer alır.
  3. sendrecv: Başlık uzantısı hem transceiver.sender.getParameters().headerExtensions hem de transceiver.receiver.getParameters().headerExtensions içinde yer alır.
  4. inactive: Başlık uzantısı ne transceiver.sender.getParameters().headerExtensions ne de transceiver.receiver.getParameters().headerExtensions iç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 short

Mevcutsa, 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:

  1. İki farklı packetization-mode değerini destekleyen iki H.264/AVC kodeği.
  2. 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

Desteklenen RTP başlık uzantıları.

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.