← WebRTC 1.0 Spesifikasyonu

Eşler Arası Bağlantılar

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

4. Eşler arası bağlantılar

4.4 RTCPeerConnection Arayüzü

[RFC9429] belirtimi, bir bütün olarak, RTCPeerConnectionın nasıl çalıştığının ayrıntılarını açıklar. [RFC9429] içindeki belirli alt bölümlere yapılan atıflar uygun yerlerde verilmiştir.

4.4.1 Çalışma

new RTCPeerConnection(configuration) çağrısı bir RTCPeerConnection nesnesi oluşturur.

configuration.iceServers, ICE tarafından kullanılan sunucuların bulunması ve bunlara erişilmesi için kullanılan bilgileri içerir. Uygulama her türden birden fazla sunucu sağlayabilir ve herhangi bir TURN sunucusu, sunucuya özgü yansımalı adayların toplanması amacıyla bir STUN sunucusu olarak da MAY kullanılabilir.

Bir RTCPeerConnection nesnesinin bir [[SignalingState]]i ve birleştirilmiş [[ConnectionState]], [[IceGatheringState]] ve [[IceConnectionState]] durumları vardır. Bunlar nesne oluşturulduğunda başlatılır.

Bir RTCPeerConnectionın ICE protokolü uygulaması, bir ICE aracısı [RFC5245] ile temsil edilir. Bazı RTCPeerConnection metotları ICE aracısı ile etkileşim içerir; bunlar addIceCandidate, setConfiguration, setLocalDescription, setRemoteDescription ve close metotlarıdır. Bu etkileşimler, bu belgedeki ilgili bölümlerde ve [RFC9429] içinde açıklanmıştır. ICE aracısı ayrıca, 5.6 RTCIceTransport Arayüzü bölümünde açıklandığı gibi, dahili RTCIceTransport temsillerinin durumu değiştiğinde kullanıcı aracısına bildirimler sağlar.

Bu bölümde listelenen görevler için görev kaynağı ağ görev kaynağıdır.

SDP müzakeresinin durumu, [[SignalingState]], [[CurrentLocalDescription]], [[CurrentRemoteDescription]], [[PendingLocalDescription]] ve [[PendingRemoteDescription]] dahili değişkenleriyle temsil edilir. Bunlar yalnızca setLocalDescription ve setRemoteDescription işlemleri içinde ayarlanır ve addIceCandidate işlemi ile aday yüzeye çıkarma yordamı tarafından değiştirilir. Her durumda, beş değişkenin tamamındaki tüm değişiklikler, yordamlar herhangi bir olay tetiklemeden veya herhangi bir geri çağırma çağırmadan önce tamamlanır; böylece değişiklikler tek bir zaman noktasında görünür hale gelir.

Belgenin boşaltılması sırasındaki temizlik adımlarından biri olarak, aşağıdaki adımları çalıştır:

  1. window, documentın ilgili genel nesnesi olsun.
  2. İlgili genel nesnesi window olan her RTCPeerConnection nesnesi connection için, connection ve true değeriyle bağlantıyı kapat.

4.4.1.1 Kurucu

