Configuración de la tasa de bits máxima para una transmisión

Puedes controlar de forma dinámica la velocidad de transmisión máxima que un editor puede utilizar para las transmisiones de vídeo de cámara.

Esta guía muestra cómo configurar los ajustes de la tasa de bits de vídeo, cómo interactuar con los distintos preajustes, cómo establecer tasas de bits sin procesar y las mejores prácticas para utilizar la API de forma eficaz.

Este tema incluye las siguientes secciones:

Visión general

Puede establecer dinámicamente la tasa de bits máxima que un editor puede utilizar al codificar medios. A continuación, el codificador de vídeo ajusta la tasa de bits de forma dinámica, utilizando un valor dentro del rango permitido, desde un umbral mínimo hasta la tasa de bits máxima establecida, en función de las condiciones de la red y otras restricciones.

Establecer el bitrate máximo puede ayudar a reducir el consumo de ancho de banda cuando un usuario se conecta desde una conexión con contador. Asegúrese de leer la Limitaciones abajo.

Limitaciones

Hay algunas limitaciones importantes que hay que tener en cuenta:

  • Condiciones de la red - La tasa de bits real alcanzada en la red puede ser inferior al valor establecido, debido a las estimaciones de la red en tiempo real, las fluctuaciones del ancho de banda y las limitaciones del backend.

  • Valores fuera de rango - Si proporciona un valor de bitrate fuera del rango válido, el SDK puede ignorar la solicitud o devolver un error.

Uso de la API

Preajustes de velocidad de bits de vídeo

La API ofrece preajustes de velocidad de bits de vídeo que simplifican la reducción de la calidad de vídeo sin necesidad de preocuparse por los ajustes del códec y de la sesión. Estos preajustes están diseñados para casos de uso comunes como videoconferencias y se adaptan a resoluciones de 480p, 540p, 720p y 1080p.

Los preajustes disponibles son:

  • DEFAULT — El ajuste predeterminado de la tasa de bits del SDK que ofrece una experiencia visual equilibrada para las transmisiones de vídeo.

  • BW_SAVER - Un ajuste de calidad media para videoconferencias que reduce la tasa de bits para ahorrar ancho de banda.

  • EXTRA_BW_SAVER - La tasa de bits más baja para la comunicación de vídeo esencial, que ofrece una baja calidad de vídeo pero un uso mínimo del ancho de banda.

Ten en cuenta que los valores exactos de la tasa de bits utilizados cuando se trata de preajustes son específicos de la implementación y dependen del códec negociado y del modo del medio (retransmitido o enrutado). Los SDK de cliente de la Video API incluyen métodos para establecer y obtener la tasa de bits preestablecida.

Ajuste de los valores de la tasa de bits bruta

Si las tasas de bits predefinidas no satisfacen tus necesidades, puedes establecer un valor de tasa de bits en bruto personalizado. Esto te permite definir límites específicos de bitrate dentro de un rango, desde 5.000 bps hasta 10.000.000 bps. Ten en cuenta que el valor sólo se aplica a la tasa de bits del codificador, por lo que la sobrecarga de la red sigue aplicándose además del valor elegido.

Los SDK de cliente de la Video API de Vonage incluyen métodos para establecer el valor de la tasa de bits sin procesar y para recuperarlo. Hasta que se establece una tasa de bits bruta, o hasta que sólo se establecen preajustes, el getter devuelve 0 (excepto para el SDK de JS, en el que el valor devuelto es indefinido). Una vez establecida una tasa de bits bruta, el getter de preajustes de tasa de bits devuelve 'custom', lo que indica que se ha aplicado un valor personalizado. Sin embargo, no utilices el valor preestablecido "custom" en el establecedor; simplemente establece el número de tasa de bits específico que se utilizará como valor máximo.

Interacción de la tasa de bits y la capa de codificación con VP8 y escalabilidad habilitada

