← WebRTC 1.0 Spesifikasyonu

Eşler Arası Bağlantılar

W3C WebRTC 1.0 Spesifikasyonu — Türkçe Çeviri

4. Eşler arası bağlantılar

4.7 Oturum Müzakere Modeli

Bir RTCPeerConnection’ın durumunda yapılan birçok değişiklik, istenen etkiyi elde etmek için sinyal kanalı üzerinden uzak tarafla iletişim kurulmasını gerektirir. Uygulama, sinyalizasyon yapması gerektiğinde negotiationneeded olayını dinleyerek bilgilendirilebilir. Bu olay, [[NegotiationNeeded]] adlı bir dahili yuva ile temsil edilen bağlantının müzakere-gerekiyor bayrağının durumuna göre tetiklenir.

4.7.1 Müzakere-Gerekiyor Ayarlama

Bu bölüm normatif değildir.

Sinyalizasyon gerektiren bir işlem RTCPeerConnection üzerinde gerçekleştirildiğinde, bağlantı müzakere gerektiriyor olarak işaretlenir. Bu tür işlemlere örnek olarak bir RTCRtpTransceiver eklenmesi veya durdurulması ya da ilk RTCDataChannel’ın eklenmesi verilebilir.

Uygulama içindeki dahili değişiklikler de bağlantının müzakere gerektiriyor olarak işaretlenmesine yol açabilir.

Müzakere-gerekiyor bayrağının güncellenmesine ilişkin kesin prosedürlerin aşağıda belirtildiğini unutmayın.

4.7.2 Müzakere-Gerekiyor Temizleme

Bu bölüm normatif değildir.

Müzakere-gerekiyor bayrağı, "answer" türünde bir oturum tanımı başarıyla ayarlandığında ve sağlanan tanım, RTCPeerConnection üzerinde mevcut olan RTCRtpTransceiver ve RTCDataChannel’ların durumuyla eşleştiğinde temizlenir. Özellikle bu, durdurulmamış tüm transceiver’ların yerel tanımda eşleşen özelliklere sahip ilişkili bir bölüme sahip olduğu ve herhangi bir veri kanalı oluşturulmuşsa yerel tanımda bir veri bölümünün bulunduğu anlamına gelir.

Müzakere-gerekiyor bayrağının güncellenmesine ilişkin kesin prosedürlerin aşağıda belirtildiğini unutmayın.

4.7.3 Müzakere-Gerekiyor Bayrağını Güncelleme

Aşağıdaki süreç, bu belgede başka yerlerde başvurulduğunda gerçekleşir. Ayrıca, müzakereyi etkileyen uygulama içi dahili değişikliklerin bir sonucu olarak da gerçekleşebilir. Böyle değişiklikler meydana gelirse, kullanıcı aracısı müzakere-gerekiyor bayrağını MUST güncellemelidir.

connection için müzakere-gerekiyor bayrağını güncellemek üzere aşağıdaki adımları çalıştırın:

  1. connection.[[Operations]] uzunluğu 0 değilse, connection.[[UpdateNegotiationNeededFlagOnEmptyChain]] değerini true olarak ayarlayın ve bu adımları sonlandırın.
  2. Aşağıdaki adımları çalıştırmak üzere bir görev sıraya alın:
  3. connection.[[IsClosed]] true ise, bu adımları sonlandırın.
  4. connection.[[Operations]] uzunluğu 0 değilse, connection.[[UpdateNegotiationNeededFlagOnEmptyChain]] değerini true olarak ayarlayın ve bu adımları sonlandırın.
  5. connection.[[SignalingState]] "stable" değilse, bu adımları sonlandırın.
Müzakere-gerekiyor bayrağı, bir oturum tanımı ayarlama adımlarının bir parçası olarak durum "stable" geçiş yaptığında güncellenecektir.
  1. Müzakere gerekip gerekmediğini denetlemenin sonucu false ise, connection.[[NegotiationNeeded]] değerini false olarak ayarlayarak müzakere-gerekiyor bayrağını temizleyin ve bu adımları sonlandırın.
  • connection.[[NegotiationNeeded]] zaten true ise, bu adımları sonlandırın.
  • connection.[[NegotiationNeeded]] değerini true olarak ayarlayın.
  • connection üzerinde negotiationneeded adlı bir olayı tetikleyin.
  • Görevlerin sıraya alınması, connection üzerinde aynı anda birden fazla değişiklik yapıldığı yaygın durumda negotiationneeded’ın erken tetiklenmesini önler.

    Ayrıca, işlemler zinciri boşken negotiationneeded’ı yalnızca tetikleyerek müzakere

    yöntemleriyle yarışmayı önleriz.

    connection için müzakere gerekip gerekmediğini denetlemek üzere aşağıdaki kontrolleri gerçekleştirin:

    1. Bu bölümün başında açıklandığı gibi, uygulamaya özgü herhangi bir müzakere gerekiyorsa, true döndürün.
    2. connection.[[LocalIceCredentialsToReplace]] boş değilse, true döndürün.
    3. description, connection.[[CurrentLocalDescription]] olsun.
    4. connection herhangi bir RTCDataChannel oluşturmuşsa ve description içinde veri için henüz müzakere edilmiş bir m= bölümü yoksa, true döndürün.
    5. connection’ın transceiver kümesindeki her bir transceiver için aşağıdaki kontrolleri gerçekleştirin:
    6. transceiver.[[Stopping]] true ve transceiver.[[Stopped]] false ise, true döndürün.
    7. transceiver durdurulmamışsa ve henüz description içinde bir m= bölümüyle ilişkilendirilmemişse, true döndürün.
    8. transceiver durdurulmamışsa ve description içinde bir m= bölümüyle ilişkilendirilmişse, aşağıdaki kontrolleri gerçekleştirin:
    9. transceiver.[[Direction]] "sendrecv" veya "sendonly" ise ve description içindeki ilişkili m= bölümü ya tek bir a=msid satırı içermiyorsa ya da bu m= bölümündeki a=msid satırlarından elde edilen MSID sayısı veya MSID değerlerinin kendisi transceiver.sender.[[AssociatedMediaStreamIds]] içindekilerden farklıysa, true döndürün.
    10. description türü "offer" ise ve ilişkili m= bölümünün yönü ne connection.[[CurrentLocalDescription]] ne de connection.[[CurrentRemoteDescription]] içindekilerden herhangi birinde transceiver.[[Direction]] ile eşleşmiyorsa, true döndürün. Bu adımda, yön [[CurrentRemoteDescription]] içinde bulunan bir yön ile karşılaştırıldığında, açıklamanın yönü eşin bakış açısını temsil edecek şekilde tersine çevrilmelidir.
    11. description türü "answer" ise ve description içindeki ilişkili m= bölümünün yönü, sunulan yön ile kesiştirilmiş transceiver.[[Direction]] ile eşleşmiyorsa ([RFC9429]’da (bölüm 5.3.1.) açıklandığı gibi), true döndürün.
    12. transceiver durdurulmuşsa ve bir m= bölümüyle ilişkilendirilmişse, ancak ilişkili m= bölümü connection.[[CurrentLocalDescription]] veya connection.[[CurrentRemoteDescription]] içinde henüz reddedilmemişse, true döndürün.
    13. Önceki kontrollerin tümü gerçekleştirildiyse ve true döndürülmediyse, müzakere edilecek bir şey kalmamıştır; false döndürün.