Einstellen der maximalen Bitrate für einen Stream
Sie können die maximale Bitrate, die ein Anbieter für Kamera-Videostreams verwenden kann, dynamisch steuern.
In diesem Handbuch wird gezeigt, wie die Einstellungen für die Videobitrate konfiguriert werden, wie man mit den verschiedenen Voreinstellungen umgeht, wie man Rohbitraten einstellt und wie man die API am besten effektiv nutzt.
Dieses Thema umfasst die folgenden Abschnitte:
Übersicht
Sie können die maximale Bitrate, die ein Publisher bei der Codierung von Medien verwenden kann, dynamisch festlegen. Der Video-Encoder passt dann die Bitrate dynamisch an, indem er einen Wert innerhalb des zulässigen Bereichs verwendet, der von einem Mindestschwellenwert bis zur festgelegten maximalen Bitrate reicht und auf den Netzwerkbedingungen und anderen Einschränkungen basiert.
Die Einstellung der maximalen Bitrate kann dazu beitragen, den Bandbreitenverbrauch zu reduzieren, wenn ein Benutzer eine Verbindung über eine gebührenpflichtige Verbindung herstellt. Lesen Sie unbedingt die Beschränkungen unten.
Beschränkungen
Es gibt einige wichtige Einschränkungen, die zu beachten sind:
Netzbedingungen - Die tatsächlich im Netzwerk erreichte Bitrate kann aufgrund von Echtzeit-Netzwerkschätzungen, Bandbreitenschwankungen und Backend-Beschränkungen niedriger sein als der eingestellte Wert.
Außerhalb der Grenzen liegende Werte - Wenn Sie einen Bitratenwert außerhalb des gültigen Bereichs angeben, kann das SDK die Anfrage ignorieren oder einen Fehler zurückgeben.
API-Verwendung
Video-Bitrate-Voreinstellungen
Die API bietet Voreinstellungen für die Videobitrate, die die Reduzierung der Videoqualität vereinfachen, ohne dass man sich um Codec- und Sitzungseinstellungen kümmern muss. Diese Voreinstellungen wurden für gängige Anwendungsfälle wie Videokonferenzen entwickelt und sind auf die Auflösungen 480p, 540p, 720p und 1080p zugeschnitten.
Die verfügbaren Voreinstellungen sind:
DEFAULT- Die Standard-SDK-Bitrateneinstellung, die ein ausgewogenes visuelles Erlebnis für Videostreams bietet.BW_SAVER- Eine Einstellung mittlerer Qualität für Videokonferenzen, die die Bitrate reduziert, um Bandbreite zu sparen.EXTRA_BW_SAVER- Die niedrigste Bitrate für wichtige Videokommunikation, die eine niedrige Videoqualität bei minimaler Bandbreitennutzung bietet.
Bitte beachten Sie, dass die genauen Bitratenwerte, die beim Umgang mit Voreinstellungen verwendet werden, implementierungsspezifisch sind und von dem ausgehandelten Codec und dem Medienmodus (weitergeleitet oder geroutet) abhängen. Die Video API-Client-SDKs enthalten Methoden zum Setzen und Abrufen der Bitratenvoreinstellung.
Einstellung von Rohbitratenwerten
Wenn die vordefinierten Bitratenvorgaben Ihren Anforderungen nicht genügen, können Sie einen benutzerdefinierten Rohbitratenwert festlegen. Damit können Sie bestimmte Bitratengrenzen innerhalb eines Bereichs von 5.000 bps bis 10.000.000 bps festlegen. Bitte beachten Sie, dass der Wert nur für die Encoder-Bitrate gilt, so dass der Netzwerk-Overhead zusätzlich zum gewählten Wert anfällt.
Die Vonage Video API-Client-SDKs enthalten Methoden zum Festlegen des Rohbitratenwerts und zum Abrufen desselben. Solange keine Rohbitrate festgelegt ist oder nur Voreinstellungen festgelegt sind, gibt der Getter 0 zurück (außer beim JS SDK, wo der zurückgegebene Wert undefiniert ist). Sobald eine Rohbitrate festgelegt ist, gibt der Getter für die Bitratenvoreinstellung "custom" zurück, was bedeutet, dass ein benutzerdefinierter Wert angewendet wurde. Verwenden Sie jedoch nicht die Voreinstellung "custom" im Setter, sondern geben Sie nur die spezifische Bitratenzahl an, die als Höchstwert verwendet werden soll.
Interaktion von Bitrate und Kodierungsschicht mit VP8 und Skalierbarkeit aktiviert
Die Änderung der maximalen Bitrate bei der Verwendung von skalierbarem VP8 sorgt für zusätzliche Effizienz - das Client SDK aktiviert oder deaktiviert die Codierungsschichten dynamisch auf der Grundlage der verfügbaren Bitrate, um sicherzustellen, dass der Videostrom so effizient wie möglich ist. Dieser Prozess passt die Auflösung an, mit der der Publisher veröffentlicht.
Die folgenden Hinweise gelten für die Voreinstellung bei Verwendung von VP8:
DEFAULT- Bei dieser Voreinstellung werden alle verfügbaren Codierungsebenen verwendet. Für einen typischen Stream umfasst dies bis zu drei Ebenen (niedrig, mittel und hoch).BW_SAVER- Diese Voreinstellung verwendet nur die ersten beiden Kodierungsebenen (niedrige und mittlere Qualität). Dies soll Bandbreite sparen und eignet sich daher für Szenarien wie Videokonferenzen, bei denen eine hohe Videoqualität nicht so wichtig ist.EXTRA_BW_SAVER- Bei dieser Voreinstellung wird die Bitrate weiter reduziert, indem nur die Basis-Kodierungsschicht (niedrigste) verwendet wird. Dies ist der bandbreiteneffizienteste Modus, der das absolute Minimum an Qualität für eine sinnvolle Videokommunikation bietet.
Wenn Sie einen Wert für die Rohbitrate festlegen und die angegebene Bitrate nicht ausreicht, um bestimmte Codierungsebenen beizubehalten, schaltet das SDK automatisch die höheren Ebenen aus. Wenn beispielsweise die Bitrate für die mittleren oder hochwertigen Ebenen zu niedrig ist, werden diese Ebenen verworfen und nur die Basisebene wird übertragen.
Wenn eine neue bereitgestellte Bitrate hoch genug ist, um weitere Kodierungsebenen beizubehalten, reaktiviert das SDK die höheren Kodierungsebenen und stellt die Videoqualität schrittweise wieder her, indem die mittleren und hohen Ebenen wieder hinzugefügt werden.
Dieser Mechanismus sorgt dafür, dass der Videostream so effizient wie möglich bleibt und die verfügbare Bandbreite optimal genutzt wird, ohne dass der Benutzer darunter leidet.
Beispiele
Zu Beginn einer Sitzung verwendet ein Verleger die DEFAULT Voreinstellung, die die volle Videoqualität bietet. In diesem Stadium der Sitzung nehmen wir an, dass der nicht skalierbare Codec VP8 ausgehandelt wurde. Nach einem Netzwerkwechsel zu einer gebührenpflichtigen Verbindung (z. B. Mobilfunk) können Sie jedoch die Veröffentlichungsbandbreite mit der Option BW_SAVER Voreinstellung. Wenn Sie eine Voreinstellung für die maximale Bitrate des Herausgebers verwenden, sorgt das Client SDK dafür, dass die Qualitätsstufe unabhängig von jedem Ereignis gleich bleibt. Wenn das Netzwerk wieder auf eine unbegrenzte Verbindung umschaltet, können Sie die Voreinstellung wiederherstellen, indem Sie den Parameter DEFAULT voreingestellt.
Sie können auch den Wert der Rohbitrate festlegen, um einen oberen Schwellenwert für die Bandbreite festzulegen.
Einzelheiten zu den einzelnen Client SDKs finden Sie im Folgenden:
Die Details zur Verwendung von Publisher Max Bitrate im Vonage Video macOS Client SDK sind dieselben wie im Linux Client SDK.
Die properties prop der OTPublisher-Komponente enthält eine videoBitratePreset Eigenschaft. Setzen Sie diese Eigenschaft auf einen der folgenden String-Werte, damit der Herausgeber eine voreingestellte Videobitrate verwendet: default, bw_saver, oder extra_bw_saver. Siehe Video-Bitrate-Voreinstellungen für Details zu diesen Voreinstellungen.
Beispiel:
<OTPublisher
properties={{
videoBitratePreset: 'bw_saver',
// ... other properties
}}
/>
Die videoBitratePreset wird ignoriert, wenn die Eigenschaft maxVideoBitrate Eigenschaft (im nächsten Abschnitt beschrieben) gesetzt ist. Wenn keine der beiden Eigenschaften gesetzt ist, verwendet der Verlag die Standardvorgabe.
Wenn die vordefinierten Voreinstellungen nicht geeignet sind, können Sie manuell einen benutzerdefinierten Rohbitratenwert festlegen.
Die properties prop der OTPublisher-Komponente enthält eine maxVideoBitrate Eigenschaft. Um den maximalen Bitratenwert (anstelle einer Voreinstellung) festzulegen, setzen Sie diese Eigenschaft auf einen Wert zwischen 5.000 und 10.000.000 (in Bits pro Sekunde).
Beispiel:
<OTPublisher
properties={{
maxVideoBitrate: 500000,
// ... other properties
}}
/>
Die maxVideoBitrate hat Vorrang vor der Eigenschaft videoBitratePreset Eigenschaft (beschrieben im vorherigen Abschnitt). Wenn beide eingestellt sind, wird nur die maxVideoBitrate Eigenschaft verwendet wird. Wenn keine der beiden Eigenschaften gesetzt ist, verwendet der Verlag die Standardvoreinstellung.
Bitte beachten Sie, dass die API von allen aktuellen Versionen der unterstützten Browser unterstützt wird. Wenn Sie auf Fehler stoßen, stellen Sie sicher, dass der Client eine aktuelle Browserversion verwendet.
Das Publisher-Objekt umfasst setVideoBitratePreset() und
getVideoBitratePreset() Methoden. Die Website setVideoBitratePreset() Methode akzeptiert
String-Werte - 'DEFAULT', 'BW_SAVER', oder 'EXTRA_BW_SAVER' (oder ihre
Gegenstücke in Kleinbuchstaben) - und die getVideoBitratePreset() Methode gibt diese
Werte (oder 'CUSTOM') zurück. Siehe Video-Bitrate-Voreinstellungen für
weitere Einzelheiten zu diesen Voreinstellungen.
Bitte beachten Sie die getVideoBitratePreset()
Methode gibt zurück undefined wenn zuvor keine Voreinstellung oder Bitrate festgelegt wurde.
Die setVideoBitratePreset() Methode hat einen Parameter: presetdie gewünschte Voreinstellung.
Beispiel:
console.log(publisher.getVideoBitratePreset()); // undefined
await publisher.setVideoBitratePreset('BW_SAVER'); // or 'DEFAULT' or 'EXTRA_BW_SAVER'
console.log(publisher.getVideoBitratePreset()); // 'BW_SAVER'
Die setVideoBitratePreset() Methode kann einen Fehler auslösen, wenn die name des Fehlerobjekts auf den folgenden Wert gesetzt:
OT_INVALID_PARAMETER- Ungültige Voreinstellung. Es muss 'DEFAULT', 'BW_SAVER' oder 'EXTRA_BW_SAVER' sein.OT_UNEXPECTED_ERROR_CODE- Es ist ein unerwarteter Fehler aufgetreten, und die Voreinstellung wurde nicht aktualisiert.
Umfassen Sie den Aufruf der setVideoBitratePreset() Methode in einem try/catch-Block, auch wenn der voreingestellte Name korrekt ist:
const invalidPreset = 'VERY_FAST';
try {
await publisher.setVideoBitratePreset(invalidPreset);
} catch (err) {
console.error(err.name);
// 'OT_INVALID_PARAMETER'
}
Wenn die vordefinierten Voreinstellungen nicht geeignet sind, können Sie manuell einen benutzerdefinierten Rohbitratenwert festlegen.
Um die maximale Videobitrate zu erhalten, die derzeit für einen Publisher eingestellt ist, rufen Sie die getMaxVideoBitrate() Methode eines Publisher-Objekts. Sie gibt die aktuell eingestellte maximale Bitrate (in Bits pro Sekunde) zurück. Wenn kein benutzerdefinierter Wert eingestellt ist, gibt die Funktion undefined.
Beispiel:
console.log(publisher.getMaxVideoBitrate());
Um einen benutzerdefinierten Wert für die maximale Bitrate (anstelle einer Voreinstellung) festzulegen, verwenden Sie die setMaxVideoBitrate() eines Publisher-Objekts zu verwenden. Diese Funktion hat einen einzigen Parameter: bitrateBpsdie gewünschte maximale Bitrate (in Bits pro Sekunde), zwischen 5.000 und 10.000.000.
Beispiel:
const new_bitrate = 300000; // 300 kbps
await publisher.setMaxVideoBitrate(new_bitrate);
Die setMaxVideoBitrate() Methode kann einen Fehler auslösen, wenn die name des Fehlerobjekts auf den folgenden Wert gesetzt:
OT_INVALID_PARAMETER- Ungültige Bitrate. Der Wert muss 0 oder eine Zahl zwischen 5000 und 10000000 sein.OT_UNEXPECTED_ERROR_CODE- Es ist ein unerwarteter Fehler aufgetreten und die Bitrate wurde nicht aktualisiert.
Umfassen Sie den Aufruf der setVideoBitratePreset() Methode in einem try/catch-Block, auch wenn die übergebene Zahl gültig ist.
Siehe Einstellung von Rohbitratenwerten für weitere Einzelheiten.
Wenn Sie den Wert für die maximale Bitrate auf 0 setzen, werden alle zuvor festgelegten Bitratenbeschränkungen aufgehoben und das Standardverhalten wird wiederhergestellt.
const zero_bitrate = 0; // no limitations
const int new_bitrate = 300000; // 300 kbps
publisher.setMaxVideoBitrate(new_bitrate);
// publisher.getMaxVideoBitrate() === 300000
publisher.setMaxVideoBitrate(zero_bitrate);
// publisher.getMaxVideoBitrate() === 0
natale-p marked this conversation as resolved.
Aufrufen der getVideoBitratePreset() Methode nach dem Einstellen einer anderen benutzerdefinierten Bitrate als 0 zurück CUSTOM.
const zero_bitrate = 0; // no limitations
const new_bitrate = 1000000; // 1 mbps
publisher.setMaxVideoBitrate(new_bitrate);
// publisher.getVideoBitratePreset() === 'CUSTOM'
publisher.setMaxVideoBitrate(zero_bitrate);
// publisher.getVideoBitratePreset() === 'DEFAULT'
Der Getter für die Rohbitrate gibt 0 zurück, wenn der Herausgeber eine Voreinstellung verwendet.
let bitrateBps = publisher.getMaxVideoBitrate();
// bitrateBps === 0
publisher.setVideoBitratePreset('bw_saver);
bitrateBps = publisher.getMaxVideoBitrate();
// bitrateBps === 0
publisher.setVideoBitratePreset('extra_bw_saver');
bitrateBps = publisher.getMaxVideoBitrate();
// bitrateBps === 0
publisher.setMaxVideoBitrate(200000);
bitrateBps = publisher.getMaxVideoBitrate();
// bitrateBps === 200000
publisher.setVideoBitratePreset('default');
bitrateBps = publisher.getMaxVideoBitrate();
// bitrateBps === 0
Die PublisherKit .VideoBitratePreset enum enthält voreingestellte Werte:
VideoBitratePresetDefaultVideoBitratePresetBwSaverVideoBitratePresetExtraBwSaverVideoBitratePresetCustom
Siehe Video-Bitrate-Voreinstellungen für Details zu diesen Voreinstellungen.
Um die aktuell konfigurierte Video-Bitratenvoreinstellung für einen bestimmten Publisher abzurufen, rufen Sie die Funktion PublisherKit.getVideoBitratePreset() Methode:
PublisherKit.VideoBitratePreset retrievedBitratePreset = publisherKit.getVideoBitratePreset();
System.out.println("The video bitrate preset is: " + retrievedBitratePreset);
Um eine Voreinstellung zu setzen, rufen Sie die Funktion PublisherKit.setVideoBitratePreset() Methode. Diese Methode enthält einen Parameter: preset - einen Wert aus der VideoBitratePreset enum. Verwenden Sie nicht VideoBitratePresetCustom.
Beispiel:
PublisherKit.VideoBitratePreset bitratePreset = PublisherKit.VideoBitratePreset.VideoBitratePresetBwSaver;
publisherKit.setVideoBitratePreset(bitratePreset);
Wenn die vordefinierten Voreinstellungen nicht geeignet sind, können Sie manuell einen benutzerdefinierten Rohbitratenwert festlegen.
Um die maximale Videobitrate zu erhalten, die derzeit für einen Publisher eingestellt ist, rufen Sie die PublisherKit.getMaxVideoBitrate() Methode. Sie gibt die aktuell eingestellte maximale Bitrate (in Bits pro Sekunde) zurück. Wenn kein benutzerdefinierter Wert eingestellt ist, gibt die Methode 0 zurück.
Beispiel:
int retrievedMaxVideoBitrate = publisherKit.getMaxVideoBitrate();
System.out.println("The maximum video bitrate is: " + retrievedMaxVideoBitrate + " kbps");
Um einen benutzerdefinierten Wert für die maximale Bitrate (anstelle einer Voreinstellung) festzulegen, verwenden Sie die PublisherKit.setMaxVideoBitrate() Methode. Diese Methode hat einen Parameter: maxVideoBitratedie gewünschte maximale Bitrate (in Bits pro Sekunde). Die maxVideoBitrate Wert muss zwischen 5.000 und 10.000.000 liegen.
Beispiel:
int maxVideoBitrate = 300000; // 300 kbps
publisherKit.setMaxVideoBitrate(maxVideoBitrate);
Siehe Einstellung von Rohbitratenwerten für weitere Einzelheiten.
Wenn Sie den Wert für die Rohbitrate auf 0 setzen, werden alle zuvor festgelegten Bitratenbeschränkungen aufgehoben und das Standardverhalten wird wiederhergestellt.
int zeroBitrate = 0; // No limitations
int newBitrate = 300000; // 300 kbps
// Set the maximum video bitrate
publisherKit.setMaxVideoBitrate(newBitrate);
// Validate that the bitrate was set correctly
if (publisherKit.getMaxVideoBitrate() == newBitrate) {
System.out.println("Max video bitrate set successfully to: " + newBitrate);
}
// Reset the maximum video bitrate to the default behavior
publisherKit.setMaxVideoBitrate(zeroBitrate);
// Validate that the bitrate was reset to default
if (publisherKit.getMaxVideoBitrate() == zeroBitrate) {
System.out.println("Max video bitrate reset to default.");
}
Aufrufen der getVideoBitratePreset() Methode nach der Einstellung einer benutzerdefinierten Bitrate zurück VideoBitratePresetCustom.
int newBitrate = 1000000; // 1 Mbps
// Set a custom bitrate
publisherKit.setMaxVideoBitrate(newBitrate);
// Validate that the preset is set to CUSTOM
if (publisherKit.getVideoBitratePreset() == PublisherKit.VideoBitratePreset.VideoBitratePresetCustom) {
System.out.println("Video bitrate preset set to CUSTOM.");
}
// Reset bitrate to default
publisherKit.setMaxVideoBitrate(zeroBitrate);
// Validate that the preset is reset to DEFAULT
if (publisherKit.getVideoBitratePreset() == PublisherKit.VideoBitratePreset.VideoBitratePresetDefault) {
System.out.println("Video bitrate preset reset to DEFAULT.");
}
Die PublisherKit.getMaxVideoBitrate() Methode gibt 0 zurück, wenn der Verleger eine Voreinstellung verwendet.
// Get the current raw bitrate (default should be 0)
int bitrateBps = publisherKit.getMaxVideoBitrate();
assert bitrateBps == 0;
// Set the preset to BW_SAVER
publisherKit.setVideoBitratePreset(PublisherKit.VideoBitratePreset.VideoBitratePresetBwSaver);
bitrateBps = publisherKit.getMaxVideoBitrate();
assert bitrateBps == 0;
// Set the preset to EXTRA_BW_SAVER
publisherKit.setVideoBitratePreset(PublisherKit.VideoBitratePreset.VideoBitratePresetExtraBwSaver);
bitrateBps = publisherKit.getMaxVideoBitrate();
assert bitrateBps == 0;
// Set a custom bitrate
publisherKit.setMaxVideoBitrate(200000);
bitrateBps = publisherKit.getMaxVideoBitrate();
assert bitrateBps == 200000;
// Reset the preset to DEFAULT
publisherKit.setVideoBitratePreset(PublisherKit.VideoBitratePreset.VideoBitratePresetDefault);
bitrateBps = publisherKit.getMaxVideoBitrate();
assert bitrateBps == 0;
Die OTVideoBitratePreset enum enthält voreingestellte Werte:
OTVideoBitratePresetDefaultOTVideoBitratePresetBwSaverOTVideoBitratePresetExtraBwSaverOTVideoBitratePresetCustom
Siehe Video-Bitrate-Voreinstellungen für Details zu diesen Voreinstellungen.
Um die aktuell konfigurierte Video-Bitratenvoreinstellung für einen bestimmten Herausgeber abzurufen, setzen Sie die OTPublisherKit.videoBitratePreset Eigentum:
OTVideoBitratePreset retrievedBitratePreset = publisher.videoBitratePreset;
NSLog(@"The video bitrate preset is: %ld", (long)retrievedBitratePreset);
Um eine Voreinstellung festzulegen, weisen Sie dem Feld videoBitratePreset Eigenschaft. Diese Eigenschaft akzeptiert einen der Werte aus der Tabelle OTVideoBitratePreset
enum, außer für OTVideoBitratePresetCustom.
Beispiel:
publisher.videoBitratePreset = OTVideoBitratePresetBwSaver;
Wenn die vordefinierten Voreinstellungen nicht geeignet sind, können Sie manuell einen benutzerdefinierten Rohbitratenwert festlegen.
Um die maximale Videobitrate zu erhalten, die derzeit für einen Publisher eingestellt ist, prüfen Sie die OTPublisherKit.maxVideoBitrate Eigenschaft. Diese wird auf die maximale Bitrate (in Bits pro Sekunde) festgelegt. Wenn kein benutzerdefinierter Wert festgelegt ist, wird die Eigenschaft auf 0 gesetzt.
Beispiel:
int retrievedMaxVideoBitrate = publisher.maxVideoBitrate;
NSLog(@"The maximum video bitrate is: %d kbps", retrievedMaxVideoBitrate);
Um einen benutzerdefinierten Wert für die maximale Bitrate (anstelle einer Voreinstellung) zu verwenden, setzen Sie den OTPublisherKit.maxVideoBitrate Eigenschaft. Diese Eigenschaft akzeptiert Werte zwischen 5.000 und 10.000.000 (in Bits pro Sekunde).
Beispiel:
publisher.maxVideoBitrate = 300000; // 300 kbps
Siehe Einstellung von Rohbitratenwerten für weitere Einzelheiten.
Wenn Sie den Wert für die Rohbitrate auf 0 setzen, werden alle zuvor festgelegten Bitratenbeschränkungen aufgehoben und das Standardverhalten wird wiederhergestellt.
publisher.maxVideoBitrate = 300000; // Set the maximum video bitrate to 300 kbps
NSLog(@"Max video bitrate set successfully to: %d", publisher.maxVideoBitrate);
publisher.maxVideoBitrate = 0; // Reset the maximum video bitrate to the default behavior
NSLog(@"Max video bitrate reset to default: %d", publisher.maxVideoBitrate);
Nachdem Sie eine benutzerdefinierte Bitrate eingestellt haben, wird die videoBitratePreset Eigenschaft wird auf OTVideoBitratePresetCustom.
publisher.maxVideoBitrate = 1000000; // Set a custom bitrate to 1 Mbps
if (publisher.videoBitratePreset == OTVideoBitratePresetCustom) {
NSLog(@"Video bitrate preset set to CUSTOM.");
}
publisher.maxVideoBitrate = 0; // Reset bitrate to default
if (publisher.videoBitratePreset == OTVideoBitratePresetDefault) {
NSLog(@"Video bitrate preset reset to DEFAULT.");
}
Die publisher.maxVideoBitrate ist auf 0 gesetzt, wenn der Verlag eine Voreinstellung verwendet.
NSLog(@"Default bitrate: %d", publisher.maxVideoBitrate); // Default should be 0
publisher.videoBitratePreset = OTVideoBitratePresetBwSaver;
NSLog(@"Bitrate for BW_SAVER preset: %d", publisher.maxVideoBitrate); // Should be 0
publisher.videoBitratePreset = OTVideoBitratePresetExtraBwSaver;
NSLog(@"Bitrate for EXTRA_BW_SAVER preset: %d", publisher.maxVideoBitrate); // Should be 0
publisher.maxVideoBitrate = 200000; // Set a custom bitrate
NSLog(@"Custom bitrate: %d", publisher.maxVideoBitrate);
publisher.videoBitratePreset = OTVideoBitratePresetDefault; // Reset to default preset
NSLog(@"Bitrate after reset to DEFAULT preset: %d", publisher.maxVideoBitrate); // Should be 0
Die VideoBitratePreset enum enthält voreingestellte Werte:
DefaultBwSaverExtraBwSaverCustom
Siehe Video-Bitrate-Voreinstellungen für Details zu diesen Voreinstellungen.
Um die aktuell konfigurierte Video-Bitratenvoreinstellung für einen bestimmten Publisher abzurufen, rufen Sie die Publisher.VideoBitratePreset Eigentum:
var preset = publisher.VideoBitratePreset;
if (preset == VideoBitratePreset.BwSaver)
{
Console.WriteLine("The publisher is using the BW_SAVER preset.");
}
Um eine Voreinstellung festzulegen, stellen Sie den Publisher.VideoBitratePreset Eigenschaft auf einen Wert aus derVideoBitratePreset enum. Verwenden Sie nicht die Custom Wert.
Beispiel:
publisher.VideoBitratePreset = VideoBitratePreset.BwSaver;
Console.WriteLine("Bitrate preset successfully set to BW_SAVER.");
Wenn die vordefinierten Voreinstellungen nicht geeignet sind, können Sie manuell einen benutzerdefinierten Rohbitratenwert festlegen.
Um die aktuelle maximale Videobitrate (in Bits pro Sekunde) abzurufen, rufen Sie den Befehl Publisher.MaxVideoBitrate Eigenschaft. Wenn kein benutzerdefinierter Wert festgelegt ist, wird er auf 0 gesetzt.
Beispiel:
int maxBitrate = publisher.MaxVideoBitrate;
Console.WriteLine($"Current max video bitrate: {maxBitrate} bps");
Um eine benutzerdefinierte maximale Bitrate (anstelle einer Voreinstellung) festzulegen, weisen Sie dem Feld Bitrate einen Wert (zwischen 5.000 und 10.000.000) zu. MaxVideoBitrate Eigentum.
Beispiel:
int newBitrate = 300000; // 300 kbps
publisher.MaxVideoBitrate = newBitrate;
Console.WriteLine($"Successfully set max video bitrate to {newBitrate} bps.");
Siehe Einstellung von Rohbitratenwerten für weitere Einzelheiten.
Wenn Sie den Wert für die Rohbitrate auf 0 setzen, werden alle zuvor festgelegten Bitratenbeschränkungen aufgehoben und das Standardverhalten wird wiederhergestellt.
int zeroBitrate = 0; // no limitations
int newBitrate = 300000;
publisher.MaxVideoBitrate = newBitrate;
System.Diagnostics.Debug.Assert(publisher.MaxVideoBitrate == newBitrate);
publisher.MaxVideoBitrate = zeroBitrate;
System.Diagnostics.Debug.Assert(publisher.MaxVideoBitrate == zeroBitrate);
Die Einstellung einer benutzerdefinierten Bitrate bewirkt, dass die VideoBitratePreset Eigenschaft zu setzen auf VideoBitratePreset.Custom:
publisher.MaxVideoBitrate = 1000000; // 1 Mbps
System.Diagnostics.Debug.Assert(publisher.VideoBitratePreset == VideoBitratePreset.Custom);
publisher.MaxVideoBitrate = 0;
System.Diagnostics.Debug.Assert(publisher.VideoBitratePreset == VideoBitratePreset.Default);
Die MaxVideoBitrate gibt 0 zurück, wenn der Verleger eine Voreinstellung verwendet:
publisher.VideoBitratePreset = VideoBitratePreset.BwSaver;
System.Diagnostics.Debug.Assert(publisher.MaxVideoBitrate == 0);
publisher.VideoBitratePreset = VideoBitratePreset.ExtraBwSaver;
System.Diagnostics.Debug.Assert(publisher.MaxVideoBitrate == 0);
publisher.MaxVideoBitrate = 200000;
System.Diagnostics.Debug.Assert(publisher.MaxVideoBitrate == 200000);
publisher.VideoBitratePreset = VideoBitratePreset.Default;
System.Diagnostics.Debug.Assert(publisher.MaxVideoBitrate == 0);
Die otc_video_bitrate_preset enum, in der publisher.h Kopfzeile, enthält voreingestellte Werte:
OTC_VIDEO_BITRATE_PRESET_DEFAULTOTC_VIDEO_BITRATE_PRESET_BW_SAVEROTC_VIDEO_BITRATE_PRESET_EXTRA_BW_SAVEROTC_VIDEO_BITRATE_PRESET_CUSTOM
Siehe Video-Bitrate-Voreinstellungen für Details zu diesen Voreinstellungen.
Um die aktuell konfigurierte Video-Bitratenvoreinstellung für einen bestimmten Publisher abzurufen, rufen Sie die Funktion otc_publisher_get_video_bitrate_preset() Funktion:
enum otc_video_bitrate_preset preset = otc_publisher_get_video_bitrate_preset(publisher);
if (preset == OTC_VIDEO_BITRATE_PRESET_BW_SAVER) {
printf("The publisher is using the BW_SAVER preset.\n");
}
Um eine Voreinstellung zu setzen, rufen Sie die Funktion otc_publisher_set_video_bitrate_preset() Funktion. Diese Funktion enthält zwei Parameter:
publisher- Ein Zeiger auf die otc_publisher-Instanz.preset- Ein Wert vonotc_video_bitrate_preset. Nicht verwendenOTC_VIDEO_BITRATE_PRESET_CUSTOM.
Die Funktion gibt einen dieser Werte zurück:
OTC_SUCCESS- Die Voreinstellung wurde erfolgreich angewendet.OTC_ERROR_INVALID_PARAMETER- Der angegebene Verlag ist NULL oder die Voreinstellung ist ungültig.
Beispiel:
otc_status status = otc_publisher_set_video_bitrate_preset(publisher, OTC_VIDEO_BITRATE_PRESET_BW_SAVER);
if (status == OTC_SUCCESS) {
printf("Bitrate preset successfully set to BW_SAVER.\n");
} else {
printf("Failed to set bitrate preset.\n");
}
Wenn die vordefinierten Voreinstellungen nicht geeignet sind, können Sie manuell einen benutzerdefinierten Rohbitratenwert festlegen.
Um die maximale Videobitrate zu erhalten, die derzeit für einen Publisher eingestellt ist, rufen Sie die otc_publisher_get_max_video_bitrate() Funktion. Sie gibt die aktuell eingestellte maximale Bitrate (in Bits pro Sekunde) zurück. Wenn kein benutzerdefinierter Wert eingestellt ist, gibt die Funktion 0 zurück.
Beispiel:
int max_bitrate = otc_publisher_get_max_video_bitrate(publisher);
printf("Current max video bitrate: %d bps\n", max_bitrate);
Um einen benutzerdefinierten Wert für die maximale Bitrate (anstelle einer Voreinstellung) festzulegen, verwenden Sie die otc_publisher_set_max_video_bitrate() Funktion. Diese Funktion hat die folgenden Parameter:
publisher- Ein Zeiger auf eine vorhandene otc_publisher-Instanz.bitrate_bps- Die gewünschte maximale Bitrate (in Bits pro Sekunde). Sie muss zwischen 5.000 und 10.000.000 liegen. Die Funktion gibt einen der folgenden Werte zurück:OTC_SUCCESS- Die Bitrate wurde erfolgreich angewendet.OTC_ERROR_INVALID_PARAMETER- Der Zeiger des Herausgebers lautetNULL, oderbitrate_bpsaußerhalb des Bereichs liegt. Beispiel:
int new_bitrate = 300000; // 300 kbps
otc_status status = otc_publisher_set_max_video_bitrate(publisher, new_bitrate);
if (status == OTC_SUCCESS) {
printf("Successfully set max video bitrate to %d bps.\n", new_bitrate);
} else {
printf("Failed to set max video bitrate.\n");
}
Siehe Einstellung von Rohbitratenwerten für weitere Einzelheiten.
Wenn Sie den Wert für die Rohbitrate auf 0 setzen, werden alle zuvor festgelegten Bitratenbeschränkungen aufgehoben und das Standardverhalten wird wiederhergestellt.
const int zero_bitrate = 0; // no limitations
const int new_bitrate = 300000; // 300 kbps
otc_status status = otc_publisher_set_max_video_bitrate(publisher, new_bitrate);
if (status == OTC_SUCCESS) {
assert(otc_publisher_get_max_video_bitrate(publisher) == new_bitrate);
}
status = otc_publisher_set_max_video_bitrate(publisher, zero_bitrate);
if (status == OTC_SUCCESS) {
assert(otc_publisher_get_max_video_bitrate(publisher) == zero_bitrate);
}
Der Aufruf der (otc_publisher_get_video_bitrate_preset()) nach der Einstellung einer benutzerdefinierten Bitrate zurück OTC_VIDEO_BITRATE_PRESET_CUSTOM.
const int new_bitrate = 1000000; // 1 mbps
otc_status status = otc_publisher_set_max_video_bitrate(publisher, new_bitrate);
if (status == OTC_SUCCESS) {
assert(otc_publisher_get_video_bitrate_preset(publisher) == OTC_VIDEO_BITRATE_PRESET_CUSTOM);
}
status = otc_publisher_set_max_video_bitrate(publisher, zero_bitrate);
if (status == OTC_SUCCESS) {
assert(otc_publisher_get_video_bitrate_preset(publisher) == OTC_VIDEO_BITRATE_PRESET_DEFAULT);
}
Der Getter für die Rohbitrate gibt 0 zurück, wenn der Herausgeber eine Voreinstellung verwendet.
// Assume all the statuses are OTC_SUCCESS
int bitrate_bps = otc_publisher_get_max_video_bitrate(publisher);
assert(bitrate_bps == 0);
otc_publisher_set_video_bitrate_preset(publisher, OTC_VIDEO_BITRATE_PRESET_BW_SAVER);
bitrate_bps = otc_publisher_get_max_video_bitrate(publisher);
assert(bitrate_bps == 0);
otc_publisher_set_video_bitrate_preset(publisher, OTC_VIDEO_BITRATE_PRESET_EXTRA_BW_SAVER);
bitrate_bps = otc_publisher_get_max_video_bitrate(publisher);
assert(bitrate_bps == 0);
otc_publisher_set_max_video_bitrate(publisher, 200000);
bitrate_bps = otc_publisher_get_max_video_bitrate(publisher);
assert(bitrate_bps == 200000);
otc_publisher_set_video_bitrate_preset(publisher, OTC_VIDEO_BITRATE_PRESET_DEFAULT);
bitrate_bps = otc_publisher_get_max_video_bitrate(publisher);
assert(bitrate_bps == 0);
Bewährte Praktiken
Um die beste Leistung und optimale Bandbreitennutzung zu gewährleisten, sollten Sie die folgenden Best Practices befolgen:
Vordefinierte Bitratenvorgaben verwenden - Verwenden Sie, wenn möglich, die vordefinierten Bitratenvoreinstellungen (
DEFAULT,BW_SAVER,EXTRA_BW_SAVER) zur Verwaltung der Videoqualität. Diese Voreinstellungen sind auf gängige Szenarien wie Videokonferenzen zugeschnitten und gewährleisten, dass die Videoqualität mit der Bandbreiteneffizienz in Einklang gebracht wird. Noch wichtiger ist, dass sie Codec-Details und Medienmodi abstrahieren.Seien Sie vorsichtig mit benutzerdefinierten Bitrateneinstellungen - Während benutzerdefinierte Bitrateneinstellungen Ihnen mehr Kontrolle geben, ist ihre Verwendung an Codec-Details gebunden, die sich während der WebRTC-Aushandlungsphase ändern können. Wir empfehlen, sie sparsam zu verwenden und nur dann, wenn ein harter Schwellenwert für die Bitrate erforderlich ist.
Wenden Sie keine benutzerdefinierten Bitraten oder Voreinstellungen auf Screen-Sharing-Streams an. - Die Codierung von Screen-Sharing-Streams unterscheidet sich von der Codierung von Kamera-Streams. Die Verwendung der API für die maximale Bitrate zur Begrenzung eines Screen-Sharing-Streams kann die Qualität verschlechtern, ohne eine Verbesserung der Bandbreite zu bieten.