Al modificar la tasa de bits máxima cuando se utiliza VP8 escalable, se consigue una mayor eficiencia: el Client SDK activa o desactiva dinámicamente las capas de codificación en función de la tasa de bits disponible para garantizar que la transmisión de vídeo sea lo más eficiente posible. Este proceso adapta la resolución a la que el editor está publicando el contenido.

Las siguientes notas se aplican a la preajustado cuando se utiliza VP8:

  • DEFAULT — Este preajuste utiliza todas las capas de codificación disponibles. En el caso de una transmisión típica, esto incluye hasta tres capas (baja, media y alta).

  • BW_SAVER — Este ajuste predefinido solo utiliza las dos primeras capas de codificación (calidad baja y media). Está diseñado para ahorrar ancho de banda, por lo que resulta adecuado para situaciones como las videoconferencias, en las que una alta calidad de vídeo puede no ser tan importante.

  • EXTRA_BW_SAVER - Este preajuste reduce aún más la tasa de bits, utilizando sólo la capa de codificación base (la más baja). Este es el modo más eficiente en cuanto a ancho de banda, ya que proporciona la calidad mínima para una comunicación de vídeo significativa.

Cuando se establece un valor de tasa de bits sin procesar, si la tasa de bits proporcionada es insuficiente para mantener determinadas capas de codificación, el SDK desactiva automáticamente las capas superiores. Por ejemplo, si la tasa de bits es demasiado baja para las capas de calidad media o alta, esas capas se descartan y sólo se transmite la capa base.

Si la nueva tasa de bits proporcionada es lo suficientemente alta como para mantener más capas de codificación, el SDK reactiva las capas de codificación superiores, restaurando progresivamente la calidad del vídeo al volver a añadir las capas media y alta.

Este mecanismo garantiza que el flujo de vídeo siga siendo lo más eficiente posible, maximizando el uso del ancho de banda disponible sin comprometer la experiencia del usuario.

Ejemplos

Al inicio de una sesión, un editor utiliza el DEFAULT preajuste, que ofrece la máxima calidad de vídeo. En esta fase concreta de la sesión, supongamos que se ha negociado el códec VP8 no escalable. Sin embargo, tras un cambio de red a una conexión con límite de datos (por ejemplo, móvil), puedes reducir el ancho de banda de publicación utilizando el BW_SAVER preestablecido. Cuando se utiliza un preajuste para la tasa de bits máxima del editor, el Client SDK se asegura de que el nivel de calidad siga siendo el mismo independientemente de cualquier evento. Cuando la red vuelve a cambiar a una conexión ilimitada, puede restablecer el valor predeterminado configurando el parámetro DEFAULT preestablecido.

También puedes fijar el valor de la tasa de bits bruta para establecer un umbral superior de ancho de banda.

Para obtener más información sobre cada Client SDK, consulta lo siguiente:

Los detalles sobre el uso de la tasa de bits máxima del editor en el Client SDK de Vonage Video para macOS son los mismos que en el Client SDK para Linux.

El properties prop del componente OTPublisher incluye un videoBitratePreset propiedad. Establézcala a uno de los siguientes valores de cadena para que el editor utilice una configuración de tasa de bits de vídeo preestablecida: default, bw_saver, o extra_bw_saver. Véase Preajustes de velocidad de bits de vídeo para más detalles sobre estos preajustes.

Ejemplo:

<OTPublisher
  properties={{
    videoBitratePreset: 'bw_saver',
    // ... other properties
  }}
/>

El videoBitratePreset se ignora si la propiedad maxVideoBitrate (descrita en la sección siguiente). Si no se define ninguna de las dos, el editor utilizará la configuración predeterminada.

Si los preajustes predefinidos no son adecuados, puedes establecer manualmente un valor de tasa de bits brutos personalizado.

El properties prop del componente OTPublisher incluye un maxVideoBitrate propiedad. Para establecer el valor máximo de la tasa de bits (en lugar de un valor predefinido), establece esta propiedad en un valor comprendido entre 5.000 y 10.000.000 (en bits por segundo).

Ejemplo:

