Start · Sprachen · JavaScript · Referenz · RTCRemoteInboundRtpStreamStats.kind

RTCRemoteInboundRtpStreamStats.kind

Eigenschaft

String (<code>"audio"</code> oder <code>"video"</code>), der angibt, welche Medienart der RTP-Stream enthält, den die Gegenstelle von uns empfängt.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (WebRTC-St Kategorie: webapi

Signatur

RTCRemoteInboundRtpStreamStats.kind

Beschreibung

Die schreibgeschützte Eigenschaft kind eines RTCRemoteInboundRtpStreamStats-Objekts gibt an, ob der beschriebene RTP-Stream Audio oder Video transportiert. Mögliche Werte sind "audio" und "video". Der Wert stimmt mit kind des zugehörigen MediaStreamTrack überein.

Statistiken vom Typ "remote-inbound-rtp" beschreiben, wie die Gegenstelle einen Stream empfängt, den der lokale Peer sendet. Die Daten stammen aus RTCP-Receiver-Reports (RR) und liefern z. B. packetsLost, jitter, roundTripTime und fractionLost. Mit kind lassen sich diese Werte nach Medienart trennen, etwa um die Audioqualität getrennt von der Videoqualität zu überwachen.

Man verwendet kind meist beim Durchlaufen des RTCStatsReport, den RTCPeerConnection.getStats() oder RTCRtpSender.getStats() liefert. So kann man z. B. bei hohem Videoverlust die Bitrate senken, ohne den Audiostream anzufassen.

Rückgabewert

Typ
string
Beschreibung
"audio", wenn der Stream Audio enthält, oder "video", wenn er Video enthält.

Beispiele

Remote-Inbound-Statistiken nach Medienart ausgeben

const logRemoteInbound = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'remote-inbound-rtp') {
      console.log(`${stats.kind}: verloren=${stats.packetsLost}, RTT=${stats.roundTripTime ?? '–'} s`);
    }
  });
};

// pc ist eine bestehende, verbundene RTCPeerConnection
await logRemoteInbound(pc);
audio: verloren=3, RTT=0.042 s video: verloren=27, RTT=0.045 s

Videobitrate bei hohem Paketverlust senken

const adaptVideo = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type !== 'remote-inbound-rtp' || stats.kind !== 'video') continue;

    if (stats.fractionLost > 0.1) {
      const sender = pc.getSenders().find((s) => s.track?.kind === 'video');
      if (!sender) return;
      const params = sender.getParameters();
      if (!params.encodings?.length) return;
      params.encodings[0].maxBitrate = 300_000; // 300 kbit/s
      await sender.setParameters(params);
      console.log('Videobitrate reduziert, Verlustrate:', stats.fractionLost);
    }
  }
};

setInterval(() => adaptVideo(pc), 5000);
Videobitrate reduziert, Verlustrate: 0.14

Statistiken eines einzelnen Senders abfragen

const [audioSender] = pc.getSenders().filter((s) => s.track?.kind === 'audio');
const report = await audioSender.getStats();

const remote = [...report.values()].find((s) => s.type === 'remote-inbound-rtp');
console.log(remote?.kind, remote?.jitter);
audio 0.0031

// Wichtig · Fallstricke

  • remote-inbound-rtp-Einträge erscheinen erst, wenn der erste RTCP-Receiver-Report der Gegenstelle angekommen ist. Direkt nach dem Verbindungsaufbau fehlen sie daher oft.
  • Ältere Browser und ältere Fassungen der Spezifikation nutzten mediaType statt kind. Für ältere Umgebungen hilft stats.kind ?? stats.mediaType.
  • kind nennt nur die Medienart, nicht den Codec. Dafür löst man codecId im selben Bericht auf.
  • Filtere immer zuerst nach type: Auch andere Statistiktypen (inbound-rtp, outbound-rtp, remote-outbound-rtp) haben eine Eigenschaft kind.
  • Die genaue Unterstützung einzelner Statistikfelder unterscheidet sich je nach Browser. Prüfe das vor dem Einsatz in Produktion.