支持多种语言

[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

可以在流和元数据中支持多种语言。 Windows Media Format SDK 中多语言支持的核心是 IWMLanguageList 接口,该接口维护支持的语言列表。 语言列表为每个支持的语言提供了一个索引,在处理多种语言时,该索引用于 SDK 中的各种对象。

IWMLanguageList::AddLanguageByRFC1766String 方法将语言添加到列表中。 可以使用 IWMLanguageList::GetLanguageCount 获取语言总数,然后循环访问调用 IWMLanguageList::GetLanguageDetails 的语言,从而标识列表中已有的语言。 语言索引从零开始。

按语言配置相互排除

按语言配置简单的互斥对象非常简单。 每个流现在都与一种语言相关联。 可以使用 IWMStreamConfig3::SetLanguage 设置与流关联的语言。 配置所有互斥流后,只需像创建任何其他类型一样创建互斥对象。 然后调用 IWMMutualExclusion::SetType ,为类型传递CLSID_WMMUTEX_Language。

当独占流也按比特率互斥时,语言互斥的流变得更加复杂。 在这种情况下,必须通过执行以下步骤使用互斥记录:

  1. 为每种语言中不同比特率的流创建互斥对象。 有关按比特率创建互斥对象的详细信息,请参阅 使用多比特率互斥
  2. 创建互斥对象。 调用 IWMMutualExclusion::SetType 并传递CLSID_WMMUTEX_Language以按语言指定排他性。
  3. 通过调用 IWMMutualExclusionQueryInterface 方法,获取指向步骤 2 中创建的互斥对象的 IWMMutualExclusion2 接口的指针。
  4. 为每种语言调用 一次 IWMMutualExclusion2::AddRecord 方法,以创建互斥的流记录。
  5. 对于在步骤 4 中创建的每个记录,通过调用 IWMMutualExclusion2::AddStreamForRecord 添加相应语言的流。

使用多种语言读取文件

reader 对象提供用于标识文件中流可用语言的方法。 可以通过调用 IWMReaderAdvanced4::GetLanguageCount 检索输出支持的语言数。 然后,可以通过调用 IWMReaderAdvanced4::GetLanguage 来检索有关每种语言的详细信息。

可以通过调用 IWMReaderAdvanced2::SetOutputSetting 将语言的索引传递给读取器来指定要播放的语言。 这将选择指定的语言,同时保持文件中任何其他互斥对象的自动流选择。

高级主题

IWMLanguageList 接口

IWMMutualExclusion 接口

IWMMutualExclusion2 接口

IWMReaderAdvanced2 接口

IWMReaderAdvanced4 接口

IWMStreamConfig3 接口