<OTPublisher
  properties={{
    maxVideoBitrate: 500000,
    // ... other properties
  }}
/>

El maxVideoBitrate La propiedad tiene prioridad sobre la videoBitratePreset propiedad (descrita en la sección anterior). Si ambas están activadas, solo la maxVideoBitrate . Si no se establece ninguna de las dos, el editor utiliza el preajuste predeterminado.

Tenga en cuenta que la API es compatible con las versiones recientes de todos los navegadores compatibles. Si encuentra errores, asegúrese de que el cliente utiliza una versión actualizada del navegador.

El objeto Publisher incluye setVideoBitratePreset() y getVideoBitratePreset() métodos. El sitio setVideoBitratePreset() acepta valores de cadena - 'DEFAULT', 'BW_SAVER', o 'EXTRA_BW_SAVER' (o sus minúsculas) - y el método getVideoBitratePreset() devuelve estos valores valores (o 'CUSTOM'). Véase Preajustes de velocidad de bits de vídeo para obtener más información sobre estos ajustes predefinidos.

Tenga en cuenta que getVideoBitratePreset() el método devuelve undefined si no se ha establecido previamente ningún preajuste o tasa de bits.

El setVideoBitratePreset() El método tiene un parámetro: preset, la presintonía deseada.

Ejemplo:

console.log(publisher.getVideoBitratePreset());  // undefined

await publisher.setVideoBitratePreset('BW_SAVER');  // or 'DEFAULT' or 'EXTRA_BW_SAVER'

console.log(publisher.getVideoBitratePreset());  // 'BW_SAVER'

El setVideoBitratePreset() puede lanzar un error con el método name del objeto de error con el siguiente valor:

  • OT_INVALID_PARAMETER - Preajuste no válido. Debe ser 'DEFAULT', 'BW_SAVER', o 'EXTRA_BW_SAVER'.

  • OT_UNEXPECTED_ERROR_CODE - Se ha producido un error inesperado y el preajuste no se ha actualizado.

Envuelve la llamada a la setVideoBitratePreset() en un bloque try/catch, aunque el nombre de la preselección sea correcto:

const invalidPreset = 'VERY_FAST';
try {
    await publisher.setVideoBitratePreset(invalidPreset);
} catch (err) {
    console.error(err.name);
    // 'OT_INVALID_PARAMETER'
}

Si los preajustes predefinidos no son adecuados, puedes establecer manualmente un valor de tasa de bits brutos personalizado.

Para obtener la tasa de bits de vídeo máxima establecida actualmente para un editor, llame a la función getMaxVideoBitrate() de un objeto Publisher. Devuelve la tasa de bits máxima establecida actualmente (en bits por segundo). Si no se establece ningún valor personalizado, la función devuelve undefined.

Ejemplo:

console.log(publisher.getMaxVideoBitrate());

Para establecer un valor de velocidad de bits máxima personalizada (en lugar de una preajustada), utiliza la setMaxVideoBitrate() método de un objeto Publisher. Esta función tiene un único parámetro: bitrateBpsel bitrate máximo deseado (en bits por segundo), entre 5.000 y 10.000.000.

Ejemplo:

const new_bitrate = 300000; // 300 kbps
await publisher.setMaxVideoBitrate(new_bitrate);

El setMaxVideoBitrate() puede lanzar un error con el método name del objeto de error con el siguiente valor:

  • OT_INVALID_PARAMETER - Tasa de bits no válida. El valor debe ser 0 o un número entre 5000 y 10000000.
  • OT_UNEXPECTED_ERROR_CODE - Se ha producido un error inesperado y no se ha actualizado la tasa de bits.

Envuelve la llamada a la setVideoBitratePreset() en un bloque try/catch, aunque el número introducido sea válido.

Véase Ajuste de los valores de la tasa de bits bruta Para más información.


Si se establece el valor máximo de la tasa de bits en 0, se elimina cualquier limitación de tasa de bits establecida anteriormente y se vuelve al comportamiento predeterminado.

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.