RTCPeerConnection.constructor() çağrıldığında, kullanıcı aracısı aşağıdaki adımları MUST çalıştırmalıdır:

  1. Aşağıda sıralanan adımlardan herhangi biri burada belirtilmeyen bir nedenle başarısız olursa, message özniteliği uygun bir açıklamaya ayarlanmış bir UnknownError fırlat.
  2. connection, yeni oluşturulmuş bir RTCPeerConnection nesnesi olsun.
  3. connectionın, ilgili ayarlar nesnesinin origin değeriyle başlatılmış bir [[DocumentOrigin]] dahili yuvası olsun.
  4. configuration, metodun ilk argümanı olsun.
  5. configuration içindeki certificates değeri boş değilse, sertifikalar içindeki her certificate için aşağıdaki adımları çalıştır:
  6. certificate.expires değeri mevcut zamandan küçükse, bir InvalidAccessError fırlat.
  7. certificate.[[Origin]], connection.[[DocumentOrigin]] ile aynı origin değilse, bir InvalidAccessError fırlat.
  8. certificatei depola.
  9. Aksi halde, bu RTCPeerConnection örneğiyle bir veya daha fazla yeni RTCCertificate örneği üret ve bunları depola. Bu işlem eşzamansız olarak gerçekleşebilir (MAY) ve sonraki adımlar için certificates değeri undefined olarak kalır. [RFC8826] Bölüm 4.3.2.3'te belirtildiği gibi, WebRTC, Genel Anahtar Altyapısı (PKI) sertifikaları yerine kendinden imzalı sertifikalar kullanır; bu nedenle sona erme denetimi, anahtarların süresiz kullanılmamasını sağlamak içindir ve ek sertifika denetimleri gerekli değildir.
  10. connectionın ICE aracısını başlat.
  11. connectionın, null ile başlatılmış bir [[Configuration]] dahili yuvası olsun. configuration tarafından belirtilen yapılandırmayı ayarla.
  12. connectionın, false ile başlatılmış bir [[IsClosed]] dahili yuvası olsun.
  13. connectionın, false ile başlatılmış bir [[NegotiationNeeded]] dahili yuvası olsun.
  14. connectionın, null ile başlatılmış bir [[SctpTransport]] dahili yuvası olsun.
  15. connectionın, boş sıralı bir küme ile başlatılmış bir [[DataChannels]] dahili yuvası olsun.
  16. connectionın, bir işlemler zincirini temsil eden ve boş bir liste ile başlatılmış bir [[Operations]] dahili yuvası olsun.
  17. connectionın, false ile başlatılmış bir [[UpdateNegotiationNeededFlagOnEmptyChain]] dahili yuvası olsun.
  18. connectionın, "" ile başlatılmış bir [[LastCreatedOffer]] dahili yuvası olsun.
  19. connectionın, "" ile başlatılmış bir [[LastCreatedAnswer]] dahili yuvası olsun.
  20. connectionın, boş bir liste ile başlatılmış bir [[EarlyCandidates]] dahili yuvası olsun.
  21. connectionın, "stable" ile başlatılmış bir [[SignalingState]] dahili yuvası olsun.
  22. connectionın, "new" ile başlatılmış bir [[IceConnectionState]] dahili yuvası olsun.
  23. connectionın, "new" ile başlatılmış bir [[IceGatheringState]] dahili yuvası olsun.
  24. connectionın, "new" ile başlatılmış bir [[ConnectionState]] dahili yuvası olsun.
  25. connectionın, null ile başlatılmış bir [[PendingLocalDescription]] dahili yuvası olsun.
  26. connectionın, null ile başlatılmış bir [[CurrentLocalDescription]] dahili yuvası olsun.
  27. connectionın, null ile başlatılmış bir [[PendingRemoteDescription]] dahili yuvası olsun.
  28. connectionın, null ile başlatılmış bir [[CurrentRemoteDescription]] dahili yuvası olsun.
  29. connectionın, boş bir küme ile başlatılmış bir [[LocalIceCredentialsToReplace]] dahili yuvası olsun.
  30. connectionı döndür.

4.4.1.2 Eşzamansız bir işlemi zincire ekleme

Bir RTCPeerConnection nesnesinin, [[Operations]] adlı bir işlemler zinciri vardır; bu zincir, zincirde aynı anda yalnızca bir eşzamansız işlemin yürütülmesini sağlar. Önceki bir çağrının döndürdüğü promise henüz sonuçlanmamışken sonraki çağrılar yapılırsa, bunlar zincire eklenir ve önceki çağrıların tümü yürütülüp promise'leri sonuçlandıktan sonra çalıştırılır.

Bir işlemi bir RTCPeerConnection nesnesinin işlemler zincirine eklemek için aşağıdaki adımları çalıştır:

  1. connection, RTCPeerConnection nesnesi olsun.
  2. connection.[[IsClosed]] true ise, yeni oluşturulmuş bir InvalidStateError ile reddedilmiş bir promise döndür.
  3. operation, zincire eklenecek işlem olsun.
  4. p, yeni bir promise olsun.
  5. operationı [[Operations]]e ekle.
  6. [[Operations]]in uzunluğu tam olarak 1 ise, operationı yürüt.
  7. operation tarafından döndürülen promise'in yerine getirilmesi veya reddedilmesi üzerine, aşağıdaki adımları çalıştır:
  8. connection.[[IsClosed]] true ise, bu adımları iptal et.
  9. operation tarafından döndürülen promise bir değerle yerine getirilmişse, pyi bu değerle yerine getir.
  10. operation tarafından döndürülen promise bir değerle reddedilmişse, pyi bu değerle reddet.
  11. pnin yerine getirilmesi veya reddedilmesi üzerine, aşağıdaki adımları çalıştır:
  12. connection.[[IsClosed]] true ise, bu adımları iptal et.
  13. [[Operations]]in ilk elemanını kaldır.
  14. [[Operations]] boş değilse, [[Operations]]in ilk elemanının temsil ettiği işlemi yürüt ve bu adımları iptal et.
  15. connection.[[UpdateNegotiationNeededFlagOnEmptyChain]] false ise, bu adımları iptal et.
  16. connection.[[UpdateNegotiationNeededFlagOnEmptyChain]] değerini false olarak ayarla.
  17. connection için müzakere-gerekli bayrağını güncelle.
  18. pyi döndür.

4.4.1.3 Bağlantı durumunu güncelleme

