Поделиться через


Поддержка нескольких языков

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Она была заменена средствами чтения источника и модуля записи приемников. Средство чтения источника и модуль записи приемников оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде средство чтения исходного кода и модуль записи приемников вместо пакета SDK для Windows Media Format 11, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Вы можете поддерживать несколько языков как в потоках, так и в метаданных. Основой поддержки нескольких языков в пакете SDK для формата Windows Media является интерфейс IWMLanguageList , который поддерживает список поддерживаемых языков. Список языков предоставляет каждому поддерживаемому языку индекс, который используется в различных объектах пакета SDK при работе с несколькими языками.

Метод IWMLanguageList::AddLanguageByRFC1766String добавляет язык в список. Вы можете определить языки, которые уже находятся в списке, получив общее количество языков с помощью IWMLanguageList::GetLanguageCount , а затем циклически перебирая языки, вызывающие IWMLanguageList::GetLanguageDetails для каждого из них. Индекс языка основан на нуле.

Настройка взаимного исключения по языку

Настройка простого объекта взаимного исключения по языку очень проста. Теперь каждый поток связан с языком. Язык, связанный с потоком, можно задать с помощью IWMStreamConfig3::SetLanguage. После настройки всех взаимоисключающих потоков просто создайте объект взаимного исключения, как и для любого другого типа. Затем вызовите IWMMMutualExclusion::SetType , передав CLSID_WMMUTEX_Language для типа.

Потоки, которые являются взаимоисключающими по языку, усложняются, когда эксклюзивные потоки также являются взаимоисключающими по скорости. В этом случае необходимо использовать взаимоисключающие записи, выполнив следующие действия:

  1. Создайте объект взаимного исключения для потоков разной скорости битов в каждом языке. Дополнительные сведения о создании объекта взаимного исключения по скорости см. в разделе Использование взаимного исключения с множественной скоростью.
  2. Создайте объект взаимного исключения. Вызовите IWMMUtualExclusion::SetType и передайте CLSID_WMMUTEX_Language, чтобы указать эксклюзивность по языку.
  3. Получите указатель на интерфейс IWMMMutualExclusion2 объекта взаимного исключения, созданного на шаге 2, вызвав метод QueryInterfaceобъекта IWMMutualExclusion.
  4. Вызовите метод IWMMMUtualExclusion2::AddRecord один раз для каждого языка, чтобы создать записи потока, которые будут взаимоисключающими.
  5. Для каждой записи, созданной на шаге 4, добавьте потоки соответствующего языка с вызовами IWMMUtualExclusion2::AddStreamForRecord.

Чтение файлов с несколькими языками

Объект reader предоставляет методы для определения доступных языков потоков в файле. Количество поддерживаемых языков для выходных данных можно получить, вызвав IWMReaderAdvanced4::GetLanguageCount. Затем можно получить сведения о каждом языке с помощью вызовов IWMReaderAdvanced4::GetLanguage.

Вы можете указать язык для воспроизведения, передав индекс этого языка средству чтения с вызовом IWMReaderAdvanced2::SetOutputSetting. При этом будет выбран указанный язык при сохранении автоматического выбора потока для любых других объектов взаимного исключения в файле.

Дополнительные разделы

Интерфейс IWMLanguageList

Интерфейс IWMMutualExclusion

Интерфейс IWMMUtualExclusion2

Интерфейс IWMReaderAdvanced2

Интерфейс IWMReaderAdvanced4

Интерфейс IWMStreamConfig3