Start · Sprachen · JavaScript · Referenz · RTCDataChannel.priority

RTCDataChannel.priority

Eigenschaft

Schreibgeschützter String, der die Priorität eines <code>RTCDataChannel</code> angibt: <code>"very-low"</code>, <code>"low"</code>, <code>"medium"</code> oder <code>"high"</code>.

seit JavaScript WebRTC Priority Control API – eingeschränkte Brows Kategorie: webapi

Signatur

RTCDataChannel.priority

Beschreibung

Die Eigenschaft priority eines RTCDataChannel gibt an, mit welcher relativen Priorität der Browser die Daten dieses Kanals übertragen soll, wenn mehrere Kanäle oder Medienströme sich die Bandbreite einer RTCPeerConnection teilen. Mögliche Werte sind "very-low", "low", "medium" und "high". Der Standardwert ist "low".

Die Eigenschaft ist schreibgeschützt. Die Priorität wird einmalig beim Anlegen des Kanals über das Optionsobjekt von RTCPeerConnection.createDataChannel() festgelegt ({ priority: "high" }) und lässt sich danach nicht mehr ändern. Brauchst du eine andere Priorität, musst du einen neuen Kanal erzeugen.

Sinnvoll ist das, wenn du unterschiedlich wichtige Daten über getrennte Kanäle schickst: etwa Steuerbefehle oder Chatnachrichten mit hoher Priorität und große Dateiübertragungen oder Telemetrie mit niedriger Priorität. Die Priorität ist nur ein Hinweis für den SCTP-Scheduler des Browsers. Wie viel Bandbreite ein Kanal tatsächlich bekommt oder wann er sendet, ist damit nicht garantiert.

Rückgabewert

Typ
"very-low" | "low" | "medium" | "high"
Beschreibung
Die beim Erzeugen festgelegte Priorität des Datenkanals. Wird keine angegeben, ist der Wert "low". In Browsern ohne Unterstützung ist die Eigenschaft undefined.

Beispiele

Priorität beim Erzeugen festlegen und auslesen

const pc = new RTCPeerConnection();

// Kanal für Steuerbefehle mit hoher Priorität
const control = pc.createDataChannel('control', { priority: 'high' });
// Kanal ohne Angabe bekommt den Standardwert
const bulk = pc.createDataChannel('bulk');

console.log(control.priority);
console.log(bulk.priority);
high low

Feature-Detection mit Fallback

const pc = new RTCPeerConnection();
const channel = pc.createDataChannel('chat', { priority: 'medium' });

if ('priority' in channel) {
  console.log(`Priorität aktiv: ${channel.priority}`);
} else {
  // Browser ignoriert die Option stillschweigend
  console.log('Priority Control API nicht unterstützt');
}
Priorität aktiv: medium (oder: Priority Control API nicht unterstützt)

Mehrere Kanäle nach Wichtigkeit staffeln

const pc = new RTCPeerConnection();

const channelConfig = [
  { label: 'input',     priority: 'high' },     // Eingaben in Echtzeit
  { label: 'chat',      priority: 'medium' },
  { label: 'telemetry', priority: 'low' },
  { label: 'files',     priority: 'very-low' }  // große Übertragungen
];

const channels = Object.fromEntries(
  channelConfig.map(({ label, priority }) => [
    label,
    pc.createDataChannel(label, { priority })
  ])
);

for (const [label, ch] of Object.entries(channels)) {
  console.log(label, '→', ch.priority ?? 'nicht unterstützt');
}
input → high chat → medium telemetry → low files → very-low

Versuch, die Priorität nachträglich zu ändern

'use strict';
const pc = new RTCPeerConnection();
const ch = pc.createDataChannel('data', { priority: 'low' });

try {
  ch.priority = 'high'; // Eigenschaft ist schreibgeschützt
} catch (err) {
  console.log(err.name);
}
console.log(ch.priority);
TypeError low

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wird außerhalb des Strict Mode ohne Meldung ignoriert und wirft im Strict Mode einen TypeError. Die Priorität lässt sich nur über createDataChannel(label, { priority }) festlegen.
  • Nur ein Hinweis: Der Browser nutzt die Priorität zur Planung beim Senden (SCTP-Scheduling). Durchsatz oder Latenz sind damit nicht garantiert. Bei freier Bandbreite ist oft kein Unterschied zu merken.
  • Nur lokal: Die Priorität gilt für die sendende Seite. Beim Kanal, den die Gegenseite über das datachannel-Ereignis erhält, steht nicht zwingend derselbe Wert. Bei ausgehandelten Kanälen (negotiated: true) sollten beide Seiten dieselbe Priorität angeben.
  • Browser-Kompatibilität: Die Eigenschaft stammt aus der Erweiterung „WebRTC Priority Control“ und wird nicht von allen Browsern unterstützt. Prüfe sie per Feature-Detection ('priority' in channel). Nicht unterstützte Browser ignorieren die Option priority ohne Fehlermeldung.
  • Ungültige Werte für die Option priority (z. B. "urgent") führen beim Aufruf von createDataChannel() zu einem TypeError.