Bir RTCPeerConnection nesnesinin birleştirilmiş bir [[ConnectionState]]i vardır. Bir RTCDtlsTransportun durumu her değiştiğinde, kullanıcı aracısı aşağıdaki adımları çalıştıran bir görevi MUST kuyruğa almalıdır:

  1. connection, durumu değişen RTCDtlsTransport nesnesiyle ilişkili bu RTCPeerConnection nesnesi olsun.
  2. connection.[[IsClosed]] true ise, bu adımları iptal et.
  3. newState, RTCPeerConnectionState enumu tarafından açıklandığı şekilde yeni bir durum değerinin türetilmesinin sonucu olsun.
  4. connection.[[ConnectionState]], newStatee eşitse, bu adımları iptal et.
  5. connection.[[ConnectionState]]i newState olarak ayarla.
  6. connection üzerinde connectionstatechange adlı bir olay tetikle.

4.4.1.4 Oturum açıklamasını ayarlama

Bir RTCPeerConnection nesnesi connection üzerinde yerel bir oturum açıklaması description ayarlamak için, description oturum açıklamasını ek false değeriyle birlikte connection üzerinde ayarla.

Bir RTCPeerConnection nesnesi connection üzerinde uzak bir oturum tanımı description ayarlamak için, connection üzerinde oturum tanımı description ek olarak true değeriyle ayarlanır.

