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.1 RTCPeerConnection Arayüzü Genişletmeleri
RTP medya API’si, RTCPeerConnection arayüzünü aşağıda
açıklandığı şekilde genişletir.
WebIDL partial interface RTCPeerConnection {
sequence<RTCRtpSender> getSenders();
sequence<RTCRtpReceiver> getReceivers();
sequence<RTCRtpTransceiver> getTransceivers();
RTCRtpSender addTrack(MediaStreamTrack track, MediaStream... streams);
undefined removeTrack(RTCRtpSender sender);
RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) trackOrKind,
optional RTCRtpTransceiverInit init = {});
attribute EventHandler ontrack;
};
Öznitelikler
ontrack (EventHandler türünde)
track’tir.Yöntemler
getSenders
Bu RTCPeerConnection nesnesine şu anda bağlı,
durdurulmamış RTCRtpTransceiver nesnelerine ait RTP
göndericilerini temsil eden bir
RTCRtpSender nesneleri dizisini döndürür.
getSenders yöntemi çağrıldığında, kullanıcı aracısı
MUST CollectSenders algoritmasını
çalıştırmanın sonucunu döndürmelidir.
CollectSenders algoritmasını aşağıdaki gibi tanımlarız:
-
transceivers,CollectTransceiversalgoritmasının çalıştırılmasının sonucu olsun. senders, yeni ve boş bir dizi olsun.-
transceiversiçindeki her birtransceiveriçin, -
Eğer
transceiver.[[Stopped]]falseise,transceiver.[[Sender]]’ısenders’a ekle. senders’ı döndür.
getReceivers
RTCPeerConnection nesnesine şu anda bağlı, durdurulmamış
RTCRtpTransceiver nesnelerine ait RTP alıcılarını temsil
eden bir RTCRtpReceiver nesneleri dizisini döndürür.
getReceivers yöntemi çağrıldığında, kullanıcı aracısı
MUST aşağıdaki adımları çalıştırmalıdır:
-
transceivers,CollectTransceiversalgoritmasının çalıştırılmasının sonucu olsun. receivers, yeni ve boş bir dizi olsun.-
transceiversiçindeki her birtransceiveriçin, -
Eğer
transceiver.[[Stopped]]falseise,transceiver.[[Receiver]]’ıreceivers’a ekle. receivers’ı döndür.
getTransceivers
RTCPeerConnection nesnesine şu anda bağlı olan RTP
transceiver’larını temsil eden bir
RTCRtpTransceiver nesneleri dizisini döndürür.
getTransceivers yöntemi MUST
CollectTransceivers algoritmasını çalıştırmanın sonucunu
döndürmelidir.
CollectTransceivers algoritmasını aşağıdaki gibi tanımlarız:
-
transceivers, buRTCPeerConnectionnesnesinin transceiver kümesindeki tümRTCRtpTransceivernesnelerinden, eklenme sırasına göre oluşan yeni bir dizi olsun. transceivers’ı döndür.
addTrack
RTCPeerConnection’a yeni bir iz ekler ve bunun belirtilen
MediaStream’ler içinde yer aldığını belirtir.
addTrack yöntemi çağrıldığında, kullanıcı aracısı
MUST aşağıdaki adımları çalıştırmalıdır:
-
connection, bu yöntemin çağrıldığıRTCPeerConnectionnesnesi olsun. -
track, yöntemin ilk bağımsız değişkeni tarafından belirtilenMediaStreamTracknesnesi olsun. kind,track.kindolsun.-
streams, yöntemin kalan bağımsız değişkenlerinden oluşturulan birMediaStreamnesneleri listesi olsun; yöntem tek bir bağımsız değişkenle çağrılmışsa boş bir liste olsun. -
Eğer
connection.[[IsClosed]]trueise, birInvalidStateErrorfırlat. -
senders,CollectSendersalgoritmasının çalıştırılmasının sonucu olsun.sendersiçindetrackiçin zaten birRTCRtpSendervarsa, birInvalidAccessErrorfırlat. -
Aşağıdaki adımlar, mevcut bir göndericinin yeniden kullanılıp
kullanılamayacağını belirlemeyi açıklar. Bunun yapılması, gelecekteki
createOffervecreateAnswerçağrılarının, [RFC9429]’da tanımlandığı üzere (bölüm 5.2.2. ve bölüm 5.3.2.), karşılık gelen medya tanımınısendrecvveyasendonlyolarak işaretlemesine ve göndericinin akışlarının MSID’sini eklemesine neden olur.
Eğer senders içindeki herhangi bir
RTCRtpSender nesnesi aşağıdaki ölçütlerin tümünü
karşılıyorsa, sender bu nesne olsun; aksi halde
null olsun:
- Göndericinin izi null’dır.
-
Göndericiyle ilişkili
RTCRtpTransceiver’ın transceiver türükindile eşleşir. -
Göndericiyle ilişkili
RTCRtpTransceiver’ın[[Stopping]]yuvasıfalse’tur. -
Gönderici daha önce hiç gönderim için kullanılmamıştır. Daha açık
olarak, göndericiyle ilişkili
RTCRtpTransceiver’ın[[CurrentDirection]]yuvası hiçbir zaman "sendrecv" veya "sendonly" değerini almamıştır.
-
sendernulldeğilse, bu göndericiyi kullanmak için aşağıdaki adımları çalıştır: -
sender.[[SenderTrack]]’itrackolarak ayarla. -
sender.[[AssociatedMediaStreamIds]]’i boş bir küme olarak ayarla. -
streamsiçindeki her birstreamiçin, zaten yoksastream.id’yi[[AssociatedMediaStreamIds]]’e ekle. -
transceiver,senderile ilişkiliRTCRtpTransceiverolsun. -
Eğer
transceiver.[[Direction]]"recvonly" ise,transceiver.[[Direction]]’ı "sendrecv" olarak ayarla. -
Eğer
transceiver.[[Direction]]"inactive" ise,transceiver.[[Direction]]’ı "sendonly" olarak ayarla. -
sendernullise, aşağıdaki adımları çalıştır: -
track,kindvestreamsile bir RTCRtpSender oluştur ve sonucusenderolarak adlandır. -
kindile bir RTCRtpReceiver oluştur ve sonucureceiverolarak adlandır. -
sender,receiverve "sendrecv" değerine sahip birRTCRtpTransceiverDirectionile bir RTCRtpTransceiver oluştur ve sonucutransceiverolarak adlandır. -
transceiver’ıconnection’ın transceiver kümesine ekle. -
Bir izin içeriği uygulama tarafından erişilemez olabilir. Bu, bir izi
CORS çapraz-köken
yapacak her türlü durumdan kaynaklanabilir. Bu izler
addTrack()yöntemine sağlanabilir ve onlar için birRTCRtpSenderoluşturulur; ancak içerik GÖNDERİLMEMELİDİR. İz içeriği yerine sessizlik (ses), siyah kareler (video) ya da buna eşdeğer şekilde içerik yokluğu gönderilir.
Bu özelliğin zaman içinde değişebileceğini unutmayın.
-
connectioniçin müzakere-gerekli bayrağını güncelle. sender’ı döndür.
removeTrack
sender’dan medya göndermeyi durdurur.
RTCRtpSender, getSenders içinde görünmeye
devam eder. Bunun yapılması, gelecekteki
createOffer çağrılarının, [RFC9429]’da tanımlandığı üzere
(bölüm 5.2.2.), karşılık gelen transceiver için medya tanımını
"recvonly" veya "inactive" olarak
işaretlemesine neden olur.
Diğer eş bu şekilde bir iz göndermeyi durdurduğunda, iz, başlangıçta
track olayında açığa çıkarılmış olan tüm uzak
MediaStream’lerden kaldırılır ve
MediaStreamTrack zaten sessize alınmamışsa, iz üzerinde bir
mute olayı tetiklenir.
removeTrack() ile aynı etki, ilgili
transceiver’ın RTCRtpTransceiver.direction
özniteliğini ayarlayıp gönderici üzerinde
RTCRtpSender.replaceTrack(null) çağrılarak
elde edilebilir. Küçük bir fark olarak, replaceTrack() asenkrondur ve removeTrack() senkrondur.
removeTrack yöntemi çağrıldığında, kullanıcı aracısı
MUST aşağıdaki adımları çalıştırmalıdır:
-
sender,removeTrack’e verilen bağımsız değişken olsun. -
connection, yöntemin çağrıldığıRTCPeerConnectionnesnesi olsun. -
Eğer
connection.[[IsClosed]]trueise, birInvalidStateErrorfırlat. -
Eğer
sender,connectiontarafından oluşturulmamışsa, birInvalidAccessErrorfırlat. -
transceiver,sender’a karşılık gelenRTCRtpTransceivernesnesi olsun. -
Eğer
transceiver.[[Stopping]]trueise, bu adımları sonlandır. -
senders,CollectSendersalgoritmasının çalıştırılmasının sonucu olsun. -
Eğer
sender,sendersiçinde değilse (bu, transceiver’ının durdurulduğunu veyatype’ı "rollback" olan bir oturum tanımı ayarlanması nedeniyle kaldırıldığını gösterir), bu adımları sonlandır. -
Eğer
sender.[[SenderTrack]]null ise, bu adımları sonlandır. -
sender.[[SenderTrack]]’i null olarak ayarla. -
Eğer
transceiver.[[Direction]]"sendrecv" ise,transceiver.[[Direction]]’ı "recvonly" olarak ayarla. -
Eğer
transceiver.[[Direction]]"sendonly" ise,transceiver.[[Direction]]’ı "inactive" olarak ayarla. -
connectioniçin müzakere-gerekli bayrağını güncelle.
addTransceiver
RTCRtpTransceiver oluşturur ve onu transceiver
kümesine ekler.
Bir transceiver eklemek, [RFC9429]’da tanımlandığı üzere (bölüm 5.2.2.), gelecekteki createOffer çağrılarının ilgili transceiver
için bir medya tanımı eklemesine neden olur.
mid’in başlangıç değeri null’dır. Bir oturum tanımının
ayarlanması, daha sonra bunu null olmayan bir değere dönüştürebilir.
sendEncodings bağımsız değişkeni, sunulan simulcast kodlama
sayısını ve isteğe bağlı olarak bunların RID’lerini ve kodlama
parametrelerini belirtmek için kullanılabilir.
Bu yöntem çağrıldığında, kullanıcı aracısı aşağıdaki adımları MUST çalıştırmalıdır:
initikinci bağımsız değişken olsun.-
streams,init.streamsolsun. -
sendEncodings,init.sendEncodingsolsun. -
direction,init.directionolsun. -
İlk bağımsız değişken bir dize ise,
kindilk bağımsız değişken olsun ve aşağıdaki adımları çalıştır: -
kindne"audio"ne de"video"ise, birTypeErrorfırlat. track,nullolsun.-
İlk bağımsız değişken bir
MediaStreamTrackise,trackilk bağımsız değişken olsun vekind,track.kindolsun. -
connection.[[IsClosed]]trueise, birInvalidStateErrorfırlat. -
sendEncodings’i, içindeki herRTCRtpEncodingParameterssözlüğü birer “encoding” olacak şekilde, aşağıdaki addTransceiver sendEncodings doğrulama adımlarını çalıştırarak doğrula: - Aday Düzeltme 18:TypeError — kodlamaların ya tamamının RID içermemesi ya da tamamının RID içermesi ve yinelenen RID’ler olmaması (PR #2774, PR #2775)
-
sendEncodingsiçindeki herriddeğerinin [RFC8851]’in 10. Bölümünde belirtilen dilbilgisine uyduğunu doğrula. RID’lerden biri bu gereksinimleri karşılamıyorsa, birTypeErrorfırlat.
Aşağıdaki koşullardan herhangi biri sağlanıyorsa, bir
TypeError fırlat:
-
Herhangi bir kodlama, [RFC8851]’in 10. Bölümünde belirtilen dilbilgisi
gereksinimlerine uymayan bir değere sahip
ridüyesi içeriyorsa. -
Kodlamaların bir kısmı
ridüyesi içerirken tamamı içermiyorsa. -
Herhangi bir kodlama,
sendEncodingsiçindeki başka bir kodlamada bulunan birridile aynı değere sahip birridüyesi içeriyorsa.
-
Herhangi bir kodlama
riddışında salt okunur bir parametre içeriyorsa, birInvalidAccessErrorfırlat. - Aday Ekleme 49:RTCRtpEncodingParameters’a codec ekle (PR #2985)
- Aday Ekleme 49:RTCRtpEncodingParameters’a codec ekle (PR #2985)
-
kind"audio"ise, bunlardan herhangi birini içeren tüm kodlamalardanscaleResolutionDownByvemaxFramerateüyelerini kaldır. -
Herhangi bir kodlama, değeri
1.0’dan küçük olan birscaleResolutionDownByüyesi içeriyorsa, birRangeErrorfırlat. -
Tanımlı olan
sendEncodingsiçindeki hermaxFramerateüyesinin değerinin0.0’dan büyük olduğunu doğrula.maxFrameratedeğerlerinden biri bu gereksinimi karşılamıyorsa, birRangeErrorfırlat. -
maxN, kullanıcı aracısının bukindiçin destekleyebileceği eşzamanlı toplam kodlama sayısının en büyük değeri olsun; asgari1. Kullanılacak codec henüz bilinmediğinden, bu iyimser bir sayı olmalıdır. -
Herhangi bir kodlama bir
scaleResolutionDownByüyesi içeriyorsa, bu üyesi olmayan her kodlama için değeri1.0olan birscaleResolutionDownByüyesi ekle. -
sendEncodingsiçinde depolanan kodlama sayısımaxN’yi aşarsa, uzunluğumaxNolana kadarsendEncodings’i sondan kırp. -
kind"video"ise ve kodlamaların hiçbiriscaleResolutionDownByüyesi içermiyorsa, her kodlama için değeri2^(sendEncodingsuzunluğu - kodlama indeksi - 1 )olan birscaleResolutionDownByüyesi ekle. Bu, son kodlamaya ölçekleme uygulanmayan küçükten büyüğe çözünürlükler üretir; örneğin uzunluk 3 ise 4:2:1. -
sendEncodingsiçinde şu anda depolanan kodlama sayısı1ise, tek girdiden herhangi birridüyesini kaldır.
Herhangi bir kodlama, değeri RTCRtpSender.getCapabilities(kind).codecs
içindeki herhangi bir codec ile eşleşmeyen bir
codec üyesi içeriyorsa, bir
OperationError fırlat.
Kullanıcı aracısı, müzakere olmadan codec değiştirmeyi desteklemiyorsa
veya tekil kodlamalar için codec ayarlamayı desteklemiyorsa, yeni
oluşturulmuş bir OperationError ile reddedilen bir
promise döndür.
sendEncodings içinde tek bir, varsayılan
RTCRtpEncodingParameters sağlamak, uygulamanın simulcast
kullanılmadığında bile daha sonra
setParameters kullanarak kodlama parametrelerini
ayarlamasına olanak tanır.
-
track,kind,streamsvesendEncodingsile bir RTCRtpSender oluştur ve sonucusenderolarak adlandır.
sendEncodings ayarlanmışsa, createOffer’a
yapılan sonraki çağrılar [RFC9429]’da tanımlandığı şekilde birden fazla
RTP kodlaması gönderecek biçimde yapılandırılacaktır (bölüm 5.2.2.
ve
bölüm 5.2.1.). [RFC9429]’da tanımlandığı şekilde birden fazla RTP kodlaması
alabilen karşılık gelen bir uzak tanım ile
setRemoteDescription çağrıldığında (bölüm 3.7.), RTCRtpSender birden fazla RTP kodlaması gönderebilir ve
transceiver’ın sender.getParameters() aracılığıyla alınan parametreler müzakere edilen
kodlamaları yansıtacaktır.
-
kindile bir RTCRtpReceiver oluştur ve sonucureceiverolarak adlandır. -
sender,receivervedirectionile bir RTCRtpTransceiver oluştur ve sonucutransceiverolarak adlandır. -
transceiver’ıconnection’ın transceiver kümesine ekle. -
connectioniçin müzakere-gerekli bayrağını güncelle. transceiver’ı döndür.
WebIDLdictionary RTCRtpTransceiverInit {
RTCRtpTransceiverDirection direction = "sendrecv";
sequence<MediaStream> streams = [];
sequence<RTCRtpEncodingParameters> sendEncodings = [];
};
RTCRtpTransceiverInit Sözlüğü Üyeleri
direction ·
RTCRtpTransceiverDirection türünde · varsayılan değeri
"sendrecv"
RTCRtpTransceiver’ın yönü.
streams · sequence\<MediaStream\> türünde
Uzak RTCPeerConnection’ın iz olayı, eklenen
RTCRtpReceiver’a karşılık geldiğinde, olayda yer
alacak akışlar bunlardır.
sendEncodings ·
sequence\<RTCRtpEncodingParameters\> türünde
Medyanın RTP kodlamalarını göndermek için parametreleri içeren bir dizi.
WebIDLenum RTCRtpTransceiverDirection {
"sendrecv",
"sendonly",
"recvonly",
"inactive",
"stopped"
};
| Enum değeri | Açıklama |
|---|---|
sendrecv |
RTCRtpTransceiver’ın RTCRtpSender’ı
sender, RTP göndermeyi teklif eder ve uzak eş kabul
ederse ve herhangi bir i değeri için
sender.getParameters().encodings[i].active
true ise RTP gönderir.
RTCRtpTransceiver’ın RTCRtpReceiver’ı
RTP almayı teklif eder ve uzak eş kabul ederse RTP alır.
|
sendonly |
RTCRtpTransceiver’ın RTCRtpSender’ı
sender, RTP göndermeyi teklif eder ve uzak eş kabul
ederse ve herhangi bir i değeri için
sender.getParameters().encodings[i].active
true ise RTP gönderir.
RTCRtpTransceiver’ın RTCRtpReceiver’ı
RTP almayı teklif etmez ve RTP almaz.
|
recvonly |
RTCRtpTransceiver’ın RTCRtpSender’ı
RTP göndermeyi teklif etmez ve RTP göndermez.
RTCRtpTransceiver’ın RTCRtpReceiver’ı
RTP almayı teklif eder ve uzak eş kabul ederse RTP alır.
|
inactive |
RTCRtpTransceiver’ın RTCRtpSender’ı
RTP göndermeyi teklif etmez ve RTP göndermez.
RTCRtpTransceiver’ın RTCRtpReceiver’ı
RTP almayı teklif etmez ve RTP almaz.
|
stopped |
RTCRtpTransceiver ne RTP gönderir ne de alır.
Teklifte sıfır port üretir. Yanıtlarda,
RTCRtpSender’ı RTP göndermeyi teklif etmez ve
RTCRtpReceiver’ı RTP almayı teklif etmez. Bu, uç
bir durumdur.
|
: RTCRtpTransceiverDirection Numaralandırması açıklaması
5.1.1 Uzak MediaStreamTrack’lerin İşlenmesi
Bir uygulama, gelen medya açıklamalarını, transceiver’ın yönünü her iki
yönü geçici olarak kapatmak için "inactive" ya da yalnızca
gelen tarafı reddetmek için "sendonly" olarak ayarlayarak
reddedebilir. Bir m-line’ı yeniden kullanıma uygun hale getirecek
şekilde kalıcı olarak reddetmek için, uygulamanın
RTCRtpTransceiver.stop() çağırması ve ardından kendi tarafından müzakereyi
başlatması gerekir.
Bir RTCRtpTransceiver transceiver,
direction, msids, addList,
removeList ve trackEventInits verildiğinde
uzak izleri işlemek için aşağıdaki adımları çalıştır:
-
transceiver.[[Receiver]],msids,addListveremoveListile ilişkili uzak akışları ayarla. -
direction"sendrecv" veya "recvonly" ise vetransceiver.[[FiredDirection]]ne "sendrecv" ne de "recvonly" ise ya da önceki adımaddList’in uzunluğunu artırdıysa,transceivervetrackEventInitsile bir uzak izin eklenmesini işle. -
direction"sendonly" veya "inactive" ise,transceiver.[[Receptive]]’ifalseolarak ayarla. -
direction"sendonly" veya "inactive" ise vetransceiver.[[FiredDirection]]"sendrecv" veya "recvonly" ise,transceivervemuteTracksile medya açıklaması için bir uzak izin kaldırılmasını işle. -
transceiver.[[FiredDirection]]’idirectionolarak ayarla.
Bir RTCRtpTransceiver transceiver ve
trackEventInits verildiğinde bir uzak izin eklenmesini
işlemek için aşağıdaki adımları çalıştır:
-
receiver,transceiver.[[Receiver]]olsun. -
track,receiver.[[ReceiverTrack]]olsun. -
streams,receiver.[[AssociatedRemoteMediaStreams]]olsun. -
receiver,track,streamsvetransceiverüyelerine sahip yeni birRTCTrackEventInitsözlüğü oluştur ve bunutrackEventInits’e ekle.
Bir RTCRtpTransceiver transceiver ve
muteTracks ile bir uzak izin kaldırılmasını işlemek için
aşağıdaki adımları çalıştır:
-
receiver,transceiver.[[Receiver]]olsun. -
track,receiver.[[ReceiverTrack]]olsun. -
track.mutedfalseise,track’imuteTracks’e ekle.
RTCRtpReceiver receiver, msids,
addList ve removeList verildiğinde ilişkili
uzak akışları ayarlamak için aşağıdaki adımları çalıştır:
-
connection,receiverile ilişkiliRTCPeerConnectionnesnesi olsun. -
msidsiçindeki her MSID için, buconnectioniçin buidile daha önce birMediaStreamnesnesi oluşturulmamışsa, buidile birMediaStreamnesnesi oluştur. -
streams, buconnectioniçinmsids’e karşılık gelenid’lerle oluşturulmuşMediaStreamnesnelerinin bir listesi olsun. -
track,receiver.[[ReceiverTrack]]olsun. -
receiver.[[AssociatedRemoteMediaStreams]]içinde bulunupstreams’te bulunmayan herstreamiçin,streamvetrack’i bir çift olarakremoveList’e ekle. -
streamsiçinde bulunupreceiver.[[AssociatedRemoteMediaStreams]]’te bulunmayan herstreamiçin,streamvetrack’i bir çift olarakaddList’e ekle. -
receiver.[[AssociatedRemoteMediaStreams]]’istreamsolarak ayarla.