← 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.6 RTCIceTransport Arayüzü

RTCIceTransport arayüzü, paketlerin gönderilip alındığı ICE taşıması hakkında bir uygulamanın bilgiye erişmesine olanak tanır. Özellikle ICE, uygulamanın erişmek isteyebileceği durumları içeren eşler arası bağlantıları yönetir. RTCIceTransport nesneleri, setLocalDescription() ve setRemoteDescription() çağrıları sonucunda oluşturulur. Alttaki ICE durumu ICE aracısı tarafından yönetilir; bu nedenle bir RTCIceTransport’ın durumu, ICE aracısı aşağıda açıklandığı şekilde kullanıcı aracısına göstergeler sağladığında değişir. Her bir RTCIceTransport nesnesi, belirli bir RTCRtpTransceiver’ın RTP veya RTCP component’i için ICE taşıma katmanını ya da [RFC8843] aracılığıyla böyle bir grubun müzakere edilmesi durumunda bir RTCRtpTransceiver grubunu temsil eder.

Mevcut bir RTCRtpTransceiver için bir ICE yeniden başlatması, yeni bir nesneyle temsil edilmek yerine, state değeri buna göre güncellenecek olan mevcut bir RTCIceTransport nesnesiyle temsil edilir.

ICE aracısı, bir RTCPeerConnection connection ile ilişkili bir RTCIceTransport transport için bir aday neslinin toplanmasına başladığını belirttiğinde, kullanıcı aracısı aşağıdaki adımları çalıştıran bir görevi kuyruğa almalıdır (MUST):

  1. connection, bu ICE aracısı ile ilişkili RTCPeerConnection nesnesi olsun.
  2. connection.[[IsClosed]] değeri true ise, bu adımları sonlandır.
  3. transport, aday toplanmasının başladığı RTCIceTransport olsun.
  4. transport.[[IceGathererState]] değerini gathering olarak ayarla.

.

  1. connection.[[IceGatheringState]] değerini, RTCIceGatheringState enum’u tarafından tanımlandığı şekilde yeni bir durum değeri türetilerek ayarla.
  2. connectionIceGatheringStateChanged, önceki adımda connection.[[IceGatheringState]] değiştiyse true, aksi hâlde false olsun.
  3. Bu noktadan sonra durumu okuma veya değiştirme.
  4. transport üzerinde gatheringstatechange adlı bir olay tetikle.
  5. connection’ın ICE toplanma durumunu güncelle.
  6. Eğer connectionIceGatheringStateChanged true ise, connection üzerinde icegatheringstatechange adlı bir olay tetikle.

ICE aracısı, bir RTCPeerConnection connection ile ilişkili bir RTCIceTransport transport için bir aday neslinin toplanmasını tamamladığında ve bu adaylar uygulamaya sunulduğunda, kullanıcı aracısı aşağıdaki adımları çalıştırmak üzere bir görevi kuyruğa almalıdır (MUST):

  1. connection, bu ICE aracısı ile ilişkili RTCPeerConnection nesnesi olsun.
  2. connection.[[IsClosed]] değeri true ise, bu adımları sonlandır.
  3. transport, aday toplanmasının tamamlandığı RTCIceTransport olsun.
  4. connection.[[PendingLocalDescription]] null değilse ve toplanmanın tamamlandığı ICE neslini temsil ediyorsa, a=end-of-candidates değerini connection.[[PendingLocalDescription]].sdp içine ekle.
  5. connection.[[CurrentLocalDescription]] null değilse ve toplamaların tamamlandığı ICE neslini temsil ediyorsa, connection.[[CurrentLocalDescription]].sdp’ye a=end-of-candidates ekleyin.
  6. newCandidateendOfGatheringCandidate, sdpMid ve sdpMLineIndex değerleri bu RTCIceTransport ile ilişkili değerlere ayarlanmış, usernameFragment değeri toplamaların tamamlandığı aday neslinin kullanıcı adı parçasına ayarlanmış ve candidate değeri boş bir dizeye"" ayarlanmış yeni bir sözlükle bir RTCIceCandidate oluşturmanın sonucu olsun.
  7. RTCPeerConnectionIceEvent arayüzünü kullanarak, candidate özniteliği newCandidateendOfGatheringCandidate olarak ayarlanmış icecandidate adlı bir olayı connection üzerinde tetikleyin.

  1. Başka bir aday nesli hâlâ toplanıyorsa, bu adımları durdurun.
