設定音訊串流
[與此頁面相關聯的功能 Windows Media Format 11 SDK是舊版功能。 來源讀取器 和 資料寫入器已取代它。 來源讀取器 和 接收寫入器 已針對 Windows 10 和 Windows 11 優化。 Microsoft強烈建議新程式碼盡可能使用 Source Reader 和 Sink Writer,而不是 Windows Media Format 11 SDK。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
音訊串流通常是最直接的設定。 使用 IWMCodecInfo 方法從編解碼器取得數據流組態,如 從編解碼器取得串流設定資訊中所述。 在大部分情況下,您不應該改變已擷取的設定。
您從列舉中選取的編解碼器格式,取決於使用配置檔所建立的 ASF 檔案的預期用法。 IWMCodecInfo2::GetCodecFormatDesc 所擷取的編解碼器格式描述 摘要說明格式的特性。 如果您的應用程式未顯示要在它們之間選擇的描述,您可以在編解碼器格式的 IWMStreamConfig 介面上呼叫 QueryInterface,以取得 IWMMediaProps 介面。 然後,您可以呼叫 IWMMediaProps::GetMediaType來擷取 WM_MEDIA_TYPE 結構。 藉由檢查其指向的 WM_MEDIA_TYPE 結構和 WAVEFORMATEX 結構,您可以判斷編解碼器格式的設定,並將其與您的需求進行比較。
取得 A/V 同步處理的音訊格式
Windows 媒體音訊編解碼器和 Windows Media Audio Professional 編解碼器都支援僅限音訊檔案和音訊/視訊檔案的格式。 僅限音訊格式會針對只包含音訊數據的檔案進行優化,而音訊/視訊格式則針對具有視訊串流之檔案中的音訊進行優化。 列舉這些編解碼器的編解碼器格式時,音訊/視訊格式會在僅限音訊的格式之後出現。 音訊/視訊格式描述全部包含字串 “(A/V)”。 您可以檢查每秒封包數目,以程式設計方式識別音訊/視訊同步處理所設計的格式。 如果比特率大於或等於每秒 32,000 位,同步處理的格式會每秒有 5 個或更多封包。 位元速率低於每秒 32,000 位的格式可以與同步視訊一起使用,前提是每秒使用 3 個以上的封包。 尋找音訊格式 主題中的程式代碼範例包含進行這項檢查所需的程式代碼:
if((pWave->nAvgBytesPerSec / pWave->nBlockAlign) >=
((pWave->nAvgBytesPerSec >= 4000) ? 5.0 : 3.0))
{
// Set this stream configuration as the new best match.
}
取得 Low-Delay 音訊格式
Windows Media 9.1 編解碼器和 Windows Media Audio 9.1 Professional 編解碼器都支援低延遲格式。 這些格式具有比其他音訊格式較小的緩衝區視窗。 低延遲音訊旨在改善檔案或串流經常切換的案例中的效能;例如,列出使用者介面中串流數首歌曲的應用程式,可讓使用者任意切換。
低延遲格式僅適用於 CBR 模式(一次傳遞或兩個傳遞)。 低延遲格式描述全都包含字串 「Low Delay」。 您可以檢查格式的比特率值,以程式設計方式識別格式。 低延遲格式的位速率會比相應的一般格式低 1 千位元。 例如,Windows 媒體音訊 9.1 編解碼器支援比特率為 192 kbps 的單一傳遞 CBR 格式。 對等的低延遲格式的位速率為 191 kbps。 此外,除了 Windows 媒體音訊 9.1 編解碼器支援的 5 kbps 單聲道格式之外,低延遲格式是唯一具有奇數比特率值的格式。
設定可變比特率音訊
當您需要其中一個 Windows Media 音訊編解碼器的可變比特率 (VBR) 格式時,您可以在 IWMCodecInfo3::SetCodecEnumerationSetting 方法中設定列舉設定來取得它。 將 g_wszVBREnabled 設定為 True,將 g_wszNumPasses 設為 1(用於品質型 VBR),或設為 2(用於雙傳遞 VBR,限制或不受限制)。 如果您使用限制的雙傳遞 VBR,您必須使用 IWMPropertyVault 的方法,手動設定數據流的最大比特率和緩衝區視窗,如 設定 VBR 串流中所述。
在以品質為基礎的 VBR 配置檔中,nAvgBytesPerSecGWATEX 結構的成員包含低階位元組中的質量等級(1 到 100),而三個高階位元組則設定為0x7fffff。 請勿嘗試手動修改此值來修改質量設定;您必須使用格式,因為它是從編解碼器擷取。 若要使用不同的品質值,您必須列舉格式,直到您找到符合您需求的格式為止。 此外,nAvgBytesPerSec 將不會保留在 ASF 檔案中,當您取得以讀取器物件開啟之檔案的 WAVEFORMATEX 結構時,nAvgBytesPerSec 包含代表每秒平均位元組數的近似值。
注意
設定音訊串流時,您永遠不應該有大於檔案中任何視訊數據流值的音訊緩衝區視窗值。 通常這不是問題,因為音訊緩衝區視窗值的範圍應介於 1.5 到 3 秒之間,視訊值的範圍應介於 3 到 5 秒之間。 如果音訊緩衝區視窗大於視訊緩衝區視窗,檔案播放時會造成音訊和視訊流有些微不同步的情況。
相關主題