← WebRTC 1.0 Spesifikasyonu

Eşler Arası DTMF

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

7. Eşler arası DTMF

Bu bölüm, bir RTCPeerConnection üzerinden DTMF (telefon tuş takımı) değerlerini göndermek için RTCRtpSender üzerinde bulunan bir arabirimi açıklar. DTMF'nin diğer eşe nasıl gönderildiğine ilişkin ayrıntılar [RFC7874]'te açıklanmaktadır.

7.1 RTCRtpSender Arabirim Uzantıları

Eşler arası DTMF API'si, aşağıda açıklandığı şekilde RTCRtpSender arabirimini genişletir.

WebIDLpartial interface RTCRtpSender {
                          readonly attribute RTCDTMFSender? dtmf;
                        };

7.1.1 Nitelikler

dtmf · RTCDTMFSender · salt okunur · null olabilir

Alındığında, dtmf niteliği, DTMF göndermek için kullanılabilen bir RTCDTMFSender'ı temsil eden [[Dtmf]] iç yuvasının değerini döndürür veya ayarlı değilse null döndürür.

[[Dtmf]] iç yuvası, bir RTCRtpSender'ın [[SenderTrack]] türü "audio" olduğunda ayarlanır.

7.2 RTCDTMFSender

Bir RTCDTMFSender oluşturmak için, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:

  1. Yeni oluşturulmuş bir RTCDTMFSender nesnesi olarak dtmf belirle.
  2. dtmf'in bir [[Duration]] iç yuvasına sahip olmasını sağla.
  3. dtmf'in bir [[InterToneGap]] iç yuvasına sahip olmasını sağla.
  4. dtmf'in bir [[ToneBuffer]] iç yuvasına sahip olmasını sağla.
WebIDL[Exposed=Window]
                        interface RTCDTMFSender : EventTarget {
                          undefined insertDTMF(DOMString tones,
                            optional unsigned long duration = 100,
                            optional unsigned long interToneGap = 70);
                          attribute EventHandler ontonechange;
                          readonly attribute boolean canInsertDTMF;
                          readonly attribute DOMString toneBuffer;
                        };

7.2.1 Nitelikler

ontonechange · EventHandler

Bu olay işleyicisinin olay türü tonechange'dir.

canInsertDTMF · boolean · salt okunur

RTCDTMFSender olan dtmfSender'ın DTMF gönderme yeteneğine sahip olup olmadığını belirtir. Alındığında, kullanıcı aracısı MUST, dtmfSender için DTMF gönderilip gönderilemeyeceğini belirleme işleminin sonucunu döndürmelidir.

toneBuffer · DOMString · salt okunur

toneBuffer niteliği MUST, çalınmayı bekleyen kalan tonların bir listesini döndürmelidir. Bu listenin sözdizimi, içeriği ve yorumlanması için insertDTMF'e bakınız.

7.2.2 Yöntemler

insertDTMF()

Bir RTCDTMFSender nesnesinin insertDTMF yöntemi, DTMF tonlarını göndermek için kullanılır.

tones parametresi bir karakter dizisi olarak ele alınır. 0'dan 9'a, A'dan D'ye, # ve * ilgili DTMF tonlarını üretir. a'dan d'ye kadar olan karakterler girişte MUST büyük harfe normalize edilmelidir. ',' karakteri MUST desteklenmelidir ve bir sonraki karakter işlenmeden önce 2 saniyelik bir gecikmeyi belirtir.

duration parametresi, her karakter için kullanılacak süreyi ms cinsinden belirtir. Süre 6000 ms'den fazla veya 40 ms'den az olamaz. Varsayılan süre her ton için 100 ms'dir.

interToneGap parametresi, tonlar arasındaki boşluğu ms cinsinden belirtir. Kullanıcı aracısı bu değeri en az 30 ms ve en fazla 6000 ms olacak şekilde sınırlar. Varsayılan değer 70 ms'dir.

Tarayıcı, DTMF'nin başlama ve bitiş zamanlarının RTP paketlerinin sınırlarıyla hizalanmasını sağlamak için duration ve interToneGap sürelerini artırabilir, ancak her birini tek bir RTP ses paketinin süresinden daha fazla artırmamalıdır.

