Signatur
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
"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);
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');
}
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');
}
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);
// 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 übercreateDataChannel(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 Optionpriorityohne Fehlermeldung. - Ungültige Werte für die Option
priority(z. B."urgent") führen beim Aufruf voncreateDataChannel()zu einemTypeError.