在 ContentInfo 物件中設定屬性

建立 ASF 檔案時,ContentInfo 物件必須知道媒體內容的特性,讓各種標頭物件填入正確的值。

內容組態設定是資料流程設定,包含在設定檔中,並指定資料流程識別碼、媒體類型,以及媒體接收的流失值區參數。 呼叫 IMFASFContentInfo::SetProfile 在 ContentInfo物件上設定設定檔之後,這些值就會反映在產生的 ASF 標頭物件中。 如需這些設定的相關資訊,請參閱 建立和設定 ASF 資料流程

使用編碼器設定來設定 ContentInfo 物件

數位媒體音訊或視訊資料很複雜,而且佔用大量的記憶體。 在大部分情況下,音訊和視訊在新增至 ASF 檔案之前,會先使用編碼器來壓縮。 在媒體基礎中,編碼器會實作為 媒體基礎轉換 , (MFT) 搭配一個輸入和輸出。 您必須根據輸入資料流程的媒體類型以及您選擇要壓縮資料流程的編碼類型,選取輸出媒體類型。

在編碼會話之前,必須設定編碼器,方法是根據編碼類型來設定相關的屬性。

設定編碼器之後,您必須使用編碼器值來設定 ContentInfo 物件,因為 ASF Multiplexer 和 ASF 媒體接收是以填入的 ContentInfo 物件初始化,請使用流失值區值之類的設定來產生 ASF 資料封包。 這些值不會儲存在最終的 ASF 標頭物件中。 編碼設定會公開為屬性。 若要使用編碼器屬性設定 ContentInfo 物件,請執行下列動作:

  1. 直接查詢IPropertyStore介面的編碼器 (IMFTransform介面) ,以取得編碼器屬性存放區的指標。
  2. 呼叫 IMFASFContentInfo::GetEncodingConfigurationPropertyStore。 若要設定資料流程特定屬性,請在 wStreamNumber 參數中指定資料流程識別碼;針對檔案層級屬性,傳遞 0。 ppIStore參數會接收IPropertyStore介面的指標。 接收的屬性存放區是空的。
  3. 在編碼器上呼叫 IPropertyStore::GetValue ,並藉由指定屬性索引鍵常數來取得屬性值。 如需編碼屬性的完整清單,請參閱 編解碼器程式設計參考
  4. 在 ContentInfo 物件上呼叫 IPropertyStore::SetValue ,以在屬性存放區中設定必要的屬性。
  5. 針對您想要設定的每個屬性重複步驟 3 和 4。

藉由呼叫 MFCreateASFMediaSinkActivate,即可使用啟用物件來建立 ASF 媒體接收。 新的媒體接收物件是根據可在 ContentInfo 物件屬性存放區中設定的媒體接收特定設定來設定。 下表顯示 ASF 媒體接收屬性常數。

屬性 描述
MFPKEY_ASFMEDIASINK_BASE_SENDTIME 傳送時程表示何時釋放流失貯體內的承載。 這個屬性值表示第一次傳送時間。 多工器會使用此值來計算所產生封包的後續傳送時間,並確保資料流程會穩定流經流失貯體。
MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE 這個 BOOL 值指出多工器是否需要自動調整位元速率,以確保資料不會溢位流失貯體。
MFPKEY_ASFMEDIASINK_DRMACTION 這表示用於產生檔案的 ASF 媒體接收 DRM 動作。 在此版本中,僅支援 DRM 轉碼。
MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET 當編碼器決定要使用的緩衝區視窗和位元速率時,必須設定這個屬性。 若要設定這些值,請使用 IWMCodecLeakyBucket 介面。 這必須針對 ASF 檔案中的每個資料流程設定。

 

撰寫新檔案的 ASF 標頭物件