使用非同步讀取器傳遞壓縮的範例

[與此頁面相關聯的功能 Windows Media Format 11 SDK是舊版功能。 來源讀取器和接收寫入器已取代它。 來源讀取器和接收寫入器已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用來源讀取器和接收寫入器,而不是Windows Media Format 11 SDK。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

非同步讀取器可以從 ASF 檔案中的資料流程傳遞壓縮的樣本。 應用程式通常會在將資料流程從一個檔案複製到另一個檔案時傳遞壓縮的樣本。 不建議重新壓縮已從壓縮資料流程重新建構的資料,因為資料會在編碼程式中遺失。 壓縮超過一次的數位媒體會明顯降低品質。

Windows Media Format SDK 在從 ASF 檔案擷取資料之後,不會提供任何解碼資料的方法。 如果您收到壓縮的範例,稍後想要解壓縮它們,則必須提供自己的程式碼來執行此動作。 解決這項限制的其中一個方法是將壓縮的樣本寫入新的 ASF 檔案,然後將它們重新讀入一般、未壓縮的樣本。

若要使用非同步讀取器接收壓縮的樣本,請執行下列步驟。

  1. 實作 IWMReaderCallbackAdvanced::OnStreamSample 回呼 。 此回呼在函式中基本上與 IWMReaderCallback::OnSample 相同, 不同之處在于它會依資料流程編號傳遞樣本,而且仍會壓縮樣本。
  2. 開始播放之前,請先呼叫IWMReader::QueryInterface,以取得讀取器物件的IWMReaderAdvanced介面指標。
  3. 藉由呼叫 IWMReaderAdvanced::SetReceiveStreamSamples,設定讀取器以傳遞所需資料流程的壓縮樣本。
  4. 針對需要壓縮樣本傳遞的每個資料流程重複步驟 3。

注意

影像資料流程對壓縮資料流程傳遞無效。 如果您將影像資料流程從一個檔案複製到另一個檔案,它將無法在新檔案中運作。 若要從檔案將影像資料流程複製到檔案,請依輸出編號擷取影像串流範例,並將其包含在新的檔案中,就像包含新的影像資料流程一樣。

 

IWMReaderCallbackAdvanced 介面

使用非同步讀取器讀取檔案