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 olabilirAlı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:
- Yeni oluşturulmuş bir
RTCDTMFSendernesnesi olarakdtmfbelirle. dtmf'in bir [[Duration]] iç yuvasına sahip olmasını sağla.dtmf'in bir [[InterToneGap]] iç yuvasına sahip olmasını sağla.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 · EventHandlerBu olay işleyicisinin olay türü tonechange'dir.
canInsertDTMF · boolean · salt okunurRTCDTMFSender 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 okunurtoneBuffer 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.
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:
- DTMF göndermek için kullanılan
RTCRtpSender'ısenderolarak belirle. senderile ilişkiliRTCRtpTransceivernesnesinitransceiverolarak belirle.senderile ilişkiliRTCDTMFSender'ıdtmfolarak belirle.dtmfiçin DTMF gönderilip gönderilemeyeceğini belirleme işlemifalsedöndürürse, birInvalidStateErrorfırlat.- Yöntemin birinci argümanını
tonesolarak belirle. - Yöntemin ikinci argümanını
durationolarak belirle. - Yöntemin üçüncü argümanını
interToneGapolarak belirle. tonesherhangi bir tanınmayan karakter içeriyorsa, birInvalidCharacterErrorfırlat.- Nesnenin
[[ToneBuffer]]yuvasınıtonesolarak ayarla. dtmf.[[Duration]]değerinidurationdeğerine ayarla.dtmf.[[InterToneGap]]değeriniinterToneGapdeğerine ayarla.durationdeğeri 40 ms'den küçükse,dtmf.[[Duration]]değerini 40 ms olarak ayarla.durationparametresinin değeri 6000 ms'den büyükse,dtmf.[[Duration]]değerini 6000 ms olarak ayarla.interToneGapdeğeri 30 ms'den küçükse,dtmf.[[InterToneGap]]değerini 30 ms olarak ayarla.interToneGapdeğeri 6000 ms'den büyükse,dtmf.[[InterToneGap]]değerini 6000 ms olarak ayarla.[[ToneBuffer]]yuvası boş bir dize ise, bu adımları durdur.- 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:
- Eğer
dtmfiçin DTMF gönderilip gönderilemeyeceğini belirleme işlemifalsedöndürürse, bu adımları durdur. [[ToneBuffer]]yuvası boş bir dize içeriyorsa,RTCDTMFToneChangeEventarabirimini kullanaraktoneniteliği boş bir dizeye ayarlanmıştonechangeadlı bir olayıRTCDTMFSendernesnesinde tetikle ve bu adımları durdur.[[ToneBuffer]]yuvasından ilk karakteri kaldır ve bu karakteritoneolarak belirle.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.tone","değilse, uygun kodlayıcıyı kullanarak ilişkili RTP ortam akışındatone'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.RTCDTMFToneChangeEventarabirimini kullanaraktoneniteliğitoneolarak ayarlanmıştonechangeadlı bir olayıRTCDTMFSendernesnesinde tetikle.
- Eğer
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:
dtmfSenderile ilişkiliRTCRtpSender'ısenderolarak belirle.senderile ilişkiliRTCRtpTransceiver'ıtransceiverolarak belirle.transceiverile ilişkiliRTCPeerConnection'ıconnectionolarak belirle.connection'ınRTCPeerConnectionStatedeğeri "connected" değilsefalsedöndür.transceiver.[[Stopping]]değeritrueisefalsedöndür.sender.[[SenderTrack]]değerinullisefalsedöndür.transceiver.[[CurrentDirection]]değeri ne "sendrecv" ne de "sendonly" isefalsedöndür.sender.[[SendEncodings]][0].activedeğerifalseisefalsedöndür.- Bu
senderile gönderim için"audio/telephone-event"mimetipine sahip hiçbir kodlayıcı müzakere edilmemişsefalsedöndür. - Aksi halde
truedö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 okunurtone 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.