RTCRtpSender: dtmf-Eigenschaft
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 des Interfaces RTCRtpSender gibt einen RTCDTMFSender zurück, mit dem Sie DTMF-Töne auf der Audiospur dieses Senders senden können.
Wert
Ein RTCDTMFSender, wenn dies ein Audiosender ist, oder null, wenn nicht.
Jeder Audiosender erhält bei seiner Erstellung einen eigenen RTCDTMFSender, sodass eine Verbindung, die zwei Audiospuren sendet, zwei davon hat.
Sender für Videospuren geben null zurück.
Ein nicht-null-Wert für dtmf bedeutet nicht, dass Sie bereits Töne senden können.
Töne werden im RTP-Stream zusammen mit dem Audio übertragen. Daher muss der Sender verbunden sein und senden, und die beiden Peers müssen den Codec audio/telephone-event ausgehandelt haben.
Prüfen Sie hierfür canInsertDTMF, oder behandeln Sie den InvalidStateError, den insertDTMF() auslöst.
Beispiele
>Töne auf einer Audiospur senden
Dieses Beispiel fügt einer Verbindung eine Mikrofonspur hinzu und sendet anschließend eine Wählzeichenfolge, sobald die Verbindung hergestellt ist.
addTrack() gibt den RTCRtpSender für die Spur zurück, daher muss nicht danach gesucht werden.
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);
}
});
}
Die Audiosender einer Verbindung finden
Da nur Audiosender ein dtmf-Objekt haben, können Sie die Eigenschaft verwenden, um sie aus RTCPeerConnection.getSenders() herauszufiltern:
const audioSenders = pc.getSenders().filter((sender) => sender.dtmf);
Spezifikationen
| Spezifikation |
|---|
| WebRTC: Real-Time Communication in Browsers> # dom-rtcrtpsender-dtmf> |