Configurando fluxos de áudio
Os fluxos de áudio geralmente são os mais simples de configurar. Obtenha uma configuração de fluxo do codec usando os métodos de IWMCodecInfo , conforme descrito em Obtendo informações de configuração de fluxo de codecs. Na maioria das circunstâncias, você não deve alterar as configurações daquelas recuperadas.
O formato codec selecionado entre aqueles enumerados depende do uso pretendido dos arquivos ASF feitos com o perfil. A descrição do formato codec recuperada por IWMCodecInfo2::GetCodecFormatDesc resume as características do formato. Se o aplicativo não exibir as descrições a serem escolhidas entre elas, você poderá chamar QueryInterface na interface IWMStreamConfig do formato codec para obter a interface IWMMediaProps . Em seguida, você pode recuperar a estrutura WM_MEDIA_TYPE chamando IWMMediaProps::GetMediaType. Examinando a estrutura WM_MEDIA_TYPE e a estrutura WAVEFORMATEX para a qual ela aponta, você pode determinar as configurações do formato codec e compará-las com seus requisitos.
Obtendo formatos de áudio para sincronização A/V
O codec de Áudio do Windows Media e o codec do Windows Media Audio Professional dão suporte a formatos para arquivos somente áudio e para arquivos de áudio/vídeo. Os formatos somente áudio são otimizados para arquivos que contêm apenas dados de áudio, enquanto os formatos de áudio/vídeo são otimizados para áudio que está em um arquivo com um fluxo de vídeo. Ao enumerar formatos de codec para esses codecs, os formatos de áudio/vídeo vêm após os formatos somente áudio. Todas as descrições de formato de áudio/vídeo contêm a cadeia de caracteres "(A/V)". Você pode identificar os formatos projetados para sincronização de áudio/vídeo programaticamente verificando o número de pacotes por segundo. Os formatos para sincronização terão 5 ou mais pacotes por segundo se a taxa de bits for maior ou igual a 32.000 bits por segundo. Formatos com taxas de bits inferiores a 32.000 bits por segundo poderão ser usados com vídeo sincronizado se usarem 3 ou mais pacotes por segundo. O exemplo de código no tópico Para localizar formatos de áudio contém o código necessário para tornar este marcar:
if((pWave->nAvgBytesPerSec / pWave->nBlockAlign) >=
((pWave->nAvgBytesPerSec >= 4000) ? 5.0 : 3.0))
{
// Set this stream configuration as the new best match.
}
Obtendo formatos de áudio Low-Delay
O codec do Windows Media 9.1 e o codec Windows Media Audio 9.1 Professional dão suporte a formatos com pouco atraso. Esses formatos têm uma janela de buffer menor do que outros formatos de áudio. O áudio com pouco atraso destina-se a melhorar o desempenho em cenários em que arquivos ou fluxos serão alternados com frequência; por exemplo, um aplicativo que lista várias músicas para streaming na interface do usuário e permite que os usuários alternem arbitrariamente entre elas.
Os formatos de atraso baixo estão disponíveis apenas no modo CBR (um passe ou dois passes). Todas as descrições de formato de atraso baixo contêm a cadeia de caracteres "Low Delay". Você pode identificar os formatos programaticamente verificando o valor da taxa de bits do formato. Os formatos de atraso baixo são atribuídos a taxas de bits que são 1 quilobit a menos do que as taxas de bits do formato normal equivalente. Por exemplo, o codec do Windows Media Audio 9.1 dá suporte a um formato CBR de passagem única com uma taxa de bits de 192 kbps. O formato de atraso baixo equivalente tem uma taxa de bits de 191 kbps. Além disso, com exceção do formato mono de 5 kbps compatível com o codec do Windows Media Audio 9.1, os formatos de atraso baixo são os únicos formatos que têm um valor de taxa de bits ímpar.
Configurando áudio de taxa de bits variável
Quando você precisar de um formato VBR (taxa de bits variável) para um dos codecs de áudio do Windows Media, poderá obtê-lo definindo as configurações de enumeração no método IWMCodecInfo3::SetCodecEnumerationSetting . Defina g_wszVBREnabled como True e defina g_wszNumPasses como 1 para VBR baseada em qualidade ou 2 para VBR de duas passões (restrita ou irrestrita). Se você estiver usando VBR de duas passões restritas, deverá definir manualmente a taxa máxima de bits e a janela de buffer para o fluxo usando os métodos de IWMPropertyVault , conforme descrito em Configurando fluxos de VBR.
Em perfis VBR baseados em qualidade, o membro nAvgBytesPerSec da estrutura WAVEFORMATEX contém o nível de qualidade (1 a 100) no byte de baixa ordem e os três bytes de alta ordem são definidos como 0x7fffff. Não tente modificar a configuração de qualidade modificando esse valor manualmente; você deve usar o formato conforme ele é recuperado do codec. Para usar um valor de qualidade diferente, você deve enumerar formatos até encontrar um que atenda às suas necessidades. Além disso, nAvgBytesPerSec não será preservado no arquivo ASF; quando você obtém a estrutura WAVEFORMATEX para um arquivo que foi aberto com o objeto reader, nAvgBytesPerSec contém um valor aproximado que representa o número médio de bytes por segundo.
Observação
Ao configurar fluxos de áudio, você nunca deve ter um valor de janela de buffer de áudio maior que o valor de qualquer fluxo de vídeo no arquivo. Normalmente, isso não é um problema, pois os valores da janela do buffer de áudio devem variar entre 1,5 e 3 segundos e os valores de vídeo devem variar entre 3 e 5 segundos. Se uma janela de buffer de áudio for maior que uma janela de buffer de vídeo, o arquivo será reproduzido com os fluxos ligeiramente fora de sincronização.
Tópicos relacionados