Llamada al getVideoBitratePreset() tras establecer una tasa de bits personalizada distinta de 0 devuelve 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'

El indicador de tasa de bits bruta devuelve 0 cuando el editor utiliza un preajuste.

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

El PublisherKit .VideoBitratePreset La enumeración incluye valores predefinidos:

  • VideoBitratePresetDefault
  • VideoBitratePresetBwSaver
  • VideoBitratePresetExtraBwSaver
  • VideoBitratePresetCustom

Véase Preajustes de velocidad de bits de vídeo para más detalles sobre estos preajustes.

Para recuperar la tasa de bits de vídeo actualmente configurada para un editor determinado, llame a la función PublisherKit.getVideoBitratePreset() método:

PublisherKit.VideoBitratePreset retrievedBitratePreset = publisherKit.getVideoBitratePreset();
System.out.println("The video bitrate preset is: " + retrievedBitratePreset);

Para configurar un preajuste, llama a la función PublisherKit.setVideoBitratePreset() método. Este método incluye un parámetro: preset — un valor de la VideoBitratePreset enum. No utilices VideoBitratePresetCustom.

Ejemplo:

PublisherKit.VideoBitratePreset bitratePreset = PublisherKit.VideoBitratePreset.VideoBitratePresetBwSaver;
publisherKit.setVideoBitratePreset(bitratePreset);

Si los preajustes predefinidos no son adecuados, puedes establecer manualmente un valor de tasa de bits brutos personalizado.

Para obtener la tasa de bits de vídeo máxima establecida actualmente para un editor, llame a la función PublisherKit.getMaxVideoBitrate() método. Devuelve la tasa de bits máxima establecida actualmente (en bits por segundo). Si no se establece ningún valor personalizado, el método devuelve 0.

Ejemplo:

int retrievedMaxVideoBitrate = publisherKit.getMaxVideoBitrate();
System.out.println("The maximum video bitrate is: " + retrievedMaxVideoBitrate + " kbps");

Para establecer un valor de velocidad de bits máxima personalizada (en lugar de una preajustada), utiliza la PublisherKit.setMaxVideoBitrate() método. Este método tiene un parámetro: maxVideoBitrateel bitrate máximo deseado (en bits por segundo). La dirección maxVideoBitrate debe estar comprendido entre 5.000 y 10.000.000.

Ejemplo:

int maxVideoBitrate = 300000; // 300 kbps
publisherKit.setMaxVideoBitrate(maxVideoBitrate);

Véase Ajuste de los valores de la tasa de bits bruta Para más información.


Al establecer el valor de la tasa de bits bruta en 0 se elimina cualquier limitación de la tasa de bits establecida previamente, volviendo al comportamiento predeterminado.

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.");
}

Llamada al getVideoBitratePreset() después de establecer una tasa de bits personalizada devuelve 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.");
}

El PublisherKit.getMaxVideoBitrate() devuelve 0 cuando el editor está utilizando un preajuste.

// 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;

El OTVideoBitratePreset La enumeración incluye valores predefinidos:

  • OTVideoBitratePresetDefault
  • OTVideoBitratePresetBwSaver
  • OTVideoBitratePresetExtraBwSaver
  • OTVideoBitratePresetCustom

Véase Preajustes de velocidad de bits de vídeo para más detalles sobre estos preajustes.

Para recuperar el preajuste de velocidad de bits de vídeo configurado actualmente para un editor determinado, establezca la opción OTPublisherKit.videoBitratePreset propiedad:

OTVideoBitratePreset retrievedBitratePreset = publisher.videoBitratePreset;
NSLog(@"The video bitrate preset is: %ld", (long)retrievedBitratePreset);

Para establecer una preselección, asigne un valor a la tecla videoBitratePreset propiedad. Esta propiedad admite uno de los valores de la OTVideoBitratePreset excepto para OTVideoBitratePresetCustom.

Ejemplo:

publisher.videoBitratePreset = OTVideoBitratePresetBwSaver;

Si los preajustes predefinidos no son adecuados, puedes establecer manualmente un valor de tasa de bits brutos personalizado.