Bu durum, ICE aracısı önceki aday neslini hâlâ toplarken bir ICE yeniden başlatması başlatılırsa ortaya çıkabilir.
  1. transport.[[IceGathererState]] değerini complete olarak ayarlayın.
  2. transport üzerinde gatheringstatechange adlı bir olayı tetikleyin.
  3. connection için ICE toplama durumunu güncelleyin.

ICE aracısı yukarıdaki görevi sıraya aldığında ve başka hiçbir aday nesli toplanmıyorken, kullanıcı aracısı aşağıdaki adımları çalıştıracak ikinci bir görevi de MUST sıraya almalıdır:

ICE aracısı önceki aday neslini hâlâ toplarken bir ICE yeniden başlatması başlatıldıysa, diğer aday nesilleri hâlâ toplanıyor olabilir.
  1. connection.[[IsClosed]] true ise, bu adımları durdurun.
  2. transport.[[IceGathererState]] değerini complete olarak ayarlayın.
  3. connection.[[IceGatheringState]] değerini, RTCIceGatheringState enum’u tarafından açıklandığı şekilde yeni bir durum değeri türetilerek ayarlayın.
  4. Önceki adımda connection.[[IceGatheringState]] değiştiyse connectionIceGatheringStateChanged değerini true, aksi halde false olarak ayarlayın.
  5. Bu noktadan sonra durumu okumayın veya değiştirmeyin.
  6. transport üzerinde gatheringstatechange adlı bir olayı tetikleyin.
  7. connectionIceGatheringStateChanged true ise, connection üzerinde icegatheringstatechange adlı bir olayı tetikleyin.
  8. RTCPeerConnectionIceEvent arayüzünü kullanarak, candidate özniteliği null olarak ayarlanmış icecandidate adlı bir olayı connection üzerinde tetikleyin.
Null aday olayı, eski sürümlerle uyumluluğu sağlamak için tetiklenir. Yeni kod, RTCIceTransport ve/veya RTCPeerConnection için toplama durumunu izlemelidir.

ICE aracısı, bir ICE aday havuzundan alarak ya da sıfırdan toplayarak bir RTCIceTransport için yeni bir ICE adayının kullanılabilir olduğunu belirttiğinde, kullanıcı aracısı aşağıdaki adımları çalıştıran bir görevi MUST sıraya almalıdır:

  1. candidate, kullanılabilir ICE adayı olsun.
  2. connection, bu ICE aracısı ile ilişkili RTCPeerConnection nesnesi olsun.
  3. connection.[[IsClosed]] true ise, bu adımları durdurun.
  4. connection.[[PendingLocalDescription]] veya connection.[[CurrentLocalDescription]] değerlerinden herhangi biri null değilse ve candidate’in toplandığı ICE neslini temsil ediyorsa, candidate ve connection ile adayı yüzeye çıkarın ve bu adımları durdurun.
  5. Aksi halde, candidate’i connection.[[EarlyCandidates]] listesine ekleyin.

ICE aracısı, [RFC8445] bölüm 7.3.1.1 uyarınca rol çakışması olan bir ICE bağlama isteği nedeniyle ICE rolünün değiştiğini bildirdiğinde, UA [[IceRole]] değerini yeni değere ayarlamak için bir görevi sıraya alır.

Bir connection’ın erken adaylarını serbest bırakmak için aşağıdaki adımları çalıştırın:

  1. connection.[[EarlyCandidates]] içindeki her bir candidate için, candidate ve connection ile adayı yüzeye çıkaracak bir görevi sıraya alın.
  2. connection.[[EarlyCandidates]] değerini boş bir listeye ayarlayın.

Bir adayı candidate ve connection ile yüzeye çıkarmak için aşağıdaki adımları çalıştırın:

  1. connection.[[IsClosed]] true ise, bu adımları durdurun.
  2. transport, candidate’in kullanılabilir hâle getirildiği RTCIceTransport olsun.
  3. connection.[[PendingLocalDescription]] null değilse ve candidate’in toplandığı ICE neslini temsil ediyorsa, candidate’i connection.[[PendingLocalDescription]].sdp’ye ekleyin.
  4. connection.[[CurrentLocalDescription]] null değilse ve candidate’in toplandığı ICE neslini temsil ediyorsa, candidate’i connection.[[CurrentLocalDescription]].sdp’ye ekleyin.
  5. newCandidate, sdpMid ve sdpMLineIndex değerleri bu RTCIceTransport ile ilişkili değerlere ayarlanmış, usernameFragment değeri adayın kullanıcı adı parçasına ayarlanmış ve candidate değeri candidate’i temsil etmek üzere candidate-attribute dilbilgisi kullanılarak kodlanmış bir dizeye ayarlanmış yeni bir sözlükle bir RTCIceCandidate oluşturmanın sonucu olsun.
  6. newCandidate’i transport’un yerel adaylar kümesine ekleyin.
  7. RTCPeerConnectionIceEvent arayüzünü kullanarak, candidate özniteliği newCandidate olarak ayarlanmış icecandidate adlı bir olayı connection üzerinde tetikleyin.

