Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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.

js
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:

js
const audioSenders = pc.getSenders().filter((sender) => sender.dtmf);

Spezifikationen

Spezifikation
WebRTC: Real-Time Communication in Browsers
# dom-rtcrtpsender-dtmf

Browser-Kompatibilität

Siehe auch