Bir RTCPeerConnection nesnesi connection üzerinde, bir remote boolean değeri verildiğinde, bir oturum tanımı description ayarlamak için aşağıdaki adımları çalıştırın:

  1. p yeni bir promise olsun.
  2. Eğer description.type "rollback" ise ve connection.[[SignalingState]] "stable", "have-local-pranswer" veya "have-remote-pranswer" durumlarından biriyse, yeni oluşturulmuş bir InvalidStateError ile p’yi reddedin ve bu adımları sonlandırın.
  3. jsepSetOfTransceivers, connection’ın transceiver kümesinin sığ bir kopyası olsun.
  4. Paralel olarak, [RFC9429]’da (bölüm 5.5. ve bölüm 5.6.) tanımlandığı şekilde description’ı uygulama sürecini, aşağıdaki ek kısıtlamalarla başlatın:
  5. Hangi "RtpTransceivers"’ların mevcut olduğu ve bunların "mid özelliği" olarak [[JsepMid]] iç yuvaları konusunda doğruluk kaynağı olarak jsepSetOfTransceivers kullanın.
  6. Aday Düzeltmesi 5: İdari olarak yasaklanmış adaylar üzerinde ICE toplama ve bağlantı denetimlerini yasakla (PR #2708)
  7. Eğer remote false ise ve bu durum [RFC9429]’da (bölüm 5.9.) ICE aday toplama sürecini tetiklerse, ICE aracısı idari olarak yasaklanmış adayları MUST NOT toplamalıdır.

  8. Aday Düzeltmesi 5: İdari olarak yasaklanmış adaylar üzerinde ICE toplama ve bağlantı denetimlerini yasakla (PR #2708)
  9. Eğer remote true ise ve bu durum [RFC9429]’da (bölüm 5.10.) ICE bağlantı denetimlerini tetiklerse, ICE aracısı idari olarak yasaklanmış adaylara bağlanmayı MUST NOT denemelidir.

  10. Eğer remote true ise, araya yanıtlar uygulanmış gibi, arka arkaya teklifler için doğrulama yapın; bunu, kararlı durumda gibi sonraki teklifler için denetimi çalıştırarak yapın.
  11. Aday Düzeltmesi 37: RID uyuşmazlığı nedeniyle sRD(offer) başarısız olmasın, sadece unicast ile yanıt verilsin. (PR #2794)
  12. Eğer description’ın uygulanması bir transceiver’ın değiştirilmesine yol açarsa ve transceiver.[[Sender]].[[SendEncodings]] boş değilse ve description’ın işlenmesi sonucunda oluşacak kodlamalara eşit değilse, description’ı uygulama süreci başarısız olur. Bu belirtim, uzaktan başlatılan RID yeniden müzakeresine izin vermez.
  13. Eğer description’ı uygulama süreci herhangi bir nedenle başarısız olursa, kullanıcı aracısı aşağıdaki adımları çalıştıran bir görevi sıraya almalıdır (MUST):
  14. Eğer connection.[[IsClosed]] true ise, bu adımları sonlandırın.
  15. Eğer description.type, [RFC9429]’da (bölüm 5.5. ve bölüm 5.6.) tanımlandığı şekilde mevcut connection.[[SignalingState]] için geçersizse, yeni oluşturulmuş bir InvalidStateError ile p’yi reddedin ve bu adımları sonlandırın.
  16. Eğer description’ın içeriği geçerli SDP sözdizimi değilse, errorDetail değeri "sdp-syntax-error" olarak ayarlanmış ve sdpLineNumber özniteliği sözdizimi hatasının algılandığı SDP satır numarasına ayarlanmış bir RTCError ile p’yi reddedin ve bu adımları sonlandırın.
  17. Eğer remote true ise, connection’ın RTCRtcpMuxPolicy değeri require ise ve tanım RTCP mux kullanmıyorsa, yeni oluşturulmuş bir InvalidAccessError ile p’yi reddedin ve bu adımları sonlandırın.
  18. Eğer tanım, yukarıda açıklandığı gibi RID’leri yeniden müzakere etmeye çalıştıysa, yeni oluşturulmuş bir InvalidAccessError ile p’yi reddedin ve bu adımları sonlandırın.
  19. Eğer description’ın içeriği geçersizse, yeni oluşturulmuş bir InvalidAccessError ile p’yi reddedin ve bu adımları sonlandırın.
  20. Diğer tüm hatalar için, yeni oluşturulmuş bir OperationError ile p’yi reddedin.
  21. Eğer description başarıyla uygulanırsa, kullanıcı aracısı aşağıdaki adımları çalıştıran bir görevi sıraya almalıdır (MUST):
  22. Eğer connection.[[IsClosed]] true ise, bu adımları sonlandırın.
  23. Eğer remote true ise ve description "offer" türündeyse, description’ı uygulama süreci sırasında connection üzerindeki herhangi bir addTrack() yöntemi başarılı olduysa, bu adımları sonlandırın ve ekstra transceiver(lar)ı sürece dahil etmek için, sanki bunlar önceden başarılı olmuş gibi süreci yeniden başlatın.
  24. Eğer connection ile ilişkili RTCRtpSender’lardaki setParameters yöntemlerinden kaynaklanan herhangi bir promise sonuçlanmamışsa, bu adımları sonlandırın ve süreci yeniden başlatın.
  25. Eğer description "offer" türündeyse ve connection.[[SignalingState]] "stable" ise, connection’ın transceiver kümesindeki her transceiver için aşağıdaki adımları çalıştırın:
  26. transceiver.[[Sender]].[[LastStableStateSenderTransport]] değerini transceiver.[[Sender]].[[SenderTransport]] olarak ayarlayın.
  27. Aday Düzeltmesi 13: Geri alma, sRD(simulcastOffer) tarafından ezilen RID’siz kodlamayı geri yükler. (PR #2797)
  28. Eğer transceiver.[[Sender]].[[SendEncodings]].length 1 ise ve tek kodlama hiçbir rid üyesi içermiyorsa, transceiver.[[Sender]].[[LastStableRidlessSendEncodings]] değerini transceiver.[[Sender]].[[SendEncodings]] olarak ayarlayın; aksi halde transceiver.[[Sender]].[[LastStableRidlessSendEncodings]] değerini null olarak ayarlayın.

  29. transceiver.[[Receiver]].[[LastStableStateReceiverTransport]] değerini transceiver.[[Receiver]].[[ReceiverTransport]] olarak ayarlayın.
  30. transceiver.[[Receiver]].[[LastStableStateAssociatedRemoteMediaStreams]] değerini transceiver.[[Receiver]].[[AssociatedRemoteMediaStreams]] olarak ayarlayın.
  31. transceiver.[[Receiver]].[[LastStableStateReceiveCodecs]] değerini transceiver.[[Receiver]].[[ReceiveCodecs]] olarak ayarlayın.
  32. Eğer remote false ise, aşağıdaki adımlardan birini çalıştırın:
  33. Eğer description "offer" türündeyse, connection.[[PendingLocalDescription]] değerini description’dan oluşturulmuş yeni bir RTCSessionDescription nesnesine ayarlayın, connection.[[SignalingState]] değerini "have-local-offer" olarak ayarlayın ve erken adayları serbest bırakın.
  34. Eğer description "answer" türündeyse, bu bir teklif-yanıt müzakeresini tamamlar. connection.[[CurrentLocalDescription]] değerini description’dan oluşturulmuş yeni bir RTCSessionDescription nesnesine ayarlayın ve connection.[[CurrentRemoteDescription]] değerini connection.[[PendingRemoteDescription]] olarak ayarlayın. Hem connection.[[PendingRemoteDescription]] hem de connection.[[PendingLocalDescription]] değerlerini null olarak ayarlayın. Hem connection.[[LastCreatedOffer]] hem de connection.[[LastCreatedAnswer]] değerlerini "" olarak ayarlayın, connection.[[SignalingState]] değerini "stable" olarak ayarlayın ve erken adayları serbest bırakın. Son olarak, connection.[[LocalIceCredentialsToReplace]] içindeki ICE kimlik bilgilerinin hiçbiri description içinde yoksa, connection.[[LocalIceCredentialsToReplace]] değerini boş bir küme olarak ayarlayın.
  35. Eğer description "pranswer" türündeyse, connection.[[PendingLocalDescription]] değerini description’dan oluşturulmuş yeni bir RTCSessionDescription nesnesine ayarlayın, connection.[[SignalingState]] değerini "have-local-pranswer" olarak ayarlayın ve erken adayları serbest bırakın.
  36. Aksi halde, (remote true ise) aşağıdaki adımlardan birini çalıştırın:
  37. Eğer description "offer" türündeyse, connection.[[PendingRemoteDescription]] özniteliğini description’dan oluşturulmuş yeni bir RTCSessionDescription nesnesine ayarlayın ve connection.[[SignalingState]] değerini "have-remote-offer" olarak ayarlayın.
  38. Eğer description "answer" türündeyse, bu bir teklif-yanıt müzakeresini tamamlar. connection.[[CurrentRemoteDescription]] değerini description’dan oluşturulmuş yeni bir RTCSessionDescription nesnesine ayarlayın ve connection.[[CurrentLocalDescription]] değerini connection.[[PendingLocalDescription]] olarak ayarlayın. Hem connection.[[PendingRemoteDescription]] hem de connection.[[PendingLocalDescription]] değerlerini null olarak ayarlayın. Hem connection.[[LastCreatedOffer]] hem de connection.[[LastCreatedAnswer]] değerlerini "" olarak ayarlayın ve connection.[[SignalingState]] değerini "stable" olarak ayarlayın. Son olarak, connection.[[LocalIceCredentialsToReplace]] içindeki ICE kimlik bilgilerinin hiçbiri yeni ayarlanan connection.[[CurrentLocalDescription]] içinde yoksa, connection.[[LocalIceCredentialsToReplace]] değerini boş bir küme olarak ayarlayın.
  39. Eğer description "pranswer" türündeyse, connection.[[PendingRemoteDescription]] değerini description’dan oluşturulmuş yeni bir RTCSessionDescription nesnesine ayarlayın ve connection.[[SignalingState]] değerini "have-remote-pranswer" olarak ayarlayın.
  40. Eğer description "answer" türündeyse ve [RFC8841], Bölüm 10.3 ve 10.4’te tanımlandığı şekilde mevcut bir SCTP ilişkisinin kapatılmasını başlatıyorsa, connection.[[SctpTransport]] değerini null olarak ayarlayın.
  41. trackEventInits, muteTracks, addList, removeList ve errorList boş listeler olsun.
  42. Eğer description "answer" veya "pranswer" türündeyse, aşağıdaki adımları çalıştırın:
  43. Eğer description, [RFC8841], Bölüm 10.3 ve 10.4’te tanımlandığı şekilde yeni bir SCTP ilişkisinin kurulmasını başlatıyorsa, başlangıç durumu "connecting" olan bir RTCSctpTransport oluşturun ve sonucu [[SctpTransport]] yuvasına atayın. Aksi halde, bir SCTP ilişkisi kurulmuşsa ancak max-message-size SDP özniteliği güncellenmişse, connection.[[SctpTransport]]’un veri azami mesaj boyutunu güncelleyin.
  44. Eğer description SCTP taşımasının DTLS rolünü müzakere ediyorsa, id değeri null olan her RTCDataChannel (channel) için aşağıdaki adımı çalıştırın:
  45. [RFC8832]’ye göre oluşturulmuş yeni bir kimliği channel’a verin. Eğer kullanılabilir bir kimlik oluşturulamazsa, channel.[[ReadyState]] değerini "closed" olarak ayarlayın ve channnel’ı errorList’e ekleyin.
  46. Eğer description "rollback" türünde değilse, aşağıdaki adımları çalıştırın:
  47. Eğer remote false ise, description içindeki her medya tanımı için aşağıdaki adımları çalıştırın:

Aday Düzeltmesi 26: createAnswer()’ın kodlamalarını ve sLD(answer) içindeki SendEncodings’i buda. (PR #2801)

  1. Eğer medya tanımı henüz bir RTCRtpTransceiver nesnesiyle ilişkilendirilmemişse, aşağıdaki adımları çalıştırın:
  2. transceiver, medya tanımını oluşturmak için kullanılan RTCRtpTransceiver olsun.
  3. transceiver.[[Mid]] değerini transceiver.[[JsepMid]] olarak ayarlayın.
  4. Eğer transceiver.[[Stopped]] true ise, bu alt adımları sonlandırın.
  5. Eğer medya tanımı, [RFC8843]’e göre mevcut bir media medya taşımasını kullandığını gösteriyorsa, transport, o taşımanın RTP/RTCP bileşenini temsil eden RTCDtlsTransport nesnesi olsun.
  6. Aksi halde, transport, yeni bir temel RTCIceTransport ile yeni oluşturulmuş bir RTCDtlsTransport nesnesi olsun.
  7. transceiver.[[Sender]].[[SenderTransport]] değerini transport olarak ayarlayın.
  8. transceiver.[[Receiver]].[[ReceiverTransport]] değerini transport olarak ayarlayın.
  9. transceiver, medya tanımıyla ilişkili RTCRtpTransceiver olsun.
  10. Eğer transceiver.[[Stopped]] true ise, bu alt adımları sonlandırın.
  11. direction, media medya tanımından yönü temsil eden bir RTCRtpTransceiverDirection değeri olsun.
  12. Eğer direction "sendrecv" veya "recvonly" ise, transceiver.[[Receptive]] değerini true olarak ayarlayın; aksi halde false olarak ayarlayın.
  13. transceiver.[[Receiver]].[[ReceiveCodecs]] değerini, description’ın alma için müzakere ettiği ve kullanıcı aracısının şu anda almaya hazır olduğu kodeklere ayarlayın.
Eğer direction "sendonly" veya "inactive" ise, alıcı hiçbir şey almaya hazır değildir ve liste boş olacaktır.
  1. Eğer description "answer" veya "pranswer" türündeyse, aşağıdaki adımları çalıştırın:
  • Eğer transceiver.[[Sender]].[[SendEncodings]].length 1’den büyükse, aşağıdaki adımları çalıştırın:
  • Eğer description önceden müzakere edilmiş katmanların tamamını eksikse, transceiver.[[Sender]].[[SendEncodings]] içindeki ilk sözlük dışındaki tüm sözlükleri kaldırın ve bir sonraki adımı atlayın.
  • Eğer description önceden müzakere edilmiş katmanlardan herhangi birini eksikse, eksik katmanlara karşılık gelen sözlükleri transceiver.[[Sender]].[[SendEncodings]]’den kaldırın.
  • transceiver.[[Sender]].[[SendCodecs]] değerini, description’ın gönderim için müzakere ettiği ve kullanıcı aracısının şu anda göndermeye yetkin olduğu kodeklere ayarlayın ve transceiver.[[Sender]].[[LastReturnedParameters]] değerini null olarak ayarlayın.
  • Eğer direction "sendonly" veya "inactive" ise ve transceiver.[[FiredDirection]] "sendrecv" veya "recvonly" durumlarından biriyse, aşağıdaki adımları çalıştırın:
  • transceiver.[[Receiver]] verildiğinde, ilişkili uzak akışları boş bir liste, başka bir boş liste ve removeList ile ayarlayın.
  • Medya tanımı için bir remote uzak parçanın kaldırılmasını, transceiver ve muteTracks verilerek işleyin.
  • transceiver.[[CurrentDirection]] ve transceiver.[[FiredDirection]] değerlerini direction olarak ayarlayın.
  • Aksi halde, (remote true ise) description içindeki her medya tanımı için aşağıdaki adımları çalıştırın:
  • Aday Düzeltmesi 12: encoding.active ile simulcast ~rid arasındaki etkileşimi kaldır (PR #2754)

    Aday Düzeltmesi 14: RTCTransceiver.direction’ın tekliflerde ve yanıtlarda yerel tercihi yansıtmasını sağla (PR #2759)

    Aday Düzeltmesi 22: İstemci yanıtı üzerinden kodlamaların uzak teklif rid budamasına izin ver. (PR #2758)

    Aday Düzeltmesi 37: rid uyuşmazlığı nedeniyle sRD(offer) başarısız olmasın, yalnızca unicast ile yanıtla. (PR #2794)

    Aday Düzeltmesi 25: proposedSendEncodings içindeki yinelenen rid’leri kaldır. (PR #2800)

    Aday Düzeltmesi 27: Virgülle ayrılmış rid alternatiflerini yok say. (PR #2813)

    1. Eğer description türü "offer" ise ve medya tanımı simulcast alma isteği içeriyorsa, simulcast özniteliğinde belirtilen rid değerlerinin sırasını kullanarak her bir simulcast katmanı için bir RTCRtpEncodingParameters sözlüğü oluştur; rid üyesini ilgili rid değerdeğerine göre doldur (virgülle ayrılmış alternatifler varsa yalnızca ilk değeri kullanarak) ve sendEncodingsproposedSendEncodings’in liste oluşturulan sözlükleri içeren liste olmasına izin ver. Aksi halde, sendEncodings proposedSendEncodings’in bir boş bir liste olmasına izin ver.
    2. proposedSendEncodings içindeki her bir encoding için, ters sırada, eğer encoding’in rid’i proposedSendEncodings içindeki başka bir kodlamanınkiyle eşleşiyorsa, encoding’i proposedSendEncodings’den kaldır.
    3. supportedEncodings, uygulamanın destekleyebileceği azami kodlama sayısı olsun. Eğer sendEncodingsproposedSendEncodings uzunluğu supportedEncodings’ten büyükse, sendEncodingsproposedSendEncodings’i uzunluğu supportedEncodings olacak şekilde kısalt.
    4. Eğer sendEncodingsproposedSendEncodings boş değilse, her bir kodlamanın scaleResolutionDownBy değerini 2^(sendEncodingsproposedSendEncodings` uzunluğu - kodlama indeksi - 1) olarak ayarla ayarla.
    5. \RFC8829[RFC9429] (bölüm 5.10.) tarafından tanımlandığı üzere, medya tanımını temsil etmek için mevcut bir RTCRtpTransceiver nesnesi, transceiver, bulmaya çalış.
    6. Uygun bir transceiver bulunduysa (transceiver ayarlanmışsa) ve sendEncodingsproposedSendEncodings boş değilse, transceiver.[[Sender]].[[SendEncodings]] sendEncodings olarak ayarla ve transceiver.[[Sender]].[[LastReturnedParameters]]’ı null olarak ayarla. aşağıdaki adımları çalıştır:
    7. Eğer transceiver.[[Sender]].[[SendEncodings]] uzunluğu 1 ise ve tek kodlama bir rid üyesi içermiyorsa, transceiver.[[Sender]].[[SendEncodings]]’i proposedSendEncodings olarak ayarla ve transceiver.[[Sender]].[[LastReturnedParameters]]’ı null olarak ayarla.
    8. Uygun bir transceiver bulunamadıysa (transceiver ayarlanmamışsa), aşağıdaki adımları çalıştır:
    9. medya medya tanımından sendEncodingsproposedSendEncodings kullanarak bir RTCRtpSender, sender, oluştur.
    10. medya medya tanımından bir RTCRtpReceiver, receiver, oluştur.
    11. sender, receiver ve "recvonly" değerine sahip bir RTCRtpTransceiverDirection ile bir RTCRtpTransceiver oluştur ve sonucu transceiver olarak adlandır.
    12. transceiver’ı connection’ın transceiver kümesine ekle.
    13. Eğer description türü "answer" veya "pranswer" ise ve transceiver.[[Sender]].[[SendEncodings]].length 1’den büyükse, aşağıdaki adımları çalıştır:
    14. Eğer description simulcast’in desteklenmediğini ya da istenmediğini belirtiyorsa veya description daha önce müzakere edilmiş katmanların tümünü içermiyorsa, transceiver.[[Sender]].[[SendEncodings]] içindeki ilk sözlük dışındaki tüm sözlükleri kaldır ve bu alt adımları sonlandır.
    15. Eğer description reddediyorsa sunulan daha önce müzakere edilmiş katmanlardan herhangi birini içermiyorsa, o halde o halde transceiver.[[Sender]].[[SendEncodings]] içinden eksik katmanlara karşılık gelen sözlükleri kaldır.
    16. [RFC8853] tarafından belirtildiği şekilde her bir simulcast katmanının duraklatılmış durumunu, transceiver.[[Sender]].[[SendEncodings]] içindeki ilgili sözlüklerde active üyesini duraklatılmamış olanlar için true, duraklatılmış olanlar için false yaparak güncelle.
    17. transceiver.[[Mid]]’i transceiver.[[JsepMid]] olarak ayarla.
    18. direction, medya medya tanımından gelen yönü temsil eden bir RTCRtpTransceiverDirection değeri olsun, ancak bu eşin bakış açısını temsil etmek için gönderme ve alma yönleri ters çevrilsin. Eğer medya tanımı reddedilmişse, direction’ı "inactive" olarak ayarla.
    19. Eğer direction "sendrecv" veya "recvonly" ise, msids, medya tanımının transceiver.[[Receiver]].[[ReceiverTrack]]’in ilişkilendirileceğini belirttiği MSID’lerin bir listesi olsun. Aksi halde, msids boş bir liste olsun.
    Medya tanımı reddedilmişse burada msids boş bir liste olacaktır.
    1. transceiver, direction, msids, addList, removeList ve trackEventInits ile uzak izleri işle.
    2. transceiver.[[Receiver]].[[ReceiveCodecs]]’i, description’ın alma için müzakere ettiği ve kullanıcı aracısının şu anda almaya hazır olduğu kodekler olarak ayarla.
    3. Eğer description türü "answer" veya "pranswer" ise, aşağıdaki adımları çalıştır:
    4. transceiver.[[Sender]].[[SendCodecs]]’i, description’ın gönderim için müzakere ettiği ve kullanıcı aracısının şu anda göndermeye yetkin olduğu kodekler olarak ayarla.
    5. transceiver.[[CurrentDirection]] ve transceiver.[[Direction]]s’i direction olarak ayarla.
    6. transport, [RFC8843] uyarınca transceiver’ın ilişkili medya tanımı tarafından kullanılan medya medya taşımasının RTP/RTCP bileşenini temsil eden RTCDtlsTransport nesnesi olsun.
    7. transceiver.[[Sender]].[[SenderTransport]]’ı transport olarak ayarla.
    8. transceiver.[[Receiver]].[[ReceiverTransport]]’ı transport olarak ayarla.
    9. transport’un [[IceRole]] değerini [RFC8445] kurallarına göre ayarla.
    Burada geçerli olan [RFC8445] kuralları şunlardır:
    • Eğer [[IceRole]] unknown değilse, [[IceRole]]’ü değiştirme.
    • Eğer description yerel bir teklifse, controlling olarak ayarla.
    • Eğer description uzak bir teklifse ve a=ice-lite içeriyorsa, [[IceRole]]’ü controlling olarak ayarla.
    • Eğer description uzak bir teklifse ve a=ice-lite içermiyorsa, [[IceRole]]’ü controlled olarak ayarla.

    Bu, ilk teklif işlendiğinde [[IceRole]]’ün her zaman bir değere sahip olmasını sağlar.

    1. Eğer medya tanımı reddedilmişse ve transceiver.[[Stopped]] false ise, RTCRtpTransceiver transceiver’ı durdur.
    2. Aksi halde, (description türü "rollback" ise) aşağıdaki adımları çalıştır:
    3. pendingDescription, connection.[[PendingLocalDescription]] veya connection.[[PendingRemoteDescription]]’dan null olmayanı olsun.
    4. connection’ın transceiver kümesindeki her bir transceiver için aşağıdaki adımları çalıştır:
    5. Eğer transceiver, pendingDescription ayarlanmadan önce bir medya tanımıyla ilişkilendirilmemişse, ilişkilendirmeyi kaldır ve hem transceiver.[[JsepMid]] hem de transceiver.[[Mid]]’i null olarak ayarla.
    6. transceiver.[[Sender]].[[SenderTransport]]’ı transceiver.[[Sender]].[[LastStableStateSenderTransport]] olarak ayarla.
    7. Aday Düzeltmesi 13: Geri alma, sRD(simulcastOffer) tarafından ezilen rid’siz kodlamayı geri yükler. (PR #2797)
    8. Eğer transceiver.[[Sender]].[[LastStableRidlessSendEncodings]] null değilse ve transceiver.[[Sender]].[[SendEncodings]] içindeki herhangi bir kodlama bir rid üyesi içeriyorsa, transceiver.[[Sender]].[[SendEncodings]]’i transceiver.[[Sender]].[[LastStableRidlessSendEncodings]] olarak ayarla.

    9. transceiver.[[Receiver]].[[ReceiverTransport]]’ı transceiver.[[Receiver]].[[LastStableStateReceiverTransport]] olarak ayarla.
    10. transceiver.[[Receiver]].[[ReceiveCodecs]]’i transceiver.[[Receiver]].[[LastStableStateReceiveCodecs]] olarak ayarla.
    11. Eğer connection.[[SignalingState]] "have-remote-offer" ise, aşağıdaki alt adımları çalıştır:
    12. msids, transceiver.[[Receiver]].[[LastStableStateAssociatedRemoteMediaStreams]] içindeki tüm MediaStream nesnelerinin id’lerinden oluşan bir liste veya yoksa boş bir liste olsun.
    13. transceiver, transceiver.[[CurrentDirection]], msids, addList, removeList ve trackEventInits ile uzak izleri işle.
    14. Eğer transceiver, pendingDescription ayarlandığında oluşturulduysa ve addTrack() aracılığıyla ona hiç bir iz eklenmemişse, RTCRtpTransceiver transceiver’ı durdur ve connection’ın transceiver kümesinden kaldır.
    15. connection.[[PendingLocalDescription]] ve connection.[[PendingRemoteDescription]]’ı null olarak ayarla ve connection.[[SignalingState]]’i "stable" olarak ayarla.
    16. Eğer description türü "answer" ise, aşağıdaki adımları çalıştır:
    17. connection’ın transceiver kümesindeki her bir transceiver için aşağıdaki adımları çalıştır:
    18. Eğer transceiver stopped ise, bir m= bölümüyle ilişkilendirilmişse ve ilişkili m= bölümü connection.[[CurrentLocalDescription]] veya connection.[[CurrentRemoteDescription]] içinde reddedilmişse, transceiver’ı connection’ın transceiver kümesinden kaldır.
    19. Eğer connection.[[SignalingState]] artık "stable" ise, aşağıdaki adımları çalıştır:
    20. Önceki bir adımda transceiver kümesinden kaldırılmış olan herhangi bir transceiver için, taşıyıcılarından (transceiver.[[Sender]].[[SenderTransport]] veya transceiver.[[Receiver]].[[ReceiverTransport]]) herhangi biri hâlâ kapatılmamışsa ve artık durdurulmamış bir transceiver tarafından referans edilmiyorsa, RTCDtlsTransport’ları ve bunlarla ilişkili RTCIceTransport’ları kapat. Bu, kuyruğa alınmış bir görevde bu nesneler üzerinde olayların tetiklenmesine neden olur.
    21. Aday Eklemesi 49: RTCRtpEncodingParameters’a codec ekle (PR #2985)
    22. Enum değeri Açıklama
      connection ’ın transceiver kümesindeki her bir transceiver için:
      Yöntem çağrıldığında, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:
      connection verildiğinde bir teklif oluşturmak için aşağıdaki adımları çalıştır:
      Yöntem çağrıldığında, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:
      connection verildiğinde bir yanıt oluşturmak için aşağıdaki adımları çalıştır:
      Filtreleme, codec tercihleri sırasını MUST NOT değiştirmemelidir.
      Yöntem çağrıldığında, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:
      Yöntem çağrıldığında, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:
      Bu yöntem çağrıldığında, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:
      Varsa bir sonraki seçeneğe devam edin.

      RTCSdpType Numaralandırması açıklaması