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.
[[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:
window,documentın ilgili genel nesnesi olsun.- İlgili genel nesnesi
windowolan herRTCPeerConnectionnesnesiconnectioniçin,connectionvetruedeğ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:
- 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ış birUnknownErrorfırlat. connection, yeni oluşturulmuş birRTCPeerConnectionnesnesi olsun.connectionın, ilgili ayarlar nesnesinin origin değeriyle başlatılmış bir [[DocumentOrigin]] dahili yuvası olsun.configuration, metodun ilk argümanı olsun.configurationiçindekicertificatesdeğeri boş değilse, sertifikalar içindeki hercertificateiçin aşağıdaki adımları çalıştır:certificate.expiresdeğeri mevcut zamandan küçükse, birInvalidAccessErrorfırlat.certificate.[[Origin]],connection.[[DocumentOrigin]]ile aynı origin değilse, birInvalidAccessErrorfırlat.certificatei depola.- Aksi halde, bu
RTCPeerConnectionörneğiyle bir veya daha fazla yeniRTCCertificateörneği üret ve bunları depola. Bu işlem eşzamansız olarak gerçekleşebilir (MAY) ve sonraki adımlar içincertificatesdeğeriundefinedolarak 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. connectionın ICE aracısını başlat.connectionın,nullile başlatılmış bir [[Configuration]] dahili yuvası olsun.configurationtarafından belirtilen yapılandırmayı ayarla.connectionın,falseile başlatılmış bir [[IsClosed]] dahili yuvası olsun.connectionın,falseile başlatılmış bir [[NegotiationNeeded]] dahili yuvası olsun.connectionın,nullile başlatılmış bir [[SctpTransport]] dahili yuvası olsun.connectionın, boş sıralı bir küme ile başlatılmış bir [[DataChannels]] dahili yuvası olsun.connectionın, bir işlemler zincirini temsil eden ve boş bir liste ile başlatılmış bir [[Operations]] dahili yuvası olsun.connectionın,falseile başlatılmış bir [[UpdateNegotiationNeededFlagOnEmptyChain]] dahili yuvası olsun.connectionın,""ile başlatılmış bir [[LastCreatedOffer]] dahili yuvası olsun.connectionın,""ile başlatılmış bir [[LastCreatedAnswer]] dahili yuvası olsun.connectionın, boş bir liste ile başlatılmış bir [[EarlyCandidates]] dahili yuvası olsun.connectionın, "stable" ile başlatılmış bir [[SignalingState]] dahili yuvası olsun.connectionın, "new" ile başlatılmış bir [[IceConnectionState]] dahili yuvası olsun.connectionın, "new" ile başlatılmış bir [[IceGatheringState]] dahili yuvası olsun.connectionın, "new" ile başlatılmış bir [[ConnectionState]] dahili yuvası olsun.connectionın,nullile başlatılmış bir [[PendingLocalDescription]] dahili yuvası olsun.connectionın,nullile başlatılmış bir [[CurrentLocalDescription]] dahili yuvası olsun.connectionın,nullile başlatılmış bir [[PendingRemoteDescription]] dahili yuvası olsun.connectionın,nullile başlatılmış bir [[CurrentRemoteDescription]] dahili yuvası olsun.connectionın, boş bir küme ile başlatılmış bir [[LocalIceCredentialsToReplace]] dahili yuvası olsun.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:
connection,RTCPeerConnectionnesnesi olsun.connection.[[IsClosed]]trueise, yeni oluşturulmuş birInvalidStateErrorile reddedilmiş bir promise döndür.operation, zincire eklenecek işlem olsun.p, yeni bir promise olsun.operationı[[Operations]]e ekle.[[Operations]]in uzunluğu tam olarak 1 ise,operationı yürüt.operationtarafından döndürülen promise'in yerine getirilmesi veya reddedilmesi üzerine, aşağıdaki adımları çalıştır:connection.[[IsClosed]]trueise, bu adımları iptal et.operationtarafından döndürülen promise bir değerle yerine getirilmişse,pyi bu değerle yerine getir.operationtarafından döndürülen promise bir değerle reddedilmişse,pyi bu değerle reddet.pnin yerine getirilmesi veya reddedilmesi üzerine, aşağıdaki adımları çalıştır:connection.[[IsClosed]]trueise, bu adımları iptal et.[[Operations]]in ilk elemanını kaldır.[[Operations]]boş değilse,[[Operations]]in ilk elemanının temsil ettiği işlemi yürüt ve bu adımları iptal et.connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]falseise, bu adımları iptal et.connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]değerinifalseolarak ayarla.connectioniçin müzakere-gerekli bayrağını güncelle.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:
connection, durumu değişenRTCDtlsTransportnesnesiyle ilişkili buRTCPeerConnectionnesnesi olsun.connection.[[IsClosed]]trueise, bu adımları iptal et.newState,RTCPeerConnectionStateenumu tarafından açıklandığı şekilde yeni bir durum değerinin türetilmesinin sonucu olsun.connection.[[ConnectionState]],newStatee eşitse, bu adımları iptal et.connection.[[ConnectionState]]inewStateolarak ayarla.connectionüzerindeconnectionstatechangeadlı 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:
pyeni bir promise olsun.- Eğer
description.type"rollback" ise veconnection.[[SignalingState]]"stable", "have-local-pranswer" veya "have-remote-pranswer" durumlarından biriyse, yeni oluşturulmuş birInvalidStateErrorilep’yi reddedin ve bu adımları sonlandırın. jsepSetOfTransceivers,connection’ın transceiver kümesinin sığ bir kopyası olsun.- 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: - Hangi "RtpTransceivers"’ların mevcut olduğu ve bunların "mid özelliği" olarak
[[JsepMid]]iç yuvaları konusunda doğruluk kaynağı olarakjsepSetOfTransceiverskullanın. - Aday Düzeltmesi 5: İdari olarak yasaklanmış adaylar üzerinde ICE toplama ve bağlantı denetimlerini yasakla (PR #2708)
- Aday Düzeltmesi 5: İdari olarak yasaklanmış adaylar üzerinde ICE toplama ve bağlantı denetimlerini yasakla (PR #2708)
- Eğer
remotetrueise, 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. - Aday Düzeltmesi 37: RID uyuşmazlığı nedeniyle sRD(offer) başarısız olmasın, sadece unicast ile yanıt verilsin. (PR #2794)
- Eğer
description’ın uygulanması birtransceiver’ın değiştirilmesine yol açarsa vetransceiver.[[Sender]].[[SendEncodings]] boş değilse vedescription’ı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. - 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): - Eğer
connection.[[IsClosed]]trueise, bu adımları sonlandırın. - Eğer
description.type, [RFC9429]’da (bölüm 5.5. ve bölüm 5.6.) tanımlandığı şekilde mevcutconnection.[[SignalingState]]için geçersizse, yeni oluşturulmuş birInvalidStateErrorilep’yi reddedin ve bu adımları sonlandırın. - Eğer
description’ın içeriği geçerli SDP sözdizimi değilse,errorDetaildeğeri "sdp-syntax-error" olarak ayarlanmış vesdpLineNumberözniteliği sözdizimi hatasının algılandığı SDP satır numarasına ayarlanmış birRTCErrorilep’yi reddedin ve bu adımları sonlandırın. - Eğer
remotetrueise,connection’ınRTCRtcpMuxPolicydeğerirequireise ve tanım RTCP mux kullanmıyorsa, yeni oluşturulmuş birInvalidAccessErrorilep’yi reddedin ve bu adımları sonlandırın. - Eğer tanım, yukarıda açıklandığı gibi RID’leri yeniden müzakere etmeye çalıştıysa, yeni oluşturulmuş bir
InvalidAccessErrorilep’yi reddedin ve bu adımları sonlandırın. - Eğer
description’ın içeriği geçersizse, yeni oluşturulmuş birInvalidAccessErrorilep’yi reddedin ve bu adımları sonlandırın. - Diğer tüm hatalar için, yeni oluşturulmuş bir
OperationErrorilep’yi reddedin. - Eğer
descriptionbaş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): - Eğer
connection.[[IsClosed]]trueise, bu adımları sonlandırın. - Eğer
remotetrueise vedescription"offer" türündeyse,description’ı uygulama süreci sırasındaconnectionüzerindeki herhangi biraddTrack()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. - Eğer
connectionile ilişkiliRTCRtpSender’lardakisetParametersyöntemlerinden kaynaklanan herhangi bir promise sonuçlanmamışsa, bu adımları sonlandırın ve süreci yeniden başlatın. - Eğer
description"offer" türündeyse veconnection.[[SignalingState]]"stable" ise,connection’ın transceiver kümesindeki hertransceiveriçin aşağıdaki adımları çalıştırın: -
transceiver.[[Sender]].[[LastStableStateSenderTransport]]değerinitransceiver.[[Sender]].[[SenderTransport]]olarak ayarlayın. - Aday Düzeltmesi 13: Geri alma, sRD(simulcastOffer) tarafından ezilen RID’siz kodlamayı geri yükler. (PR #2797)
-
transceiver.[[Receiver]].[[LastStableStateReceiverTransport]]değerinitransceiver.[[Receiver]].[[ReceiverTransport]]olarak ayarlayın. -
transceiver.[[Receiver]].[[LastStableStateAssociatedRemoteMediaStreams]]değerinitransceiver.[[Receiver]].[[AssociatedRemoteMediaStreams]]olarak ayarlayın. -
transceiver.[[Receiver]].[[LastStableStateReceiveCodecs]]değerinitransceiver.[[Receiver]].[[ReceiveCodecs]]olarak ayarlayın. - Eğer
remotefalseise, aşağıdaki adımlardan birini çalıştırın: - Eğer
description"offer" türündeyse,connection.[[PendingLocalDescription]]değerinidescription’dan oluşturulmuş yeni birRTCSessionDescriptionnesnesine ayarlayın,connection.[[SignalingState]]değerini "have-local-offer" olarak ayarlayın ve erken adayları serbest bırakın. - Eğer
description"answer" türündeyse, bu bir teklif-yanıt müzakeresini tamamlar.connection.[[CurrentLocalDescription]]değerinidescription’dan oluşturulmuş yeni birRTCSessionDescriptionnesnesine ayarlayın veconnection.[[CurrentRemoteDescription]]değeriniconnection.[[PendingRemoteDescription]]olarak ayarlayın. Hemconnection.[[PendingRemoteDescription]]hem deconnection.[[PendingLocalDescription]]değerlerininullolarak ayarlayın. Hemconnection.[[LastCreatedOffer]]hem deconnection.[[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çbiridescriptioniçinde yoksa,connection.[[LocalIceCredentialsToReplace]]değerini boş bir küme olarak ayarlayın. - Eğer
description"pranswer" türündeyse,connection.[[PendingLocalDescription]]değerinidescription’dan oluşturulmuş yeni birRTCSessionDescriptionnesnesine ayarlayın,connection.[[SignalingState]]değerini "have-local-pranswer" olarak ayarlayın ve erken adayları serbest bırakın. - Aksi halde, (
remotetrueise) aşağıdaki adımlardan birini çalıştırın: - Eğer
description"offer" türündeyse,connection.[[PendingRemoteDescription]]özniteliğinidescription’dan oluşturulmuş yeni birRTCSessionDescriptionnesnesine ayarlayın veconnection.[[SignalingState]]değerini "have-remote-offer" olarak ayarlayın. - Eğer
description"answer" türündeyse, bu bir teklif-yanıt müzakeresini tamamlar.connection.[[CurrentRemoteDescription]]değerinidescription’dan oluşturulmuş yeni birRTCSessionDescriptionnesnesine ayarlayın veconnection.[[CurrentLocalDescription]]değeriniconnection.[[PendingLocalDescription]]olarak ayarlayın. Hemconnection.[[PendingRemoteDescription]]hem deconnection.[[PendingLocalDescription]]değerlerininullolarak ayarlayın. Hemconnection.[[LastCreatedOffer]]hem deconnection.[[LastCreatedAnswer]]değerlerini""olarak ayarlayın veconnection.[[SignalingState]]değerini "stable" olarak ayarlayın. Son olarak,connection.[[LocalIceCredentialsToReplace]]içindeki ICE kimlik bilgilerinin hiçbiri yeni ayarlananconnection.[[CurrentLocalDescription]]içinde yoksa,connection.[[LocalIceCredentialsToReplace]]değerini boş bir küme olarak ayarlayın. - Eğer
description"pranswer" türündeyse,connection.[[PendingRemoteDescription]]değerinidescription’dan oluşturulmuş yeni birRTCSessionDescriptionnesnesine ayarlayın veconnection.[[SignalingState]]değerini "have-remote-pranswer" olarak ayarlayın. - 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ğerininullolarak ayarlayın. trackEventInits,muteTracks,addList,removeListveerrorListboş listeler olsun.- Eğer
description"answer" veya "pranswer" türündeyse, aşağıdaki adımları çalıştırın: - 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 ancakmax-message-sizeSDP özniteliği güncellenmişse,connection.[[SctpTransport]]’un veri azami mesaj boyutunu güncelleyin. - Eğer
descriptionSCTP taşımasının DTLS rolünü müzakere ediyorsa,iddeğerinullolan herRTCDataChannel(channel) için aşağıdaki adımı çalıştırın: - [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 vechannnel’ıerrorList’e ekleyin. - Eğer
description"rollback" türünde değilse, aşağıdaki adımları çalıştırın: - Eğer
remotefalseise,descriptioniçindeki her medya tanımı için aşağıdaki adımları çalıştırın:
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.
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.
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.
Aday Düzeltmesi 26: createAnswer()’ın kodlamalarını ve sLD(answer) içindeki SendEncodings’i buda. (PR #2801)
- Eğer medya tanımı henüz bir
RTCRtpTransceivernesnesiyle ilişkilendirilmemişse, aşağıdaki adımları çalıştırın: transceiver, medya tanımını oluşturmak için kullanılanRTCRtpTransceiverolsun.transceiver.[[Mid]]değerinitransceiver.[[JsepMid]]olarak ayarlayın.- Eğer
transceiver.[[Stopped]]trueise, bu alt adımları sonlandırın. - Eğer medya tanımı, [RFC8843]’e göre mevcut bir
mediamedya taşımasını kullandığını gösteriyorsa,transport, o taşımanın RTP/RTCP bileşenini temsil edenRTCDtlsTransportnesnesi olsun. - Aksi halde,
transport, yeni bir temelRTCIceTransportile yeni oluşturulmuş birRTCDtlsTransportnesnesi olsun. -
transceiver.[[Sender]].[[SenderTransport]]değerinitransportolarak ayarlayın. -
transceiver.[[Receiver]].[[ReceiverTransport]]değerinitransportolarak ayarlayın. transceiver, medya tanımıyla ilişkiliRTCRtpTransceiverolsun.- Eğer
transceiver.[[Stopped]]trueise, bu alt adımları sonlandırın. direction,mediamedya tanımından yönü temsil eden birRTCRtpTransceiverDirectiondeğeri olsun.- Eğer
direction"sendrecv" veya "recvonly" ise,transceiver.[[Receptive]]değerinitrueolarak ayarlayın; aksi haldefalseolarak ayarlayın. -
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.
direction "sendonly" veya "inactive" ise, alıcı
hiçbir şey almaya hazır değildir ve liste boş olacaktır.
- Eğer
description"answer" veya "pranswer" türündeyse, aşağıdaki adımları çalıştırın:
transceiver.[[Sender]].[[SendEncodings]].length
1’den büyükse, aşağıdaki adımları çalıştırın:
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.
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.
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.transceiver ve
muteTracks verilerek işleyin.
transceiver.[[CurrentDirection]] ve
transceiver.[[FiredDirection]] değerlerini
direction olarak ayarlayın.
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)
- Eğer
descriptiontü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 birRTCRtpEncodingParameterssözlüğü oluştur;ridüyesini ilgili riddeğerdeğerine göre doldur (virgülle ayrılmış alternatifler varsa yalnızca ilk değeri kullanarak) vesendEncodingsproposedSendEncodings’inlisteoluşturulan sözlükleri içeren liste olmasına izin ver. Aksi halde,sendEncodingsproposedSendEncodings’inbirboş bir liste olmasına izin ver. proposedSendEncodingsiçindeki her birencodingiçin, ters sırada, eğerencoding’inrid’iproposedSendEncodingsiçindeki başka bir kodlamanınkiyle eşleşiyorsa,encoding’iproposedSendEncodings’den kaldır.supportedEncodings, uygulamanın destekleyebileceği azami kodlama sayısı olsun. EğersendEncodingsproposedSendEncodingsuzunluğusupportedEncodings’ten büyükse,sendEncodingsproposedSendEncodings’i uzunluğusupportedEncodingsolacak şekilde kısalt.- Eğer
sendEncodingsproposedSendEncodingsboş değilse, her bir kodlamanınscaleResolutionDownBydeğerini2^(sendEncodingsproposedSendEncodings`uzunluğu - kodlama indeksi - 1)olarakayarlaayarla. - \
RFC8829[RFC9429] (bölüm 5.10.) tarafından tanımlandığı üzere, medya tanımını temsil etmek için mevcut birRTCRtpTransceivernesnesi,transceiver, bulmaya çalış. - Uygun bir transceiver bulunduysa (
transceiverayarlanmışsa) vesendEncodingsproposedSendEncodingsboş değilse,transceiver.[[Sender]].[[SendEncodings]]aşağıdaki adımları çalıştır:sendEncodingsolarak ayarla vetransceiver.[[Sender]].[[LastReturnedParameters]]’ınullolarak ayarla. - Eğer
transceiver.[[Sender]].[[SendEncodings]]uzunluğu1ise ve tek kodlama birridüyesi içermiyorsa,transceiver.[[Sender]].[[SendEncodings]]’iproposedSendEncodingsolarak ayarla vetransceiver.[[Sender]].[[LastReturnedParameters]]’ınullolarak ayarla. - Uygun bir transceiver bulunamadıysa (
transceiverayarlanmamışsa), aşağıdaki adımları çalıştır: medyamedya tanımındansendEncodingsproposedSendEncodingskullanarak bir RTCRtpSender,sender, oluştur.medyamedya tanımından bir RTCRtpReceiver,receiver, oluştur.sender,receiverve "recvonly" değerine sahip birRTCRtpTransceiverDirectionile bir RTCRtpTransceiver oluştur ve sonucutransceiverolarak adlandır.transceiver’ıconnection’ın transceiver kümesine ekle.- Eğer
descriptiontürü "answer" veya "pranswer" ise vetransceiver.[[Sender]].[[SendEncodings]].length1’den büyükse, aşağıdaki adımları çalıştır: - Eğer
descriptionsimulcast’in desteklenmediğini ya da istenmediğini belirtiyorsa veyadescriptiondaha ö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. - Eğer
descriptionreddediyorsasunulandaha önce müzakere edilmiş katmanlardan herhangi birini içermiyorsa,o haldeo haldetransceiver.[[Sender]].[[SendEncodings]]içinden eksik katmanlara karşılık gelen sözlükleri kaldır. - [RFC8853] tarafından belirtildiği şekilde her bir simulcast katmanının duraklatılmış durumunu,
transceiver.[[Sender]].[[SendEncodings]] içindeki ilgili sözlüklerdeactiveüyesini duraklatılmamış olanlar içintrue, duraklatılmış olanlar içinfalseyaparak güncelle. transceiver.[[Mid]]’itransceiver.[[JsepMid]]olarak ayarla.direction,medyamedya tanımından gelen yönü temsil eden birRTCRtpTransceiverDirectiondeğ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.- Eğer
direction"sendrecv" veya "recvonly" ise,msids, medya tanımınıntransceiver.[[Receiver]].[[ReceiverTrack]]’in ilişkilendirileceğini belirttiği MSID’lerin bir listesi olsun. Aksi halde,msidsboş bir liste olsun.
msids boş bir liste olacaktır.
transceiver,direction,msids,addList,removeListvetrackEventInitsile uzak izleri işle.-
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. - Eğer
descriptiontürü "answer" veya "pranswer" ise, aşağıdaki adımları çalıştır: -
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. transceiver.[[CurrentDirection]]ve’itransceiver.[[Direction]]sdirectionolarak ayarla.transport, [RFC8843] uyarıncatransceiver’ın ilişkili medya tanımı tarafından kullanılanmedyamedya taşımasının RTP/RTCP bileşenini temsil edenRTCDtlsTransportnesnesi olsun.-
transceiver.[[Sender]].[[SenderTransport]]’ıtransportolarak ayarla. -
transceiver.[[Receiver]].[[ReceiverTransport]]’ıtransportolarak ayarla. transport’un[[IceRole]]değerini [RFC8445] kurallarına göre ayarla.
- Eğer
[[IceRole]]unknowndeğilse,[[IceRole]]’ü değiştirme. - Eğer
descriptionyerel bir teklifse,controllingolarak ayarla. - Eğer
descriptionuzak bir teklifse vea=ice-liteiçeriyorsa,[[IceRole]]’ücontrollingolarak ayarla. - Eğer
descriptionuzak bir teklifse vea=ice-liteiçermiyorsa,[[IceRole]]’ücontrolledolarak ayarla.
Bu, ilk teklif işlendiğinde [[IceRole]]’ün her zaman bir
değere sahip olmasını sağlar.
- Eğer medya tanımı reddedilmişse ve
transceiver.[[Stopped]]falseise, RTCRtpTransceivertransceiver’ı durdur. - Aksi halde, (
descriptiontürü "rollback" ise) aşağıdaki adımları çalıştır: pendingDescription,connection.[[PendingLocalDescription]]veyaconnection.[[PendingRemoteDescription]]’dannullolmayanı olsun.connection’ın transceiver kümesindeki her birtransceiveriçin aşağıdaki adımları çalıştır:- Eğer
transceiver,pendingDescriptionayarlanmadan önce bir medya tanımıyla ilişkilendirilmemişse, ilişkilendirmeyi kaldır ve hemtransceiver.[[JsepMid]]hem detransceiver.[[Mid]]’inullolarak ayarla. -
transceiver.[[Sender]].[[SenderTransport]]’ıtransceiver.[[Sender]].[[LastStableStateSenderTransport]]olarak ayarla. - Aday Düzeltmesi 13: Geri alma, sRD(simulcastOffer) tarafından ezilen rid’siz kodlamayı geri yükler. (PR #2797)
-
transceiver.[[Receiver]].[[ReceiverTransport]]’ıtransceiver.[[Receiver]].[[LastStableStateReceiverTransport]]olarak ayarla. -
transceiver.[[Receiver]].[[ReceiveCodecs]]’itransceiver.[[Receiver]].[[LastStableStateReceiveCodecs]]olarak ayarla. - Eğer
connection.[[SignalingState]]"have-remote-offer" ise, aşağıdaki alt adımları çalıştır: msids,transceiver.[[Receiver]].[[LastStableStateAssociatedRemoteMediaStreams]]içindeki tümMediaStreamnesnelerininid’lerinden oluşan bir liste veya yoksa boş bir liste olsun.transceiver,transceiver.[[CurrentDirection]],msids,addList,removeListvetrackEventInitsile uzak izleri işle.- Eğer
transceiver,pendingDescriptionayarlandığında oluşturulduysa veaddTrack()aracılığıyla ona hiç bir iz eklenmemişse, RTCRtpTransceivertransceiver’ı durdur veconnection’ın transceiver kümesinden kaldır. connection.[[PendingLocalDescription]]veconnection.[[PendingRemoteDescription]]’ınullolarak ayarla veconnection.[[SignalingState]]’i "stable" olarak ayarla.- Eğer
descriptiontürü "answer" ise, aşağıdaki adımları çalıştır: connection’ın transceiver kümesindeki her birtransceiveriçin aşağıdaki adımları çalıştır:- Eğer
transceiverstoppedise, bir m= bölümüyle ilişkilendirilmişse ve ilişkili m= bölümüconnection.[[CurrentLocalDescription]]veyaconnection.[[CurrentRemoteDescription]]içinde reddedilmişse,transceiver’ıconnection’ın transceiver kümesinden kaldır. - Eğer
connection.[[SignalingState]]artık "stable" ise, aşağıdaki adımları çalıştır: - Önceki bir adımda transceiver kümesinden kaldırılmış olan herhangi bir
transceiveriçin, taşıyıcılarından (transceiver.[[Sender]].[[SenderTransport]]veyatransceiver.[[Receiver]].[[ReceiverTransport]]) herhangi biri hâlâ kapatılmamışsa ve artık durdurulmamış bir transceiver tarafından referans edilmiyorsa,RTCDtlsTransport’ları ve bunlarla ilişkiliRTCIceTransport’ları kapat. Bu, kuyruğa alınmış bir görevde bu nesneler üzerinde olayların tetiklenmesine neden olur. - Aday Eklemesi 49: RTCRtpEncodingParameters’a codec ekle (PR #2985)
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.
| 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ı