← 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.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)

Bu olay işleyicisinin olay türü 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:

  1. transceivers, CollectTransceivers algoritmasının çalıştırılmasının sonucu olsun.
  2. senders, yeni ve boş bir dizi olsun.
  3. transceivers içindeki her bir transceiver için,
  4. Eğer transceiver.[[Stopped]] false ise, transceiver.[[Sender]]’ı senders’a ekle.
  5. senders’ı döndür.

getReceivers

Bu 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:

  1. transceivers, CollectTransceivers algoritmasının çalıştırılmasının sonucu olsun.
  2. receivers, yeni ve boş bir dizi olsun.
  3. transceivers içindeki her bir transceiver için,
  4. Eğer transceiver.[[Stopped]] false ise, transceiver.[[Receiver]]’ı receivers’a ekle.
  5. receivers’ı döndür.

getTransceivers

Bu 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:

  1. transceivers, bu RTCPeerConnection nesnesinin transceiver kümesindeki tüm RTCRtpTransceiver nesnelerinden, eklenme sırasına göre oluşan yeni bir dizi olsun.
  2. 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:

  1. connection, bu yöntemin çağrıldığı RTCPeerConnection nesnesi olsun.
  2. track, yöntemin ilk bağımsız değişkeni tarafından belirtilen MediaStreamTrack nesnesi olsun.
  3. kind, track.kind olsun.
  4. streams, yöntemin kalan bağımsız değişkenlerinden oluşturulan bir MediaStream nesneleri listesi olsun; yöntem tek bir bağımsız değişkenle çağrılmışsa boş bir liste olsun.
  5. Eğer connection.[[IsClosed]] true ise, bir InvalidStateError fırlat.
  6. senders, CollectSenders algoritmasının çalıştırılmasının sonucu olsun. senders içinde track için zaten bir RTCRtpSender varsa, bir InvalidAccessError fırlat.
  7. Aşağıdaki adımlar, mevcut bir göndericinin yeniden kullanılıp kullanılamayacağını belirlemeyi açıklar. Bunun yapılması, gelecekteki createOffer ve createAnswer ç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ı sendrecv veya sendonly olarak 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ü kind ile 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.
  1. sender null değilse, bu göndericiyi kullanmak için aşağıdaki adımları çalıştır:
  2. sender.[[SenderTrack]]’i track olarak ayarla.
  3. sender.[[AssociatedMediaStreamIds]]’i boş bir küme olarak ayarla.
  4. streams içindeki her bir stream için, zaten yoksa stream.id’yi [[AssociatedMediaStreamIds]]’e ekle.
  5. transceiver, sender ile ilişkili RTCRtpTransceiver olsun.
  6. Eğer transceiver.[[Direction]] "recvonly" ise, transceiver.[[Direction]]’ı "sendrecv" olarak ayarla.
  7. Eğer transceiver.[[Direction]] "inactive" ise, transceiver.[[Direction]]’ı "sendonly" olarak ayarla.
  8. sender null ise, aşağıdaki adımları çalıştır:
  9. track, kind ve streams ile bir RTCRtpSender oluştur ve sonucu sender olarak adlandır.
  10. kind ile bir RTCRtpReceiver oluştur ve sonucu receiver olarak adlandır.
  11. sender, receiver ve "sendrecv" değerine sahip bir RTCRtpTransceiverDirection ile bir RTCRtpTransceiver oluştur ve sonucu transceiver olarak adlandır.
  12. transceiver’ı connection’ın transceiver kümesine ekle.
  13. 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 bir RTCRtpSender oluş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.

  1. connection için müzakere-gerekli bayrağını güncelle.
  2. 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:

  1. sender, removeTrack’e verilen bağımsız değişken olsun.
  2. connection, yöntemin çağrıldığı RTCPeerConnection nesnesi olsun.
  3. Eğer connection.[[IsClosed]] true ise, bir InvalidStateError fırlat.
  4. Eğer sender, connection tarafından oluşturulmamışsa, bir InvalidAccessError fırlat.
  5. transceiver, sender’a karşılık gelen RTCRtpTransceiver nesnesi olsun.
  6. Eğer transceiver.[[Stopping]] true ise, bu adımları sonlandır.
  7. senders, CollectSenders algoritmasının çalıştırılmasının sonucu olsun.
  8. Eğer sender, senders içinde değilse (bu, transceiver’ının durdurulduğunu veya type’ı "rollback" olan bir oturum tanımı ayarlanması nedeniyle kaldırıldığını gösterir), bu adımları sonlandır.
  9. Eğer sender.[[SenderTrack]] null ise, bu adımları sonlandır.
  10. sender.[[SenderTrack]]’i null olarak ayarla.
  11. Eğer transceiver.[[Direction]] "sendrecv" ise, transceiver.[[Direction]]’ı "recvonly" olarak ayarla.
  12. Eğer transceiver.[[Direction]] "sendonly" ise, transceiver.[[Direction]]’ı "inactive" olarak ayarla.
  13. connection için müzakere-gerekli bayrağını güncelle.

addTransceiver

