Partilhar via


Para suportar vários idiomas

[A funcionalidade associada a esta página, Windows Media Format 11 SDK, é uma funcionalidade herdada. Foi substituído por Source Reader e Sink Writer. do Source Reader e Sink Writer foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize o Source Reader e o Sink Writer em vez do SDK do Windows Media Format 11 , sempre que possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Você pode oferecer suporte a vários idiomas, tanto em fluxos quanto em metadados. O núcleo do suporte a vários idiomas no SDK do Windows Media Format é a interfaceIWMLanguageList, que mantém uma lista dos idiomas suportados. A lista de idiomas fornece a cada idioma suportado um índice, que é usado em vários objetos no SDK ao lidar com vários idiomas.

O método IWMLanguageList::AddLanguageByRFC1766String adiciona um idioma à lista. Você pode identificar os idiomas que já estão na lista obtendo o número total de idiomas com IWMLanguageList::GetLanguageCount e, em seguida, fazendo um loop pelos idiomas chamando IWMLanguageList::GetLanguageDetails para cada um. O índice de idioma é baseado em zero.

Para configurar a exclusão mútua por idioma

Configurar um objeto de exclusão mútua simples por linguagem é muito simples. Cada fluxo agora está associado a um idioma. O idioma associado a um fluxo pode ser definido usando IWMStreamConfig3::SetLanguage. Depois que todos os fluxos mutuamente exclusivos forem configurados, basta criar um objeto de exclusão mútua como faria para qualquer outro tipo. Em seguida, chame IWMMutualExclusion::SetType, passando CLSID_WMMUTEX_Language como o tipo.

Fluxos que são mutuamente exclusivos por idioma tornam-se mais complicados quando os fluxos exclusivos também são mutuamente exclusivos por taxa de bits. Neste caso, você deve usar registros mutuamente exclusivos, executando as seguintes etapas:

  1. Crie um objeto de exclusão mútua para os fluxos de diferentes taxas de bits em cada idioma. Para obter mais informações sobre como criar um objeto de exclusão mútua por taxa de bits, consulte Usando a exclusão mútua de taxa de bits múltipla.
  2. Crie um objeto de exclusão mútua. Chame IWMMutualExclusion::SetType e passe CLSID_WMMUTEX_Language para especificar a exclusividade por idioma.
  3. Obtenha um ponteiro para a interface IWMMutualExclusion2 do objeto de exclusão mútua criado na etapa 2, chamando o método QueryInterface de IWMMutualExclusion.
  4. Chame o método IWMMutualExclusion2::AddRecord uma vez para cada idioma, para criar registros de fluxo que serão mutuamente exclusivos.
  5. Para cada registro criado na etapa 4, adicione os fluxos do idioma apropriado com chamadas para IWMMutualExclusion2::AddStreamForRecord.

Para ler arquivos com vários idiomas

O objeto reader fornece métodos para identificar os idiomas disponíveis de fluxos em um arquivo. Você pode recuperar o número de idiomas suportados para uma saída chamando IWMReaderAdvanced4::GetLanguageCount. Em seguida, você pode recuperar detalhes sobre cada idioma com chamadas para IWMReaderAdvanced4::GetLanguage.

Você pode especificar o idioma a ser reproduzido passando o índice desse idioma para o leitor com uma chamada para IWMReaderAdvanced2::SetOutputSetting. Isso selecionará o idioma especificado enquanto mantém a seleção automática de fluxo para quaisquer outros objetos de exclusão mútua no arquivo.

Tópicos Avançados

Interface IWMLanguageList

Interface de Exclusão Mútua IWM

Interface IWMMutualExclusion2

Interface IWMReaderAdvanced2

Interface IWMReaderAdvanced4

Interface IWMStreamConfig3