支援多種語言
[與此頁面相關聯的功能 Windows Media Format 11 SDK是舊版功能。 來源讀取器 和 接收寫入器已取代它。 來源讀取器 和 接收寫入器 已針對 Windows 10 和 Windows 11 優化。 Microsoft強烈建議新程式代碼盡可能使用 來源讀取器 和 接收寫入器,而不是 Windows Media Format 11 SDK。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
您可以在資料流和元資料中支援多種語言。 Windows Media Format SDK 中多種語言支援的核心是 IWMLanguageList 介面,其會維護支持的語言清單。 語言清單會為每個支援的語言提供索引,在處理多種語言時,會用於 SDK 中的各種物件。
IWMLanguageList::AddLanguageByRFC1766String 方法會將語言新增至清單。 您可以先取得語言列表的總數,使用 IWMLanguageList::GetLanguageCount,然後迴圈遍歷每一種語言並呼叫 IWMLanguageList::GetLanguageDetails 獲取詳細資訊。 語言索引是以零起始。
若要依語言設定相互排除
依語言設定簡單的互斥物件非常簡單。 每個數據流現在都會與語言相關聯。 您可以使用 IWMStreamConfig3::SetLanguage來設定與數據流相關聯的語言。 設定所有互斥的流之後,像對其他任何類型一樣簡單地建立互斥物件即可。 然後呼叫 IWMMutualExclusion::SetType,並將 CLSID_WMMUTEX_Language 作為類型傳入。
當語言互相排斥的數據流在比特率上也互相排斥時,這些數據流會變得更加複雜。 在此情況下,您必須使用互斥記錄,並執行以下步驟:
- 針對每個語言中不同比特率的數據流建立互斥物件。 如需依比特率建立互斥物件的詳細資訊,請參閱 使用多重比特率互斥。
- 建立互斥物件。 呼叫 IWMMutualExclusion::SetType,並傳遞CLSID_WMMUTEX_Language,以依語言指定排他性。
- 藉由呼叫 IWMMutualExclusionIWMMutualExclusionQueryInterface 方法,取得在步驟 2 中建立之相互排除物件的 IWMMutualExclusion 2 的指標。
- 針對每個語言呼叫 IWMMutualExclusion2::AddRecord 方法,以建立互斥的數據流記錄。
- 針對步驟 4 中建立的每個記錄,使用呼叫 IWMMutualExclusion2::AddStreamForRecord新增適當語言的數據流。
讀取具有多種語言的檔案
讀取器物件提供方法來識別檔案中數據流的可用語言。 您可以呼叫 IWMReaderAdvanced4::GetLanguageCount來擷取輸出支援的語言數目。 接著,您可以使用呼叫 IWMReaderAdvanced4::GetLanguage來擷取每個語言的詳細數據。
您可以使用呼叫 IWMReaderAdvanced2::SetOutputSetting,將該語言的索引傳遞給讀取者,以指定要播放的語言。 這會選取指定的語言,同時維護檔案中任何其他互斥對象的自動串流選取。
相關主題