Bir RTCIceTransport’un RTCIceTransportState değeri, kullanılabilir bir bağlantıya sahip bir aday çiftinin bulunup seçilmesi nedeniyle değişebilir veya seçilen aday çifti değişmeden de değişebilir. Seçilen çift ve RTCIceTransportState birbiriyle ilişkilidir ve aynı görev içinde ele alınır.

ICE aracısı, bir RTCIceTransport’un seçilen aday çiftini, RTCIceTransportState değerini ya da her ikisini birden değiştirdiğini belirttiğinde, kullanıcı aracısı seçilen aday çiftini ve durumu değiştirmek için aşağıdaki adımları çalıştıran bir görevi MUST sıraya almalıdır:

  1. connection, bu ICE aracısı ile ilişkili RTCPeerConnection nesnesi olsun.
  2. connection.[[IsClosed]] true ise, bu adımları durdurun.
  3. transport, durumu değişen RTCIceTransport olsun.
  4. selectedCandidatePairChanged değeri false olsun.
  5. transportIceConnectionStateChanged değeri false olsun.
  6. connectionIceConnectionStateChanged değeri false olsun.
  7. connectionStateChanged değeri false olsun.
  8. transport’un seçilen aday çifti değiştirildiyse, aşağıdaki adımları çalıştırın:
  9. newCandidatePair, eğer bir çift seçilmişse belirtilen çiftin yerel ve uzak adaylarını temsil eden local ve remote ile, aksi halde null ile bir RTCIceCandidatePair oluşturmanın sonucu olsun.
  10. transport.[[SelectedCandidatePair]] değerini newCandidatePair olarak ayarlayın.
  11. selectedCandidatePairChanged değerini true olarak ayarlayın.
  12. transport’un RTCIceTransportState değeri değiştirildiyse, aşağıdaki adımları çalıştırın:
  13. transport.[[IceTransportState]] değerini belirtilen yeni RTCIceTransportState olarak ayarlayın.
  14. transportIceConnectionStateChanged değerini true olarak ayarlayın.
  15. connection.[[IceConnectionState]] değerini, RTCIceConnectionState enum’u tarafından açıklandığı şekilde yeni bir durum değeri türeterek ayarlayın.
  16. Önceki adımda connection.[[IceConnectionState]] değiştiyse, connectionIceConnectionStateChanged değerini true olarak ayarlayın.
  17. connection.[[ConnectionState]] değerini, RTCPeerConnectionState enum’u tarafından açıklandığı şekilde yeni bir durum değeri türeterek ayarlayın.
  18. Önceki adımda connection.[[ConnectionState]] değiştiyse, connectionStateChanged değerini true olarak ayarlayın.
  19. selectedCandidatePairChanged true ise, transport üzerinde selectedcandidatepairchange adlı bir olayı tetikleyin.
  20. transportIceConnectionStateChanged true ise, transport üzerinde statechange adlı bir olayı tetikleyin.
  21. connectionIceConnectionStateChanged true ise, connection üzerinde iceconnectionstatechange adlı bir olayı tetikleyin.
  22. connectionStateChanged true ise, connection üzerinde connectionstatechange adlı bir olayı tetikleyin.

Bir RTCIceTransport nesnesi aşağıdaki dahili yuvalara sahiptir:

  • [[IceTransportState]] başlangıç değeri "new"
  • [[IceGathererState]] başlangıç değeri "new"
  • [[SelectedCandidatePair]] başlangıç değeri null
  • [[IceRole]] başlangıç değeri "unknown"
WebIDL[Exposed=Window]
                        interface RTCIceTransport : EventTarget {
                          readonly attribute RTCIceRole role;
                          readonly attribute RTCIceComponent component;
                          readonly attribute RTCIceTransportState state;
                          readonly attribute RTCIceGathererState gatheringState;
                          sequence<RTCIceCandidate> getLocalCandidates();
                          sequence<RTCIceCandidate> getRemoteCandidates();
                          RTCIceCandidatePair? getSelectedCandidatePair();
                          RTCIceParameters? getLocalParameters();
                          RTCIceParameters? getRemoteParameters();
                          attribute EventHandler onstatechange;
                          attribute EventHandler ongatheringstatechange;
                          attribute EventHandler onselectedcandidatepairchange;
                        };