Para obtener la tasa de bits de vídeo máxima establecida actualmente para un editor, compruebe la opción OTPublisherKit.maxVideoBitrate propiedad. Establece el bitrate máximo (en bits por segundo). Si no se establece ningún valor personalizado, la propiedad se establece en 0.

Ejemplo:

int retrievedMaxVideoBitrate = publisher.maxVideoBitrate;
NSLog(@"The maximum video bitrate is: %d kbps", retrievedMaxVideoBitrate);

Para utilizar un valor de velocidad de bits máxima personalizada (en lugar de una preajustada), configura el OTPublisherKit.maxVideoBitrate propiedad. Esta propiedad admite valores comprendidos entre 5.000 y 10.000.000 (en bits por segundo).

Ejemplo:

publisher.maxVideoBitrate = 300000; // 300 kbps

Véase Ajuste de los valores de la tasa de bits bruta Para más información.


Al establecer el valor de la tasa de bits bruta en 0 se elimina cualquier limitación de la tasa de bits establecida previamente, volviendo al comportamiento predeterminado.

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);

Después de establecer una tasa de bits personalizada, el videoBitratePreset se establece en 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.");
}

El publisher.maxVideoBitrate se establece en 0 cuando el editor utiliza un preajuste.

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

El VideoBitratePreset La enumeración incluye valores predefinidos:

  • Default
  • BwSaver
  • ExtraBwSaver
  • Custom

Véase Preajustes de velocidad de bits de vídeo para más detalles sobre estos preajustes.

Para recuperar el ajuste preestablecido de velocidad de bits de vídeo configurado actualmente para un editor determinado, accede a la Publisher.VideoBitratePreset propiedad:

var preset = publisher.VideoBitratePreset;
if (preset == VideoBitratePreset.BwSaver)
{
    Console.WriteLine("The publisher is using the BW_SAVER preset.");
}

Para establecer una preselección, pulse el botón Publisher.VideoBitratePreset asignar a la propiedad un valor procedente de laVideoBitratePreset enum. No utilice la función Custom valor.

Ejemplo:

publisher.VideoBitratePreset = VideoBitratePreset.BwSaver;
Console.WriteLine("Bitrate preset successfully set to BW_SAVER.");

Si los preajustes predefinidos no son adecuados, puedes establecer manualmente un valor de tasa de bits brutos personalizado.

Para obtener la tasa de bits de vídeo máxima actual (en bits por segundo), acceda a la función Publisher.MaxVideoBitrate propiedad. Si no se establece ningún valor personalizado, se establece en 0.

Ejemplo:

int maxBitrate = publisher.MaxVideoBitrate;
Console.WriteLine($"Current max video bitrate: {maxBitrate} bps");

Para establecer una tasa de bits máxima personalizada (en lugar de una predefinida), asigna un valor (entre 5.000 y 10.000.000) al MaxVideoBitrate propiedad.

Ejemplo:

int newBitrate = 300000; // 300 kbps
publisher.MaxVideoBitrate = newBitrate;
Console.WriteLine($"Successfully set max video bitrate to {newBitrate} bps.");

Véase Ajuste de los valores de la tasa de bits bruta Para más información.


Al establecer el valor de la tasa de bits bruta en 0 se elimina cualquier limitación de la tasa de bits establecida previamente, volviendo al comportamiento predeterminado.

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);

La configuración de una tasa de bits personalizada hace que el VideoBitratePreset que debe establecerse en 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);

El MaxVideoBitrate La propiedad devuelve 0 cuando el editor utiliza un ajuste preestablecido:

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);

El otc_video_bitrate_preset enum, en el publisher.h incluye valores preestablecidos:

  • OTC_VIDEO_BITRATE_PRESET_DEFAULT
  • OTC_VIDEO_BITRATE_PRESET_BW_SAVER
  • OTC_VIDEO_BITRATE_PRESET_EXTRA_BW_SAVER
  • OTC_VIDEO_BITRATE_PRESET_CUSTOM