insertDTMF() yöntemi çağrıldığında, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:

  1. DTMF göndermek için kullanılan RTCRtpSendersender olarak belirle.
  2. sender ile ilişkili RTCRtpTransceiver nesnesini transceiver olarak belirle.
  3. sender ile ilişkili RTCDTMFSenderdtmf olarak belirle.
  4. dtmf için DTMF gönderilip gönderilemeyeceğini belirleme işlemi false döndürürse, bir InvalidStateError fırlat.
  5. Yöntemin birinci argümanını tones olarak belirle.
  6. Yöntemin ikinci argümanını duration olarak belirle.
  7. Yöntemin üçüncü argümanını interToneGap olarak belirle.
  8. tones herhangi bir tanınmayan karakter içeriyorsa, bir InvalidCharacterError fırlat.
  9. Nesnenin [[ToneBuffer]] yuvasını tones olarak ayarla.
  10. dtmf.[[Duration]] değerini duration değerine ayarla.
  11. dtmf.[[InterToneGap]] değerini interToneGap değerine ayarla.
  12. duration değeri 40 ms'den küçükse, dtmf.[[Duration]] değerini 40 ms olarak ayarla.
  13. duration parametresinin değeri 6000 ms'den büyükse, dtmf.[[Duration]] değerini 6000 ms olarak ayarla.
  14. interToneGap değeri 30 ms'den küçükse, dtmf.[[InterToneGap]] değerini 30 ms olarak ayarla.
  15. interToneGap değeri 6000 ms'den büyükse, dtmf.[[InterToneGap]] değerini 6000 ms olarak ayarla.
  16. [[ToneBuffer]] yuvası boş bir dize ise, bu adımları durdur.
  17. DTMF çalma görevi adımlarını çalıştırmak üzere zamanlanmış bir görev varsa, bu adımları durdur; aksi halde aşağıdaki DTMF çalma görevi adımlarını çalıştıran bir görevi kuyruğa ekle:
    1. Eğer dtmf için DTMF gönderilip gönderilemeyeceğini belirleme işlemi false döndürürse, bu adımları durdur.
    2. [[ToneBuffer]] yuvası boş bir dize içeriyorsa, RTCDTMFToneChangeEvent arabirimini kullanarak tone niteliği boş bir dizeye ayarlanmış tonechange adlı bir olayı RTCDTMFSender nesnesinde tetikle ve bu adımları durdur.
    3. [[ToneBuffer]] yuvasından ilk karakteri kaldır ve bu karakteri tone olarak belirle.
    4. tone "," ise, ilişkili RTP ortam akışında tonların gönderimini 2000 ms geciktir ve 2000 ms sonra çalıştırılacak bir görevi kuyruğa ekle.
    5. tone "," değilse, uygun kodlayıcıyı kullanarak ilişkili RTP ortam akışında tone'un [[Duration]] ms boyunca çalımını başlat, ardından [[Duration]] + [[InterToneGap]] ms sonra çalıştırılacak bir görevi kuyruğa ekle.
    6. RTCDTMFToneChangeEvent arabirimini kullanarak tone niteliği tone olarak ayarlanmış tonechange adlı bir olayı RTCDTMFSender nesnesinde tetikle.

insertDTMF, ton arabelleğini değiştirdiğinden, çalınmakta olan DTMF tonlarına ekleme yapmak için, [[ToneBuffer]] yuvasında saklanan kalan tonlar ile yeni tonların birlikte eklenmiş olduğu bir dize içeren bir insertDTMF çağrısı yapmak gerekir. Boş bir tones parametresi ile insertDTMF çağrılması, o anda çalınmakta olan tonun ardından çalınmak üzere kuyruğa alınmış tüm tonları iptal etmek için kullanılabilir.

7.3 canInsertDTMF algoritması

Bir RTCDTMFSender örneği olan dtmfSender için DTMF gönderilip gönderilemeyeceğini belirlemek üzere, kullanıcı aracısı MUST aşağıdaki adımları çalıştırmalıdır:

  1. dtmfSender ile ilişkili RTCRtpSendersender olarak belirle.
  2. sender ile ilişkili RTCRtpTransceivertransceiver olarak belirle.
  3. transceiver ile ilişkili RTCPeerConnectionconnection olarak belirle.
  4. connection'ın RTCPeerConnectionState değeri "connected" değilse false döndür.
  5. transceiver.[[Stopping]] değeri true ise false döndür.
  6. sender.[[SenderTrack]] değeri null ise false döndür.
  7. transceiver.[[CurrentDirection]] değeri ne "sendrecv" ne de "sendonly" ise false döndür.
  8. sender.[[SendEncodings]][0].active değeri false ise false döndür.
  9. Bu sender ile gönderim için "audio/telephone-event" mimetipine sahip hiçbir kodlayıcı müzakere edilmemişse false döndür.
  10. Aksi halde true döndür.

7.4 RTCDTMFToneChangeEvent

tonechange olayı RTCDTMFToneChangeEvent arabirimini kullanır.

WebIDL[Exposed=Window]
                        interface RTCDTMFToneChangeEvent : Event {
                          constructor(DOMString type,
                            optional RTCDTMFToneChangeEventInit eventInitDict = {});
                          readonly attribute DOMString tone;
                        };

7.4.1 Kurucular

RTCDTMFToneChangeEvent.constructor()

Yeni bir RTCDTMFToneChangeEvent oluşturur.

7.4.2 Nitelikler

tone · DOMString · salt okunur

tone niteliği, az önce çalımı başlayan tonun karakterini ("," dahil) içerir (insertDTMF'e bakınız). Değer boş bir dize ise, [[ToneBuffer]] yuvasının boş bir dize olduğunu ve önceki tonların çalımının tamamlandığını gösterir.

WebIDLdictionary RTCDTMFToneChangeEventInit : EventInit {
                          DOMString tone = "";
                        };

7.4.3 RTCDTMFToneChangeEventInit Sözlüğü Üyeleri

tone · DOMString · varsayılan ""

tone niteliği, az önce çalımı başlayan tonun karakterini ("," dahil) içerir (insertDTMF'e bakınız). Değer boş bir dize ise, [[ToneBuffer]] yuvasının boş bir dize olduğunu ve önceki tonların çalımının tamamlandığını gösterir.