Öznitelikler

role türü RTCIceRole, salt okunur

role özniteliği, alınırken, MUST [[IceRole]] dahili yuvasının değerini döndürmelidir.

component türü RTCIceComponent, salt okunur

component özniteliği, taşımanın ICE bileşenini MUST döndürmelidir. RTCP mux kullanıldığında, tek bir RTCIceTransport hem RTP hem de RTCP’yi taşır ve component değeri "rtp" olarak ayarlanır.

state türü RTCIceTransportState, salt okunur

state özniteliği, alınırken, MUST [[IceTransportState]] yuvasının değerini döndürmelidir.

gatheringState türü RTCIceGathererState, salt okunur

gatheringState özniteliği, alınırken, MUST [[IceGathererState]] yuvasının değerini döndürmelidir.

onstatechange türü EventHandler

Olay işleyici türü statechange olan bu olay işleyicisi, RTCIceTransport state değeri her değiştiğinde MUST tetiklenmelidir.

ongatheringstatechange türü EventHandler

Olay işleyici türü gatheringstatechange olan bu olay işleyicisi, RTCIceTransport’un [[IceGathererState]] değeri her değiştiğinde MUST tetiklenmelidir.

onselectedcandidatepairchange türü EventHandler

Olay işleyici türü selectedcandidatepairchange olan bu olay işleyicisi, RTCIceTransport’un seçilen aday çifti her değiştiğinde MUST tetiklenmelidir.

Yöntemler

getLocalCandidates

Bu RTCIceTransport için toplanan ve onicecandidate içinde gönderilen yerel ICE adaylarını tanımlayan bir dizi döndürür.

getRemoteCandidates

Bu RTCIceTransport tarafından addIceCandidate() aracılığıyla alınan uzak ICE adaylarını tanımlayan bir dizi döndürür.

getRemoteCandidates, eşler arası yansıtmalı (peer reflexive) adayları açığa çıkarmaz; çünkü bunlar addIceCandidate() aracılığıyla alınmaz.
getSelectedCandidatePair

Paketlerin gönderildiği seçilen aday çiftini döndürür. Bu yöntem MUST [[SelectedCandidatePair]] yuvasının değerini döndürmelidir. RTCIceTransport.state "new" veya "closed" olduğunda getSelectedCandidatePair null döndürür.

getLocalParameters

Bu RTCIceTransport tarafından setLocalDescription aracılığıyla alınan yerel ICE parametrelerini döndürür veya parametreler henüz alınmadıysa null döndürür.

getRemoteParameters

Bu RTCIceTransport tarafından setRemoteDescription aracılığıyla alınan uzak ICE parametrelerini döndürür veya parametreler henüz alınmadıysa null döndürür.

5.6.1 RTCIceParameters Sözlüğü

WebIDLdictionary RTCIceParameters {
                          DOMString usernameFragment;
                          DOMString password;
                        };

RTCIceParameters Sözlüğü Üyeleri

usernameFragment · DOMString

[RFC5245], Bölüm 7.1.2.3’te tanımlandığı şekilde ICE kullanıcı adı parçası.

password · DOMString

[RFC5245], Bölüm 7.1.2.3’te tanımlandığı şekilde ICE parolası.

5.6.2 RTCIceCandidatePair Sözlüğü

5.6.2 RTCIceCandidatePair Arayüzü

Bu arayüz, [RFC8445] Bölüm 4’te tanımlanan bir ICE aday çiftini temsil eder. Bir RTCIceCandidatePair, bir yerel ve bir uzak RTCIceCandidate eşleşmesidir.

local ve remote olan RTCIceCandidate nesneleriyle bir RTCIceCandidatePair oluşturmak için aşağıdaki adımları çalıştırın:

  1. candidatePair, yeni oluşturulmuş bir RTCIceCandidatePair nesnesi olsun.
  2. candidatePair’in [[Local]] adlı bir dahili yuvası olsun ve local ile başlatılsın.
  3. candidatePair’in [[Remote]] adlı bir dahili yuvası olsun ve remote ile başlatılsın.
  4. candidatePair’i döndürün.
dictionary [Exposed=Window]
                        interface RTCIceCandidatePair {
                          [SameObject] readonly attribute RTCIceCandidate local;
                          [SameObject] readonly attribute RTCIceCandidate remote;
                        };

