Einschränkungen bei Publisher-Videos – Web

Sobald Sie einen Publisher initialisiert, können Sie die gewünschte Auflösung und Bildrate der ausgehenden Videospur festlegen. Auf diese Weise können Sie die Bandbreite und die CPU-Auslastung für verschiedene UI-Größen (Miniaturansichten, Kacheln, Vollbild) und die Geräte der Abonnenten optimieren.

Dieses Thema umfasst die folgenden Abschnitte:

Die Einschränkungen bei Publisher-Videos verstehen

Der Verlag kann für ein bevorzugt Auflösung und Bildrate für die Videospur: Das SDK legt Beschränkungen für das Aufnahmegerät und die ausgehende Spur fest. Abonnenten profitieren von geringeren Anforderungen an Bandbreite und CPU-Leistung, wenn der Herausgeber für kleine UI-Ziele kleinere Größen oder niedrigere Bildraten festlegt. Beachten Sie, dass die übertragene Qualität je nach Gerätefunktionen und Netzwerkbedingungen weiter angepasst werden kann.

Festlegen der bevorzugten Auflösung

Rufen Sie an. publisher.setPreferredResolution(preferredResolution) So legen Sie die gewünschten Pixelabmessungen fest:

await publisher.setPreferredResolution({ width: 640, height: 360 });
  • preferredResolution ist ein Objekt: { width: number, height: number }.
  • Die bevorzugte Auflösung darf die ursprüngliche Veröffentlichungsauflösung nicht überschreiten.
  • Gilt nur, wenn der Publisher Video aufzeichnet (publishVideo: true).

Löst einen Fehler aus, wenn:

  • Der Publisher ist ein reiner Audio-Dienst.
  • width oder height ist keine positive ganze Zahl.
  • Die angeforderte Auflösung übersteigt die ursprüngliche Veröffentlichungsauflösung.
try {
  // If the initial publish was 640x480, this will throw:
  await publisher.setPreferredResolution({ width: 1920, height: 1080 });
} catch (error) {
  console.error('Failed to set preferred resolution:', error.message);
}

Festlegen der bevorzugten Bildrate

Rufen Sie an. publisher.setPreferredFrameRate(frameRate) So legen Sie einen bevorzugten Wert für die Bildrate fest:

await publisher.setPreferredFrameRate(15);
  • frameRate muss eine positive ganze Zahl (≥ 1) sein.
  • Erfordert eine aktive Videospur.

Löst einen Fehler aus, wenn:

  • Der Publisher ist ein reiner Audio-Dienst.
  • frameRate ist keine gültige ganze Zahl ≥ 1.

Wie sich Einschränkungen auf die Lieferung auswirken

Bevorzugte Einschränkungen wirken sich auf die ausgehende Videospur für alle Abonnenten in den Stream. Die endgültige Auflösung und Bildrate der übertragenen Daten können jedoch aus folgenden Gründen geringer ausfallen:

  • Einschränkungen des Aufnahmegeräts
  • Einschränkungen des Browsers oder des Betriebssystems
  • Netzwerkbedingungen und adaptive Medienentscheidungen