Yeni bir 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:

  1. init ikinci bağımsız değişken olsun.
  2. streams, init.streams olsun.
  3. sendEncodings, init.sendEncodings olsun.
  4. direction, init.direction olsun.
  5. İlk bağımsız değişken bir dize ise, kind ilk bağımsız değişken olsun ve aşağıdaki adımları çalıştır:
  6. kind ne "audio" ne de "video" ise, bir TypeError fırlat.
  7. track, null olsun.
  8. İlk bağımsız değişken bir MediaStreamTrack ise, track ilk bağımsız değişken olsun ve kind, track.kind olsun.
  9. connection.[[IsClosed]] true ise, bir InvalidStateError fırlat.
  10. sendEncodings’i, içindeki her RTCRtpEncodingParameters sözlüğü birer “encoding” olacak şekilde, aşağıdaki addTransceiver sendEncodings doğrulama adımlarını çalıştırarak doğrula:
  11. 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)
  12. sendEncodings içindeki her rid değerinin [RFC8851]’in 10. Bölümünde belirtilen dilbilgisine uyduğunu doğrula. RID’lerden biri bu gereksinimleri karşılamıyorsa, bir TypeError fı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, sendEncodings içindeki başka bir kodlamada bulunan bir rid ile aynı değere sahip bir rid üyesi içeriyorsa.
  1. Herhangi bir kodlama rid dışında salt okunur bir parametre içeriyorsa, bir InvalidAccessError fırlat.
  2. Aday Ekleme 49:RTCRtpEncodingParameters’a codec ekle (PR #2985)
  3. 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.

  4. Aday Ekleme 49:RTCRtpEncodingParameters’a codec ekle (PR #2985)
  5. 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.

  6. kind "audio" ise, bunlardan herhangi birini içeren tüm kodlamalardan scaleResolutionDownBy ve maxFramerate üyelerini kaldır.
  7. Herhangi bir kodlama, değeri 1.0’dan küçük olan bir scaleResolutionDownBy üyesi içeriyorsa, bir RangeError fırlat.
  8. Tanımlı olan sendEncodings içindeki her maxFramerate üyesinin değerinin 0.0’dan büyük olduğunu doğrula. maxFramerate değerlerinden biri bu gereksinimi karşılamıyorsa, bir RangeError fırlat.
  9. maxN, kullanıcı aracısının bu kind için destekleyebileceği eşzamanlı toplam kodlama sayısının en büyük değeri olsun; asgari 1. Kullanılacak codec henüz bilinmediğinden, bu iyimser bir sayı olmalıdır.
  10. Herhangi bir kodlama bir scaleResolutionDownBy üyesi içeriyorsa, bu üyesi olmayan her kodlama için değeri 1.0 olan bir scaleResolutionDownBy üyesi ekle.
  11. sendEncodings içinde depolanan kodlama sayısı maxN’yi aşarsa, uzunluğu maxN olana kadar sendEncodings’i sondan kırp.
  12. kind "video" ise ve kodlamaların hiçbiri scaleResolutionDownBy üyesi içermiyorsa, her kodlama için değeri 2^( sendEncodings uzunluğu - kodlama indeksi - 1 ) olan bir scaleResolutionDownBy ü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.
  13. sendEncodings içinde şu anda depolanan kodlama sayısı 1 ise, tek girdiden herhangi bir rid üyesini kaldı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.
  1. track, kind, streams ve sendEncodings ile bir RTCRtpSender oluştur ve sonucu sender olarak 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.

  1. kind ile bir RTCRtpReceiver oluştur ve sonucu receiver olarak adlandır.
  2. sender, receiver ve direction ile bir RTCRtpTransceiver oluştur ve sonucu transceiver olarak adlandır.
  3. transceiver’ı connection’ın transceiver kümesine ekle.
  4. connection için müzakere-gerekli bayrağını güncelle.
  5. 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:

  1. transceiver.[[Receiver]], msids, addList ve removeList ile ilişkili uzak akışları ayarla.
  2. direction "sendrecv" veya "recvonly" ise ve transceiver.[[FiredDirection]] ne "sendrecv" ne de "recvonly" ise ya da önceki adım addList’in uzunluğunu artırdıysa, transceiver ve trackEventInits ile bir uzak izin eklenmesini işle.
  3. direction "sendonly" veya "inactive" ise, transceiver.[[Receptive]]’i false olarak ayarla.
  4. direction "sendonly" veya "inactive" ise ve transceiver.[[FiredDirection]] "sendrecv" veya "recvonly" ise, transceiver ve muteTracks ile medya açıklaması için bir uzak izin kaldırılmasını işle.
  5. transceiver.[[FiredDirection]]’i direction olarak ayarla.

Bir RTCRtpTransceiver transceiver ve trackEventInits verildiğinde bir uzak izin eklenmesini işlemek için aşağıdaki adımları çalıştır:

  1. receiver, transceiver.[[Receiver]] olsun.
  2. track, receiver.[[ReceiverTrack]] olsun.
  3. streams, receiver.[[AssociatedRemoteMediaStreams]] olsun.
  4. receiver, track, streams ve transceiver üyelerine sahip yeni bir RTCTrackEventInit sözlüğü oluştur ve bunu trackEventInits’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:

  1. receiver, transceiver.[[Receiver]] olsun.
  2. track, receiver.[[ReceiverTrack]] olsun.
  3. track.muted false ise, track’i muteTracks’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:

  1. connection, receiver ile ilişkili RTCPeerConnection nesnesi olsun.
  2. msids içindeki her MSID için, bu connection için bu id ile daha önce bir MediaStream nesnesi oluşturulmamışsa, bu id ile bir MediaStream nesnesi oluştur.
  3. streams, bu connection için msids’e karşılık gelen id’lerle oluşturulmuş MediaStream nesnelerinin bir listesi olsun.
  4. track, receiver.[[ReceiverTrack]] olsun.
  5. receiver.[[AssociatedRemoteMediaStreams]] içinde bulunup streams’te bulunmayan her stream için, stream ve track’i bir çift olarak removeList’e ekle.
  6. streams içinde bulunup receiver.[[AssociatedRemoteMediaStreams]]’te bulunmayan her stream için, stream ve track’i bir çift olarak addList’e ekle.
  7. receiver.[[AssociatedRemoteMediaStreams]]’i streams olarak ayarla.