5. RTP Medya API
RTP medya API’si, bir web uygulamasının eşler arası bir bağlantı
üzerinden MediaStreamTrack’ler göndermesine ve almasına
olanak tanır. İzler bir RTCPeerConnection’a eklendiğinde
sinyalleşmeye yol açar; bu sinyalleşme uzak bir eşe iletildiğinde, uzak
tarafta karşılık gelen izlerin oluşturulmasına neden olur.
RTCPeerConnection tarafından gönderilen izler ile
diğeri tarafından alınan izler arasında bire bir (1:1) tam bir eşleşme
yoktur. Öncelikle, gönderilen izlerin kimlikleri alınan izlerin
kimlikleriyle eşleşmez. Ayrıca, replaceTrack, bir
RTCRtpSender tarafından gönderilen izi, alıcı tarafında
yeni bir iz oluşturmadan değiştirir; karşılık gelen
RTCRtpReceiver yalnızca tek bir ize sahip olur ve bu iz,
potansiyel olarak bir araya getirilmiş birden fazla medya kaynağını
temsil edebilir. Hem addTransceiver hem de
replaceTrack, aynı izin birden fazla kez gönderilmesine
neden olacak şekilde kullanılabilir; bu durum alıcı tarafında, her
biri kendi ayrı izine sahip birden fazla alıcı olarak gözlemlenir. Bu
nedenle, gerekirse RTCRtpTransceiver’ın
mid’i kullanılarak göndericiler ve alıcılar eşleştirilmek
suretiyle, bir taraftaki bir RTCRtpSender ile diğer
taraftaki bir RTCRtpReceiver’ın izi arasında bire bir bir
ilişki olduğunu düşünmek daha doğrudur.
Medya gönderilirken, göndericinin; SDP tarafından müzakere edilen zarf, kodlayıcının hizalama kısıtları ya da hatta CPU aşırı kullanım tespiti veya bant genişliği kestirimi gibi çeşitli gereksinimleri karşılamak için medyayı yeniden ölçeklendirmesi veya yeniden örneklemesi gerekebilir.
[RFC9429]’daki kurallara (bölüm 3.6.) uygun olarak, video AZALTILABİLİR. Girdi kaynağında meydana gelmemiş sahte veriler oluşturmak için medya BÜYÜTÜLMEMELİDİR; piksel sayıları üzerindeki kısıtları karşılamak için gerekli olanlar dışında medya KIRPILMAMALIDIR ve en-boy oranı DEĞİŞTİRİLMEMELİDİR.
Video, scaleResolutionDownBy sonucunda yeniden
ölçeklendirildiğinde, ortaya çıkan genişlik veya yüksekliğin bir tam
sayı olmadığı durumlar meydana gelebilir. Kullanıcı aracısı, bir
kodlayıcının asgari çözünürlüğüne uymak dışında,
scaleResolutionDownBy’dan elde edilen ölçeklenmiş genişlik
ve yüksekliğin
tam sayı kısmından
daha büyük video GÖNDERMEMELİDİR. Ölçeklenmiş genişlik veya
yüksekliğin tam sayı kısmının sıfır olması durumunda neyin gönderileceği
uygulamaya bağlıdır.
MediaStreamTrack’lerin gerçek kodlanması ve iletimi
RTCRtpSender olarak adlandırılan nesneler aracılığıyla
yönetilir. Benzer şekilde, MediaStreamTrack’lerin alınması
ve kod çözümü RTCRtpReceiver olarak adlandırılan nesneler
aracılığıyla yönetilir. Her RTCRtpSender en fazla bir izle
ilişkilidir ve alınacak her iz tam olarak bir
RTCRtpReceiver ile ilişkilidir.
Her bir MediaStreamTrack’in kodlanması ve iletimi,
özelliklerinin (video izleri için width,
height ve frameRate; ses izleri için
sampleSize, sampleRate ve
channelCount) makul bir ölçüde uzak tarafta oluşturulan iz
tarafından korunacak şekilde YAPILMALIDIR. Bunun geçerli
olmadığı durumlar vardır; örneğin her iki uçta ya da ağda kaynak
kısıtları olabilir veya uygulamanın farklı davranmasını talimatlandıran
RTCRtpSender ayarları uygulanmış olabilir.
Bir RTCPeerConnection nesnesi, eşleştirilmiş göndericileri
ve alıcıları bazı paylaşılan durumlarla temsil eden bir
RTCRtpTransceiver kümesi içerir. Bu küme,
RTCPeerConnection nesnesi oluşturulduğunda boş küme olarak
başlatılır. RTCRtpSender’lar ve
RTCRtpReceiver’lar her zaman bir
RTCRtpTransceiver ile aynı anda oluşturulur ve yaşam
süreleri boyunca ona bağlı kalırlar. RTCRtpTransceiver’lar,
uygulama addTrack() yöntemi aracılığıyla bir
MediaStreamTrack’i bir RTCPeerConnection’a
bağladığında örtük olarak ya da uygulama
addTransceiver yöntemini kullandığında açıkça oluşturulur.
Ayrıca, yeni bir medya tanımı içeren bir uzak tanım uygulandığında da
oluşturulurlar. Ek olarak, uzak uç noktanın gönderilecek medyası
olduğunu belirten bir uzak tanım uygulandığında, ilgili
MediaStreamTrack ve RTCRtpReceiver,
track olayı aracılığıyla uygulamaya sunulur.
Bir RTCRtpTransceiver’ın başka bir uç nokta ile medya
gönderebilmesi ve/veya alabilmesi için, her iki uç noktanın da aynı
medya tanımıyla ilişkilendirilmiş bir
RTCRtpTransceiver nesnesine sahip olacak şekilde SDP ile
müzakere edilmesi gerekir.
Bir teklif oluşturulurken, o uçtaki tüm transceiver’ları kapsayacak kadar medya tanımı üretilecektir. Bu teklif yerel tanım olarak ayarlandığında, ilişkilendirilmemiş tüm transceiver’lar teklifteki medya tanımlarıyla ilişkilendirilir.
Bir teklif uzak tanım olarak ayarlandığında, içindeki ve henüz bir
transceiver ile ilişkilendirilmemiş tüm medya tanımları yeni veya mevcut
bir transceiver ile ilişkilendirilir. Bu durumda yalnızca
addTrack() yöntemiyle oluşturulmuş ve
ilişkilendirilmemiş transceiver’lar ilişkilendirilebilir. Buna karşılık,
addTransceiver() yöntemiyle oluşturulmuş ve
ilişkilendirilmemiş transceiver’lar, uzak teklifte medya tanımları
mevcut olsa bile ilişkilendirilmez. Bunun yerine, yeterli sayıda
addTrack() ile oluşturulmuş transceiver yoksa,
yeni transceiver’lar oluşturulur ve ilişkilendirilir. Bu durum,
addTrack() ile oluşturulan ve
addTransceiver() ile oluşturulan
transceiver’ları, özniteliklerine bakılarak gözlemlenemeyen kritik bir
şekilde birbirinden ayırır.
Bir yanıt oluşturulurken, yalnızca teklifte mevcut olan medya tanımları
yanıtta listelenebilir. Bunun bir sonucu olarak, uzak teklif
ayarlanırken ilişkilendirilmemiş olan tüm transceiver’lar, yerel yanıt
ayarlandıktan sonra da ilişkilendirilmemiş olarak kalır. Bu durum,
yanıtlayanın bir takip teklifi oluşturmasıyla, başka bir teklif/yanıt
değişimini başlatmasıyla ya da addTrack() ile
oluşturulmuş transceiver’lar kullanılıyorsa, ilk değişimde yeterli
sayıda medya tanımının sunulduğundan emin olunmasıyla giderilebilir.
5.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.
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):
-
connection, bu ICE aracısı ile ilişkiliRTCPeerConnectionnesnesi olsun. -
connection.[[IsClosed]]değeritrueise, bu adımları sonlandır. -
transport, aday toplanmasının başladığıRTCIceTransportolsun. -
transport.[[IceGathererState]]değerinigatheringolarak ayarla.
.
-
connection.[[IceGatheringState]]değerini,RTCIceGatheringStateenum’u tarafından tanımlandığı şekilde yeni bir durum değeri türetilerek ayarla. -
connectionIceGatheringStateChanged, önceki adımdaconnection.[[IceGatheringState]]değiştiysetrue, aksi hâldefalseolsun. - Bu noktadan sonra durumu okuma veya değiştirme.
-
transportüzerindegatheringstatechangeadlı bir olay tetikle. connection’ın ICE toplanma durumunu güncelle.-
Eğer
connectionIceGatheringStateChangedtrueise,connectionüzerindeicegatheringstatechangeadlı 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):
-
connection, bu ICE aracısı ile ilişkiliRTCPeerConnectionnesnesi olsun. -
connection.[[IsClosed]]değeritrueise, bu adımları sonlandır. -
transport, aday toplanmasının tamamlandığıRTCIceTransportolsun. -
connection.[[PendingLocalDescription]]nulldeğilse ve toplanmanın tamamlandığı ICE neslini temsil ediyorsa,a=end-of-candidatesdeğeriniconnection.[[PendingLocalDescription]].sdp içine ekle. -
connection.[[CurrentLocalDescription]]nulldeğilse ve toplamaların tamamlandığı ICE neslini temsil ediyorsa,connection.[[CurrentLocalDescription]].sdp’yea=end-of-candidatesekleyin. -
newCandidateendOfGatheringCandidate,sdpMidvesdpMLineIndexdeğerleri buRTCIceTransportile ilişkili değerlere ayarlanmış,usernameFragmentdeğeri toplamaların tamamlandığı aday neslinin kullanıcı adı parçasına ayarlanmış vecandidatedeğeriboş bir dizeye""ayarlanmış yeni bir sözlükle bir RTCIceCandidate oluşturmanın sonucu olsun. -
RTCPeerConnectionIceEventarayüzünü kullanarak,candidateözniteliğinewCandidateendOfGatheringCandidateolarak ayarlanmışicecandidateadlı bir olayıconnectionüzerinde tetikleyin.
- Başka bir aday nesli hâlâ toplanıyorsa, bu adımları durdurun.
-
transport.[[IceGathererState]] değerinicompleteolarak ayarlayın. -
transportüzerindegatheringstatechangeadlı bir olayı tetikleyin. connectioniç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:
-
connection.[[IsClosed]]trueise, bu adımları durdurun. -
transport.[[IceGathererState]]değerinicompleteolarak ayarlayın. -
connection.[[IceGatheringState]]değerini,RTCIceGatheringStateenum’u tarafından açıklandığı şekilde yeni bir durum değeri türetilerek ayarlayın. -
Önceki adımda
connection.[[IceGatheringState]]değiştiyseconnectionIceGatheringStateChangeddeğerinitrue, aksi haldefalseolarak ayarlayın. - Bu noktadan sonra durumu okumayın veya değiştirmeyin.
-
transportüzerindegatheringstatechangeadlı bir olayı tetikleyin. -
connectionIceGatheringStateChangedtrueise,connectionüzerindeicegatheringstatechangeadlı bir olayı tetikleyin. -
RTCPeerConnectionIceEventarayüzünü kullanarak,candidateözniteliğinullolarak ayarlanmışicecandidateadlı bir olayıconnectionüzerinde tetikleyin.
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:
candidate, kullanılabilir ICE adayı olsun.-
connection, bu ICE aracısı ile ilişkiliRTCPeerConnectionnesnesi olsun. -
connection.[[IsClosed]]trueise, bu adımları durdurun. -
connection.[[PendingLocalDescription]]veyaconnection.[[CurrentLocalDescription]]değerlerinden herhangi birinulldeğilse vecandidate’in toplandığı ICE neslini temsil ediyorsa,candidateveconnectionile adayı yüzeye çıkarın ve bu adımları durdurun. -
Aksi halde,
candidate’iconnection.[[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:
-
connection.[[EarlyCandidates]]içindeki her bircandidateiçin,candidateveconnectionile adayı yüzeye çıkaracak bir görevi sıraya alın. -
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:
-
connection.[[IsClosed]]trueise, bu adımları durdurun. -
transport,candidate’in kullanılabilir hâle getirildiğiRTCIceTransportolsun. -
connection.[[PendingLocalDescription]]nulldeğilse vecandidate’in toplandığı ICE neslini temsil ediyorsa,candidate’iconnection.[[PendingLocalDescription]].sdp’ye ekleyin. -
connection.[[CurrentLocalDescription]]nulldeğilse vecandidate’in toplandığı ICE neslini temsil ediyorsa,candidate’iconnection.[[CurrentLocalDescription]].sdp’ye ekleyin. -
newCandidate,sdpMidvesdpMLineIndexdeğerleri buRTCIceTransportile ilişkili değerlere ayarlanmış,usernameFragmentdeğeri adayın kullanıcı adı parçasına ayarlanmış vecandidatedeğericandidate’i temsil etmek üzerecandidate-attributedilbilgisi kullanılarak kodlanmış bir dizeye ayarlanmış yeni bir sözlükle bir RTCIceCandidate oluşturmanın sonucu olsun. -
newCandidate’itransport’un yerel adaylar kümesine ekleyin. -
RTCPeerConnectionIceEventarayüzünü kullanarak,candidateözniteliğinewCandidateolarak ayarlanmışicecandidateadlı 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:
-
connection, bu ICE aracısı ile ilişkiliRTCPeerConnectionnesnesi olsun. -
connection.[[IsClosed]]trueise, bu adımları durdurun. -
transport, durumu değişenRTCIceTransportolsun. -
selectedCandidatePairChangeddeğerifalseolsun. -
transportIceConnectionStateChangeddeğerifalseolsun. -
connectionIceConnectionStateChangeddeğerifalseolsun. -
connectionStateChangeddeğerifalseolsun. -
transport’un seçilen aday çifti değiştirildiyse, aşağıdaki adımları çalıştırın: -
newCandidatePair, eğer bir çift seçilmişse belirtilen çiftin yerel ve uzak adaylarını temsil edenlocalveremoteile, aksi haldenullile bir RTCIceCandidatePair oluşturmanın sonucu olsun. -
transport.[[SelectedCandidatePair]]değerininewCandidatePairolarak ayarlayın. -
selectedCandidatePairChangeddeğerinitrueolarak ayarlayın. -
transport’unRTCIceTransportStatedeğeri değiştirildiyse, aşağıdaki adımları çalıştırın: -
transport.[[IceTransportState]]değerini belirtilen yeniRTCIceTransportStateolarak ayarlayın. -
transportIceConnectionStateChangeddeğerinitrueolarak ayarlayın. -
connection.[[IceConnectionState]]değerini,RTCIceConnectionStateenum’u tarafından açıklandığı şekilde yeni bir durum değeri türeterek ayarlayın. -
Önceki adımda
connection.[[IceConnectionState]]değiştiyse,connectionIceConnectionStateChangeddeğerinitrueolarak ayarlayın. -
connection.[[ConnectionState]]değerini,RTCPeerConnectionStateenum’u tarafından açıklandığı şekilde yeni bir durum değeri türeterek ayarlayın. -
Önceki adımda
connection.[[ConnectionState]]değiştiyse,connectionStateChangeddeğerinitrueolarak ayarlayın. -
selectedCandidatePairChangedtrueise,transportüzerindeselectedcandidatepairchangeadlı bir olayı tetikleyin. -
transportIceConnectionStateChangedtrueise,transportüzerindestatechangeadlı bir olayı tetikleyin. -
connectionIceConnectionStateChangedtrueise,connectionüzerindeiceconnectionstatechangeadlı bir olayı tetikleyin. -
connectionStateChangedtrueise,connectionüzerindeconnectionstatechangeadlı 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
statechange olan bu olay işleyicisi,
RTCIceTransport state değeri her değiştiğinde
MUST tetiklenmelidir.
ongatheringstatechange türü EventHandler
gatheringstatechange olan bu olay
işleyicisi, RTCIceTransport’un
[[IceGathererState]] değeri her
değiştiğinde MUST tetiklenmelidir.
onselectedcandidatepairchange türü EventHandler
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:
-
candidatePair, yeni oluşturulmuş birRTCIceCandidatePairnesnesi olsun. -
candidatePair’in [[Local]] adlı bir dahili yuvası olsun velocalile başlatılsın. -
candidatePair’in [[Remote]] adlı bir dahili yuvası olsun veremoteile başlatılsın. 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
local özniteliği, alınırken, MUST
[[Local]] dahili yuvasının
değerini döndürmelidir.
remote türü RTCIceCandidate, salt okunur
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"}
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:
-
(
RTCIceTransportilk kez oluşturulduğunda,setLocalDescriptionveyasetRemoteDescriptionsonucunda): "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"
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ı