Como definir a taxa de bits máxima para uma transmissão
É possível controlar dinamicamente a taxa de bits máxima que um editor pode usar para transmissões de vídeo da câmera.
Este guia mostra como configurar as opções de taxa de bits de vídeo, como utilizar diferentes predefinições, como definir taxas de bits brutas e as melhores práticas para usar a API de maneira eficaz.
Este tópico inclui as seguintes seções:
Visão geral
É possível definir dinamicamente a taxa de bits máxima que um editor pode usar ao codificar mídia. O codificador de vídeo, então, ajusta a taxa de bits dinamicamente, utilizando um valor dentro do intervalo permitido — que vai de um limite mínimo até a taxa de bits máxima definida —, com base nas condições da rede e em outras restrições.
Definir a taxa de bits máxima pode ajudar a reduzir o consumo de largura de banda quando um usuário está se conectando por meio de uma conexão com limite de tráfego. Certifique-se de ler o Limitações abaixo.
Limitações
Há algumas limitações importantes que devem ser levadas em conta:
-
Condições da rede — A taxa de bits efetivamente alcançada na rede pode ser inferior ao valor definido, devido a estimativas de rede em tempo real, flutuações na largura de banda e limitações do back-end.
-
Valores fora dos limites — Se você fornecer um valor de taxa de bits fora do intervalo válido, o SDK poderá ignorar a solicitação ou retornar um erro.
Uso da API
Predefinições de taxa de bits de vídeo
A Video API oferece predefinições de taxa de bits de vídeo que simplificam a redução da qualidade do vídeo sem a necessidade de se preocupar com as configurações de codec e de sessão. Essas predefinições foram projetadas para casos de uso comuns, como videoconferências, e são adaptadas às resoluções 480p, 540p, 720p e 1080p.
As predefinições disponíveis são:
-
DEFAULT— A configuração padrão de taxa de bits do SDK que oferece uma experiência visual equilibrada para transmissões de vídeo. -
BW_SAVER— Uma configuração de qualidade média para videoconferências que reduz a taxa de bits para economizar largura de banda. -
EXTRA_BW_SAVER— A taxa de bits mais baixa para comunicação por vídeo essencial, oferecendo baixa qualidade de vídeo, mas uso mínimo de largura de banda.
Observe que os valores exatos da taxa de bits utilizados ao lidar com predefinições dependem da implementação específica e variam de acordo com o codec negociado e o modo de mídia (retransmitido ou roteado). Os SDKs do cliente da Video API incluem métodos para definir e obter a predefinição da taxa de bits.
Definição de valores de taxa de bits bruta
Caso as predefinições de taxa de bits não atendam às suas necessidades, você pode definir um valor personalizado de taxa de bits bruta. Isso permite que você defina limites específicos de taxa de bits dentro de um intervalo que vai de 5.000 bps a 10.000.000 bps. Observe que o valor se aplica apenas à taxa de bits do codificador; portanto, a sobrecarga da rede ainda será adicionada ao valor escolhido.
Os Client SDKs da Video API da Vonage incluem métodos para definir o valor da taxa de bits bruta e para recuperá-la. Até que uma taxa de bits bruta seja definida, ou até que apenas predefinições estejam configuradas, o getter retorna 0 (exceto no SDK de JS, no qual o valor retornado é indefinido). Assim que uma taxa de bits bruta for definida, o getter da predefinição de taxa de bits retorna “custom”, indicando que um valor personalizado foi aplicado. No entanto, não use a predefinição “custom” no setter — basta definir o valor específico da taxa de bits a ser usado como valor máximo.
Interação entre taxa de bits e camada de codificação com VP8 e escalabilidade ativada
Alterar a taxa de bits máxima quando se utiliza o VP8 escalável gera ganhos adicionais de eficiência — o Client SDK ativa ou desativa dinamicamente as camadas de codificação com base na taxa de bits disponível, a fim de garantir que o fluxo de vídeo seja o mais eficiente possível. Esse processo adapta a resolução na qual o editor está publicando.
As notas a seguir se aplicam ao predefinição ao usar o VP8:
-
DEFAULT— Esta predefinição utiliza todas as camadas de codificação disponíveis. Para uma transmissão típica, isso inclui até três camadas (baixa, média e alta). -
BW_SAVER— Esta predefinição utiliza apenas as duas primeiras camadas de codificação (baixa e média qualidade). Ela foi projetada para economizar largura de banda, tornando-a adequada para situações como videoconferências, nas quais a alta qualidade de vídeo pode não ser tão essencial. -
EXTRA_BW_SAVER— Essa predefinição reduz ainda mais a taxa de bits, utilizando apenas a camada de codificação básica (a mais baixa). Esse é o modo mais eficiente em termos de largura de banda, oferecendo a qualidade mínima necessária para uma comunicação por vídeo significativa.
Ao definir um valor bruto de taxa de bits, se a taxa de bits fornecida for insuficiente para manter determinadas camadas de codificação, o SDK desativa automaticamente as camadas superiores. Por exemplo, se a taxa de bits for muito baixa para as camadas de qualidade média ou alta, essas camadas são descartadas, e apenas a camada básica é transmitida.
Se a nova taxa de bits fornecida for alta o suficiente para manter mais camadas de codificação, o SDK reativa as camadas de codificação superiores, restaurando progressivamente a qualidade do vídeo ao reincorporar as camadas média e alta.
Esse mecanismo garante que o fluxo de vídeo permaneça o mais eficiente possível, maximizando o uso da largura de banda disponível sem comprometer a experiência do usuário.
Exemplos
No início de uma sessão, um editor utiliza o DEFAULT predefinição, que oferece qualidade de vídeo total. Nesta fase específica da sessão, vamos supor que tenha sido negociado o codec VP8 não escalável. No entanto, após uma mudança na rede para uma conexão com limite de tráfego (por exemplo, celular), você pode reduzir a largura de banda de publicação usando o BW_SAVER predefinição. Ao usar uma predefinição para a taxa de bits máxima do editor, o Client SDK garante que o nível de qualidade permaneça o mesmo, independentemente de qualquer evento. Quando a rede voltar a uma conexão ilimitada, você poderá restaurar a configuração padrão definindo o DEFAULT predefinição.
Você também pode definir o valor da taxa de bits bruta para estabelecer um limite máximo de largura de banda.
Para obter detalhes sobre cada Client SDK, consulte o seguinte:
Os detalhes sobre como usar a taxa de bits máxima do Publisher no Client SDK do cliente Vonage Video para macOS são os mesmos do Client SDK para Linux.
O properties A propriedade do componente OTPublisher inclui um videoBitratePreset propriedade. Defina-a como um dos seguintes valores de string para que o editor utilize uma configuração pré-definida de taxa de bits de vídeo: default, bw_saver, ou extra_bw_saver. Veja Predefinições de taxa de bits de vídeo para obter mais detalhes sobre essas predefinições.
Exemplo:
<OTPublisher
properties={{
videoBitratePreset: 'bw_saver',
// ... other properties
}}
/>
O videoBitratePreset A propriedade é ignorada se o maxVideoBitrate a propriedade (descrita na próxima seção) esteja definida. Se nenhuma das duas estiver definida, o editor utiliza a predefinição padrão.
Se as predefinições não forem adequadas, você pode definir manualmente um valor personalizado de taxa de bits bruta.
O properties A propriedade do componente OTPublisher inclui um maxVideoBitrate propriedade. Para definir o valor máximo da taxa de bits (em vez de uma predefinição), defina essa propriedade com um valor entre 5.000 e 10.000.000 (em bits por segundo).
Exemplo:
<OTPublisher
properties={{
maxVideoBitrate: 500000,
// ... other properties
}}
/>
O maxVideoBitrate essa propriedade tem precedência sobre a videoBitratePreset propriedade (descrita na seção anterior). Se ambas estiverem definidas, apenas a maxVideoBitrate propriedade é utilizada. Se nenhuma das duas estiver definida, o editor utiliza a predefinição padrão.
Observe que a API é compatível com as versões mais recentes de todos os navegadores suportados. Caso ocorra algum erro, certifique-se de que o cliente esteja usando uma versão atualizada do navegador.
O objeto Publisher inclui setVideoBitratePreset() e
getVideoBitratePreset() métodos. O setVideoBitratePreset() O método aceita
valores do tipo string — 'DEFAULT', 'BW_SAVER' ou 'EXTRA_BW_SAVER' (ou suas
versões em letras minúsculas) — e o getVideoBitratePreset() O método retorna esses
valores (ou 'CUSTOM'). Consulte Predefinições de taxa de bits de vídeo para
obter mais detalhes sobre essas predefinições.
Observe que o getVideoBitratePreset()
o método retorna undefined se nenhuma predefinição ou taxa de bits tiver sido definida anteriormente.
O setVideoBitratePreset() O método tem um parâmetro: preset, a predefinição desejada.
Exemplo:
console.log(publisher.getVideoBitratePreset()); // undefined
await publisher.setVideoBitratePreset('BW_SAVER'); // or 'DEFAULT' or 'EXTRA_BW_SAVER'
console.log(publisher.getVideoBitratePreset()); // 'BW_SAVER'
O setVideoBitratePreset() O método pode gerar um erro com o name propriedade do objeto de erro definida da seguinte forma:
-
OT_INVALID_PARAMETER- Predefinição inválida. Deve ser 'DEFAULT', 'BW_SAVER' ou 'EXTRA_BW_SAVER'. -
OT_UNEXPECTED_ERROR_CODE- Ocorreu um erro inesperado, e a predefinição não foi atualizada.
Envolva a chamada para o setVideoBitratePreset() método em um bloco try/catch, mesmo que o nome predefinido esteja correto:
const invalidPreset = 'VERY_FAST';
try {
await publisher.setVideoBitratePreset(invalidPreset);
} catch (err) {
console.error(err.name);
// 'OT_INVALID_PARAMETER'
}
Se as predefinições não forem adequadas, você pode definir manualmente um valor personalizado de taxa de bits bruta.
Para obter a taxa de bits máxima de vídeo definida atualmente para um editor, chame a função getMaxVideoBitrate() método de um objeto Publisher. Ele retorna a taxa de bits máxima definida no momento (em bits por segundo). Se nenhum valor personalizado estiver definido, a função retorna undefined.
Exemplo:
console.log(publisher.getMaxVideoBitrate());
Para definir um valor personalizado para a taxa de bits máxima (em vez de uma predefinição), use o setMaxVideoBitrate() método on de um objeto Publisher. Essa função possui um único parâmetro: bitrateBps, a taxa de bits máxima desejada (em bits por segundo), entre 5.000 e 10.000.000.
Exemplo:
const new_bitrate = 300000; // 300 kbps
await publisher.setMaxVideoBitrate(new_bitrate);
O setMaxVideoBitrate() O método pode gerar um erro com o name propriedade do objeto de erro definida da seguinte forma:
OT_INVALID_PARAMETER- Taxa de bits inválida. O valor deve ser 0 ou um número entre 5.000 e 10.000.000.OT_UNEXPECTED_ERROR_CODE- Ocorreu um erro inesperado e a taxa de bits não foi atualizada.
Envolva a chamada para o setVideoBitratePreset() método em um bloco try/catch, mesmo que o número passado seja válido.
Veja Definição de valores de taxa de bits bruta para mais detalhes.
Definir o valor máximo da taxa de bits como 0 remove qualquer limitação de taxa de bits definida anteriormente, retornando ao comportamento padrão.
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.
Chamando o getVideoBitratePreset() O método, após definir uma taxa de bits personalizada diferente de 0, retorna 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'
O getter da taxa de bits bruta retorna 0 quando o editor está usando uma predefinição.
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
O PublisherKit .VideoBitratePreset A enumeração inclui valores predefinidos:
VideoBitratePresetDefaultVideoBitratePresetBwSaverVideoBitratePresetExtraBwSaverVideoBitratePresetCustom
Veja Predefinições de taxa de bits de vídeo para obter mais detalhes sobre essas predefinições.
Para recuperar a predefinição de taxa de bits de vídeo atualmente configurada para um determinado editor, chame a função PublisherKit.getVideoBitratePreset() método:
PublisherKit.VideoBitratePreset retrievedBitratePreset = publisherKit.getVideoBitratePreset();
System.out.println("The video bitrate preset is: " + retrievedBitratePreset);
Para definir uma predefinição, chame o PublisherKit.setVideoBitratePreset() método. Esse método inclui um parâmetro: preset — um valor do VideoBitratePreset enum. Não use VideoBitratePresetCustom.
Exemplo:
PublisherKit.VideoBitratePreset bitratePreset = PublisherKit.VideoBitratePreset.VideoBitratePresetBwSaver;
publisherKit.setVideoBitratePreset(bitratePreset);
Se as predefinições não forem adequadas, você pode definir manualmente um valor personalizado de taxa de bits bruta.
Para obter a taxa de bits máxima de vídeo definida atualmente para um editor, chame a função PublisherKit.getMaxVideoBitrate() método. Ele retorna a taxa de bits máxima definida no momento (em bits por segundo). Se nenhum valor personalizado estiver definido, o método retorna 0.
Exemplo:
int retrievedMaxVideoBitrate = publisherKit.getMaxVideoBitrate();
System.out.println("The maximum video bitrate is: " + retrievedMaxVideoBitrate + " kbps");
Para definir um valor personalizado para a taxa de bits máxima (em vez de uma predefinição), use o PublisherKit.setMaxVideoBitrate() método. Esse método possui um parâmetro: maxVideoBitrate, a taxa de bits máxima desejada (em bits por segundo). A maxVideoBitrate O valor deve estar entre 5.000 e 10.000.000.
Exemplo:
int maxVideoBitrate = 300000; // 300 kbps
publisherKit.setMaxVideoBitrate(maxVideoBitrate);
Veja Definição de valores de taxa de bits bruta para mais detalhes.
Definir o valor da taxa de bits bruta como 0 remove qualquer limitação de taxa de bits definida anteriormente, retornando ao comportamento padrão.
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.");
}
Chamando o getVideoBitratePreset() O método, após definir uma taxa de bits personalizada, retorna 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.");
}
O PublisherKit.getMaxVideoBitrate() O método retorna 0 quando o editor está usando uma predefinição.
// 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;
O OTVideoBitratePreset A enumeração inclui valores predefinidos:
OTVideoBitratePresetDefaultOTVideoBitratePresetBwSaverOTVideoBitratePresetExtraBwSaverOTVideoBitratePresetCustom
Veja Predefinições de taxa de bits de vídeo para obter mais detalhes sobre essas predefinições.
Para recuperar a predefinição de taxa de bits de vídeo atualmente configurada para um determinado editor, defina o OTPublisherKit.videoBitratePreset propriedade:
OTVideoBitratePreset retrievedBitratePreset = publisher.videoBitratePreset;
NSLog(@"The video bitrate preset is: %ld", (long)retrievedBitratePreset);
Para definir uma predefinição, atribua um valor ao videoBitratePreset propriedade. Essa propriedade aceita um dos valores da OTVideoBitratePreset
enum, exceto OTVideoBitratePresetCustom.
Exemplo:
publisher.videoBitratePreset = OTVideoBitratePresetBwSaver;
Se as predefinições não forem adequadas, você pode definir manualmente um valor personalizado de taxa de bits bruta.
Para verificar a taxa de bits máxima de vídeo definida atualmente para um editor, consulte o OTPublisherKit.maxVideoBitrate propriedade. Ela é definida com a taxa de bits máxima (em bits por segundo). Se nenhum valor personalizado for definido, a propriedade será definida como 0.
Exemplo:
int retrievedMaxVideoBitrate = publisher.maxVideoBitrate;
NSLog(@"The maximum video bitrate is: %d kbps", retrievedMaxVideoBitrate);
Para usar um valor personalizado de taxa de bits máxima (em vez de uma predefinição), defina o OTPublisherKit.maxVideoBitrate propriedade. Essa propriedade aceita valores entre 5.000 e 10.000.000 (em bits por segundo).
Exemplo:
publisher.maxVideoBitrate = 300000; // 300 kbps
Veja Definição de valores de taxa de bits bruta para mais detalhes.
Definir o valor da taxa de bits bruta como 0 remove qualquer limitação de taxa de bits definida anteriormente, retornando ao comportamento padrão.
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);
Depois de definir uma taxa de bits personalizada, o videoBitratePreset a propriedade está definida como 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.");
}
O publisher.maxVideoBitrate A propriedade é definida como 0 quando o editor está usando uma predefinição.
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
O VideoBitratePreset A enumeração inclui valores predefinidos:
DefaultBwSaverExtraBwSaverCustom
Veja Predefinições de taxa de bits de vídeo para obter mais detalhes sobre essas predefinições.
Para recuperar a predefinição de taxa de bits de vídeo atualmente configurada para um determinado editor, acesse o Publisher.VideoBitratePreset propriedade:
var preset = publisher.VideoBitratePreset;
if (preset == VideoBitratePreset.BwSaver)
{
Console.WriteLine("The publisher is using the BW_SAVER preset.");
}
Para definir uma predefinição, configure o Publisher.VideoBitratePreset atribuir à propriedade um valor a partir doVideoBitratePreset enum. Não use o Custom valor.
Exemplo:
publisher.VideoBitratePreset = VideoBitratePreset.BwSaver;
Console.WriteLine("Bitrate preset successfully set to BW_SAVER.");
Se as predefinições não forem adequadas, você pode definir manualmente um valor personalizado de taxa de bits bruta.
Para obter a taxa de bits máxima atual do vídeo (em bits por segundo), acesse o Publisher.MaxVideoBitrate propriedade. Se nenhum valor personalizado for definido, ela será definida como 0.
Exemplo:
int maxBitrate = publisher.MaxVideoBitrate;
Console.WriteLine($"Current max video bitrate: {maxBitrate} bps");
Para definir uma taxa de bits máxima personalizada (em vez de uma predefinição), atribua um valor (entre 5.000 e 10.000.000) ao MaxVideoBitrate propriedade.
Exemplo:
int newBitrate = 300000; // 300 kbps
publisher.MaxVideoBitrate = newBitrate;
Console.WriteLine($"Successfully set max video bitrate to {newBitrate} bps.");
Veja Definição de valores de taxa de bits bruta para mais detalhes.
Definir o valor da taxa de bits bruta como 0 remove qualquer limitação de taxa de bits definida anteriormente, retornando ao comportamento padrão.
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);
Definir uma taxa de bits personalizada faz com que o VideoBitratePreset propriedade a ser definida como 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);
O MaxVideoBitrate A propriedade retorna 0 quando o editor está usando uma predefinição:
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);
O otc_video_bitrate_preset enum, no publisher.h O cabeçalho inclui valores predefinidos:
OTC_VIDEO_BITRATE_PRESET_DEFAULTOTC_VIDEO_BITRATE_PRESET_BW_SAVEROTC_VIDEO_BITRATE_PRESET_EXTRA_BW_SAVEROTC_VIDEO_BITRATE_PRESET_CUSTOM
Veja Predefinições de taxa de bits de vídeo para obter mais detalhes sobre essas predefinições.
Para recuperar a predefinição de taxa de bits de vídeo atualmente configurada para um determinado editor, chame a função otc_publisher_get_video_bitrate_preset() função:
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 definir uma predefinição, chame o otc_publisher_set_video_bitrate_preset() função. Essa função inclui dois parâmetros:
publisher— Um ponteiro para a instância otc_publisher.preset— Um valor deotc_video_bitrate_preset. Não useOTC_VIDEO_BITRATE_PRESET_CUSTOM.
A função retorna um destes valores:
OTC_SUCCESS— A predefinição foi aplicada com sucesso.OTC_ERROR_INVALID_PARAMETER— O editor fornecido é NULL ou a predefinição é inválida.
Exemplo:
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");
}
Se as predefinições não forem adequadas, você pode definir manualmente um valor personalizado de taxa de bits bruta.
Para obter a taxa de bits máxima de vídeo definida atualmente para um editor, chame a função otc_publisher_get_max_video_bitrate() função. Ela retorna a taxa de bits máxima definida no momento (em bits por segundo). Se nenhum valor personalizado estiver definido, a função retorna 0.
Exemplo:
int max_bitrate = otc_publisher_get_max_video_bitrate(publisher);
printf("Current max video bitrate: %d bps\n", max_bitrate);
Para definir um valor personalizado para a taxa de bits máxima (em vez de uma predefinição), use o otc_publisher_set_max_video_bitrate() função. Essa função possui os seguintes parâmetros:
publisher— Um ponteiro para uma instância existente de `otc_publisher`.bitrate_bps— A taxa de bits máxima desejada (em bits por segundo). Deve estar entre 5.000 e 10.000.000. A função retorna um dos seguintes valores:OTC_SUCCESS— A taxa de bits foi aplicada com sucesso.OTC_ERROR_INVALID_PARAMETER— O ponteiro do editor éNULL, oubitrate_bpsestá fora do intervalo. Exemplo:
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");
}
Veja Definição de valores de taxa de bits bruta para mais detalhes.
Definir o valor da taxa de bits bruta como 0 remove qualquer limitação de taxa de bits definida anteriormente, retornando ao comportamento padrão.
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);
}
Chamando o (otc_publisher_get_video_bitrate_preset()) A função, após definir uma taxa de bits personalizada, retorna 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);
}
O getter da taxa de bits bruta retorna 0 quando o editor está usando uma predefinição.
// 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);
Melhores práticas
Para garantir o melhor desempenho e o uso ideal da largura de banda, siga estas práticas recomendadas:
-
Use configurações predefinidas de taxa de bits — Sempre que possível, use as configurações predefinidas de taxa de bits (
DEFAULT,BW_SAVER,EXTRA_BW_SAVER) para gerenciar a qualidade do vídeo. Essas predefinições são adaptadas para cenários comuns, como videoconferências, garantindo que a qualidade do vídeo seja equilibrada com a eficiência da largura de banda. Mais importante ainda, elas abstraem os detalhes dos codecs e os modos de mídia. -
Tenha cuidado com as configurações personalizadas de taxa de bits — Embora as configurações personalizadas de taxa de bits ofereçam mais controle, seu uso está vinculado a detalhes do codec que podem mudar durante a fase de negociação do WebRTC. Recomendamos usá-las com moderação e somente quando for necessário definir um limite rígido para a taxa de bits.
-
Não aplique taxas de bits personalizadas nem predefinições às transmissões com compartilhamento de tela — A codificação do fluxo de compartilhamento de tela difere da codificação do fluxo da câmera. Usar a API de taxa de bits máxima para limitar um fluxo de compartilhamento de tela pode prejudicar a qualidade sem oferecer nenhuma melhoria na largura de banda.