RTCIceCandidatePair Sözlüğü Üyeleri

Öznitelikler

local türü RTCIceCandidate, salt okunur

Yerel ICE adayı.
local özniteliği, alınırken, MUST [[Local]] dahili yuvasının değerini döndürmelidir.

remote türü RTCIceCandidate, salt okunur

Uzak ICE adayı.
remote özniteliği, alınırken, MUST [[Remote]] dahili yuvasının değerini döndürmelidir.

5.6.3 RTCIceGathererState Enum’u

WebIDLenum RTCIceGathererState {
                          "new",
                          "gathering",
                          "complete"
                        };
Enum değeri Açıklama
new RTCIceTransport yeni oluşturulmuştur ve henüz aday toplamaya başlamamıştır.
gathering RTCIceTransport adayları toplama sürecindedir.
complete RTCIceTransport toplamayı tamamlamıştır ve bu taşıma için end-of-candidates göstergesi gönderilmiştir. Bir ICE yeniden başlatması onu yeniden başlatmadıkça tekrar aday toplamaz.

: RTCIceGathererState Numaralandırma açıklaması

5.6.4 RTCIceTransportState Enum’u

WebIDLenum RTCIceTransportState {
                          "closed",
                          "failed",
                          "disconnected",
                          "new",
                          "checking",
                          "completed",
                          "connected"
                        };
Enum değeri Açıklama
closed RTCIceTransport kapatılmıştır ve artık STUN isteklerine yanıt vermemektedir.
failed RTCIceTransport aday toplama işlemini tamamlamış, artık uzak aday kalmadığına dair bir gösterge almış, tüm aday çiftlerini kontrol etmeyi bitirmiştir ve tüm çiftler ya bağlantı denetimlerinde başarısız olmuştur ya da onay (consent) kaybı yaşanmıştır; ayrıca ya hiç yerel aday toplanmamıştır ya da PAC zamanlayıcısının süresi dolmuştur [RFC8863]. Bu, ICE yeniden başlatılana kadar uç bir durumdur. Bir ICE yeniden başlatma işlemi bağlantının yeniden sağlanmasına neden olabileceğinden, "failed" durumuna girilmesi DTLS taşıyıcılarının, SCTP ilişkilerinin veya bunların üzerinde çalışan veri kanallarının kapanmasına ya da izlerin susturulmasına neden olmaz.
disconnected ICE aracısı, bu RTCIceTransport için bağlantının şu anda kaybolduğunu belirlemiştir. Bu, dengesiz bir ağda aralıklı olarak tetiklenebilen (ve herhangi bir işlem yapılmadan kendiliğinden düzelebilen) geçici bir durumdur. Bu durumun nasıl belirlendiği, uygulamaya bağlıdır. Örnekler şunları içerir:
- Kullanılan bağlantı için ağ arabiriminin kaybedilmesi.
- STUN isteklerine yanıt almanın tekrar tekrar başarısız olması.
Alternatif olarak, RTCIceTransport mevcut tüm aday çiftlerini kontrol etmeyi bitirmiş ve bir bağlantı bulamamıştır (veya daha önce başarılı olan onay denetimleri [RFC7675] artık başarısız olmuştur), ancak hâlâ ek uzak adaylar toplamakta ve/veya bunları beklemektedir.
new RTCIceTransport adayları toplamaktadır ve/veya uzak adayların sağlanmasını beklemektedir ve henüz denetlemeye başlamamıştır.
checking RTCIceTransport en az bir uzak aday almıştır (addIceCandidate() aracılığıyla veya bir STUN bağlama isteği alındığında eş-yansıtmalı (peer-reflexive) bir aday olarak keşfedilerek) ve aday çiftlerini kontrol etmektedir; ya henüz bir bağlantı bulmamıştır ya da daha önce başarılı olan tüm aday çiftlerinde onay denetimleri [RFC7675] başarısız olmuştur. Kontrol işlemlerine ek olarak, hâlâ aday topluyor da olabilir.
completed RTCIceTransport aday toplama işlemini tamamlamış, artık uzak aday kalmadığına dair bir gösterge almış, tüm aday çiftlerini kontrol etmeyi bitirmiş ve bir bağlantı bulmuştur. Eğer daha sonra tüm başarılı aday çiftlerinde onay denetimleri [RFC7675] başarısız olursa, durum "failed" durumuna geçer.
connected RTCIceTransport kullanılabilir bir bağlantı bulmuştur, ancak daha iyi bir bağlantı olup olmadığını görmek için diğer aday çiftlerini hâlâ kontrol etmektedir. Ayrıca hâlâ aday topluyor ve/veya ek uzak adayları bekliyor olabilir. Kullanımda olan bağlantıda onay denetimleri [RFC7675] başarısız olursa ve kullanılabilir başka başarılı aday çifti yoksa, durum "checking" (kontrol edilecek aday çiftleri kalmışsa) veya "disconnected" (kontrol edilecek aday çifti yoksa, ancak eş hâlâ aday topluyor ve/veya ek uzak adayları bekliyorsa) durumuna geçer.

