RTCRtpSender: Eigenschaft dtmf
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2020 browserübergreifend verfügbar.
Die schreibgeschützte Eigenschaft dtmf der Schnittstelle RTCRtpSender gibt einen RTCDTMFSender zurück, mit dem Sie DTMF-Töne über den Audiotrack dieses Senders senden können.
Wert
Ein RTCDTMFSender, wenn es sich um einen Audiosender handelt, andernfalls null.
Jeder Audiosender erhält bei seiner Erstellung einen eigenen RTCDTMFSender. Eine Verbindung, die zwei Audiotracks sendet, verfügt daher über zwei davon. Sender für Videotracks geben null zurück.
Ein Wert von dtmf, der nicht null ist, bedeutet noch nicht, dass Sie Töne senden können. Die Töne werden zusammen mit dem Audio im RTP-Stream übertragen. Deshalb muss der Sender verbunden sein und Daten senden, und die beiden Kommunikationspartner müssen den Codec audio/telephone-event ausgehandelt haben. Prüfen Sie dazu canInsertDTMF oder behandeln Sie den InvalidStateError, den insertDTMF() auslöst.
Beispiele
>Töne über einen Audiotrack senden
Dieses Beispiel fügt einer Verbindung einen Mikrofontrack hinzu und sendet eine Wählfolge, sobald die Verbindung hergestellt ist. addTrack() gibt den RTCRtpSender für den Track zurück, sodass Sie nicht danach suchen müssen.
const pc = new RTCPeerConnection(configuration);
async function dial(tones) {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
const sender = pc.addTrack(track, stream);
// The track is an audio track, so the sender has a DTMF sender
const dtmfSender = sender.dtmf;
dtmfSender.addEventListener("tonechange", (event) => {
if (event.tone === "") {
console.log("Finished sending tones.");
} else {
console.log(`Sent tone: ${event.tone}`);
}
});
pc.addEventListener("connectionstatechange", () => {
if (pc.connectionState === "connected" && dtmfSender.canInsertDTMF) {
dtmfSender.insertDTMF(tones);
}
});
}
Audiosender einer Verbindung ermitteln
Da nur Audiosender über ein dtmf-Objekt verfügen, können Sie sie mithilfe dieser Eigenschaft aus dem Ergebnis von RTCPeerConnection.getSenders() auswählen:
const audioSenders = pc.getSenders().filter((sender) => sender.dtmf);
Spezifikationen
| Spezifikation |
|---|
| WebRTC: Real-Time Communication in Browsers> # dom-rtcrtpsender-dtmf> |