Véase Preajustes de velocidad de bits de vídeo para más detalles sobre estos preajustes.

Para recuperar la tasa de bits de vídeo actualmente configurada para un editor determinado, llame a la función otc_publisher_get_video_bitrate_preset() función:

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");
}

Para configurar un preajuste, llama a la función otc_publisher_set_video_bitrate_preset() función. Esta función tiene dos parámetros:

  • publisher — Un puntero a la instancia de otc_publisher.
  • preset - Un valor de otc_video_bitrate_preset. No utilizar OTC_VIDEO_BITRATE_PRESET_CUSTOM.

La función devuelve uno de estos valores:

  • OTC_SUCCESS - El preajuste se ha aplicado correctamente.
  • OTC_ERROR_INVALID_PARAMETER — El editor proporcionado es NULL o la configuración predeterminada no es válida.

Ejemplo:

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");
}

Si los preajustes predefinidos no son adecuados, puedes establecer manualmente un valor de tasa de bits brutos personalizado.

Para obtener la tasa de bits de vídeo máxima establecida actualmente para un editor, llame a la función otc_publisher_get_max_video_bitrate() función. Devuelve la tasa de bits máxima establecida actualmente (en bits por segundo). Si no se establece ningún valor personalizado, la función devuelve 0.

Ejemplo:

int max_bitrate = otc_publisher_get_max_video_bitrate(publisher);
printf("Current max video bitrate: %d bps\n", max_bitrate);

Para establecer un valor de velocidad de bits máxima personalizada (en lugar de una preajustada), utiliza la otc_publisher_set_max_video_bitrate() función. Esta función tiene los siguientes parámetros:

  • publisher - Un puntero a una instancia existente de otc_publisher.
  • bitrate_bps — La tasa de bits máxima deseada (en bits por segundo). Debe estar comprendida entre 5.000 y 10.000.000. La función devuelve uno de los siguientes valores:
  • OTC_SUCCESS — La tasa de bits se ha aplicado correctamente.
  • OTC_ERROR_INVALID_PARAMETER — El puntero del editor es NULL, o bitrate_bps está fuera de rango. Ejemplo:
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");
}

Véase Ajuste de los valores de la tasa de bits bruta Para más información.


Al establecer el valor de la tasa de bits bruta en 0 se elimina cualquier limitación de la tasa de bits establecida previamente, volviendo al comportamiento predeterminado.

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);
}

Al llamar al (otc_publisher_get_video_bitrate_preset()) La función, tras establecer una tasa de bits personalizada, devuelve 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);
}

El indicador de tasa de bits bruta devuelve 0 cuando el editor utiliza un preajuste.

// 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);

Buenas prácticas

Para garantizar el mejor rendimiento y un uso óptimo del ancho de banda, sigue estas recomendaciones:

  • Uso de tasas de bits predefinidas — Siempre que sea posible, utiliza los ajustes predefinidos de velocidad de bits (DEFAULT, BW_SAVER, EXTRA_BW_SAVER) para gestionar la calidad del vídeo. Estos ajustes predefinidos están pensados para situaciones habituales, como las videoconferencias, y garantizan un equilibrio entre la calidad del vídeo y la eficiencia del ancho de banda. Y lo que es más importante, ocultan los detalles de los códecs y los modos multimedia.

  • Cuidado con los ajustes personalizados de bitrate - Aunque los ajustes personalizados de la tasa de bits te dan más control, su uso está ligado a detalles del códec que pueden cambiar durante la fase de negociación de WebRTC. Recomendamos utilizarlos con moderación y solo cuando sea necesario un umbral estricto de la tasa de bits.

  • No apliques tasas de bits personalizadas ni preajustes a los flujos de pantalla compartida - La codificación de flujos de pantalla compartida difiere de la codificación de flujos de cámara. El uso de la API de tasa de bits máxima para limitar un flujo de pantalla compartida puede degradar la calidad sin ofrecer ninguna mejora de ancho de banda.