: RTCIceTransportState Numaralandırmasının açıklaması {#rtcicetransportstate-description .simple link-for="RTCIceTransportState" dfn-for="RTCIceTransportState"}

Başarılı bir çağrı için en yaygın geçişler new -> checking -> connected -> completed şeklindedir; ancak belirli koşullar altında (yalnızca en son kontrol edilen adayın başarılı olması ve hem aday toplamanın hem de artık aday kalmadığına dair göstergenin başarıdan önce gerçekleşmesi durumunda) durum doğrudan "checking" durumundan "completed" durumuna geçebilir.

Bir ICE yeniden başlatma işlemi, aday toplama ve bağlantı denetimlerinin yeniden başlamasına neden olur; bu da "completed" durumunda başlatıldığında "connected" durumuna geçişe yol açar. Geçici "disconnected" durumunda başlatılırsa, "checking" durumuna geçişe neden olur ve önce bağlantının kaybolmuş olduğu bilgisini fiilen unutur.

"failed" ve "completed" durumları, ek uzak aday bulunmadığına dair bir gösterge gerektirir. Bu, addIceCandidate çağrısının candidate özelliği boş bir dizeye ayarlanmış bir aday değeriyle yapılmasıyla veya canTrickleIceCandidates değerinin false olarak ayarlanmasıyla belirtilebilir.

Bazı örnek durum geçişleri şunlardır:

  • (RTCIceTransport ilk kez oluşturulduğunda, setLocalDescription veya setRemoteDescription sonucunda): "new"
  • ("new", uzak adaylar alındığında): "checking"
  • ("checking", kullanılabilir bir bağlantı bulunduğunda): "connected"
  • ("checking", denetimler başarısız olur ancak toplama hâlâ devam ediyorsa): "disconnected"
  • ("checking", vazgeçildiğinde): "failed"
  • ("disconnected", yeni yerel adaylar olduğunda): "checking"
  • ("connected", tüm denetimler tamamlandığında): "completed"
  • ("completed", bağlantı kaybedildiğinde): "disconnected"
  • ("disconnected" veya "failed", ICE yeniden başlatma gerçekleştiğinde): "checking"
  • ("completed", ICE yeniden başlatma gerçekleştiğinde): "connected"
  • RTCPeerConnection.close(): "closed"
 Normatif olmayan ICE taşıma durumu geçiş diyagramı
Normatif olmayan ICE taşıma durumu geçiş diyagramı

5.6.5 RTCIceRole Enum

WebIDLenum RTCIceRole {
                          "unknown",
                          "controlling",
                          "controlled"
                        };
Enum değeri Açıklama
unknown [RFC5245], Bölüm 3’te tanımlandığı üzere rolü henüz belirlenmemiş bir aracı.
controlling [RFC5245], Bölüm 3’te tanımlandığı üzere denetleyici bir aracı.
controlled [RFC5245], Bölüm 3’te tanımlandığı üzere denetlenen bir aracı.

: RTCIceRole Numaralandırma açıklaması

5.6.6 RTCIceComponent Enum

WebIDLenum RTCIceComponent {
                          "rtp",
                          "rtcp"
                        };
Enum değeri Açıklama
rtp ICE Taşıması, [RFC5245], Bölüm 4.1.1.1’de tanımlandığı üzere RTP (veya RTCP çoğullama) için kullanılır. RTP ile çoğullanan protokoller (örn. veri kanalı) onun bileşen kimliğini paylaşır. Bu, candidate-attribute içinde kodlandığında component-id değeri 1’i temsil eder.
rtcp ICE Taşıması, [RFC5245], Bölüm 4.1.1.1’de tanımlandığı üzere RTCP için kullanılır. Bu, candidate-attribute içinde kodlandığında component-id değeri 2’yi temsil eder.

: RTCIceComponent Numaralandırma açıklaması