Bewährte Praktiken

  • Wenn Sie die ideale Auflösung und Bildrate im Voraus kennen, können Sie diese beim Erstellen des Publishers mit OT.initPublisher() (zum Beispiel über resolution und frameRate). Für Abonnenten können Sie diese Einstellungen weglassen oder preferredResolution: 'auto' beim Aufruf von Session.subscribe().
  • Verwenden Sie die Abonnenten-APIs (subscriber.setPreferredResolution() / subscriber.setPreferredFrameRate()), um die Funktionsweise eines Einzelabonnent empfängt/decodiert/stellt einen Stream dar. Dies betrifft nur diesen Abonnenten und hat keinen Einfluss darauf, was der Publisher sendet oder was andere Abonnenten empfangen.
  • Verwenden Sie die Publisher-APIs (publisher.setPreferredResolution() / publisher.setPreferredFrameRate()), um zu ändern, was die Herausgeber sendet. Dies betrifft alle Abonnenten dieses Streams, die die aktualisierten Einstellungen automatisch erhalten. In einigen Fällen kann es sinnvoll sein, die Auflösung des Publishers mithilfe der Methode „preferredResolution“ zu verringern, beispielsweise:
    • Wenn Sie bemerken, dass das Publisher-Gerät Probleme hat, sei es aufgrund von CPU-Beschränkungen oder Netzwerkproblemen, und Sie die Belastung schneller lindern möchten, als es der WebRTC-Stack normalerweise tun würde.
    • Wenn der Akku des Geräts fast leer ist und Sie den Stromverbrauch minimieren möchten, um die Gesprächsdauer zu verlängern.
    • Wenn Sie eine Bildschirmfreigabe initiieren oder weitere Publisher vom selben Gerät aus starten und Rechenressourcen für diese Aktivitäten freigeben müssen.
  • Die bevorzugte Auflösung/Bildrate des Publishers kann niemals die bei der Initialisierung des Publishers angegebenen Werte überschreiten. Initialisieren Sie den Publisher mit der maximalen Auflösung und Bildrate, die Sie benötigen, und reduzieren oder erhöhen Sie dann dynamisch innerhalb dieser Grenzen, je nach Anwendungsfall.
  • Verwenden Sie geeignete Bildraten:
    • 5 fps – statische Dashboards, Folien, bandbreitenabhängige Benutzeroberflächen
    • 15 fps – Inhalte mit wenig Bewegung
    • 30 fps – Vollbild-/hochwertiges Video
  • Netzwerkbedingungen können das SDK daran hindern, die von Ihnen bevorzugte Auflösung und Bildrate beizubehalten. Behandeln Sie die bevorzugten Werte als Zielwerte: Wenn die Bandbreite oder die CPU eingeschränkt wird, kann das SDK die veröffentlichte/abonnierte Videoqualität automatisch reduzieren (z. B. kann eine 1080p-Einstellung bei schlechten Netzwerkbedingungen vorübergehend auf eine niedrigere Auflösung fallen).
  • Diese APIs werden derzeit unterstützt nur im JavaScript-SDK.

Beispiele

// Lower quality for mobile users
if (isMobileUser) {
  publisher.setPreferredResolution({ width: 320, height: 180 });
  publisher.setPreferredFrameRate(15);
}

// Higher quality for desktop
if (isDesktopUser) {
  publisher.setPreferredResolution({ width: 1280, height: 720 });
  publisher.setPreferredFrameRate(30);
}

// Error when using resolution above initial publish
try {
  await publisher.setPreferredResolution({ width: 1920, height: 1080 }); // If initial was 640x480, throws error
} catch (error) {
  console.error(error.message);
}

// Debugging: Current track settings
const videoTrack = publisher.getVideoSource().track;
const { width, height, frameRate } = videoTrack.getSettings();
console.log('Current resolution:', width, 'x', height);
console.log('Current frame rate:', frameRate);

Fehlersuche

Umgang mit Fehlern

Aufrufe in try/catch und benutzerfreundliche Meldungen anzeigen, wenn Einschränkungen ungültig sind oder die Umgebung diese nicht erfüllen kann.

async function setPublisherQuality(publisher, preferredResolution, preferredFrameRate) {
  try {
    await publisher.setPreferredResolution(preferredResolution);
    await publisher.setPreferredFrameRate(preferredFrameRate);
  } catch (err) {
    showMessage('Unable to apply video constraints. Check your device and network.');
    console.error(err);
  }
}

Überlegungen zum Netzwerk

Bei eingeschränkter Netzwerkkapazität kann die Medien-Pipeline die ausgegebene Auflösung oder Bildrate unabhängig von den bevorzugten Einstellungen verringern. Erwägen Sie die Implementierung von UI-Anzeigen für Modi mit reduzierter Qualität.

Weitere Ressourcen