在 ContentInfo 物件中設定屬性
建立 ASF 檔案時,ContentInfo 物件必須知道媒體內容的特性,讓各種標頭物件填入正確的值。
- ContentInfo 物件 中的內容相關設定
- 使用編碼器設定來設定 ContentInfo 物件
- 相關主題
ContentInfo 對象中的內容相關設定
內容配置設定是流設定,這些設定包含在設定檔內,並指定流標識碼、媒體類型,以及媒體接收的漏桶參數。 呼叫 IMFASFContentInfo::SetProfile ,在 ContentInfo 物件上設定設定檔之後,這些值就會反映在產生的 ASF 標頭物件中。 如需這些設定的相關信息,請參閱 建立和設定 ASF 資料流。
使用編碼器設定來設定 ContentInfo 物件
數字媒體音訊或視訊數據很複雜,佔用大量的記憶體。 在大部分情況下,音訊和視訊會先使用編碼器壓縮,再新增至 ASF 檔案。 在媒體基礎中,編碼器可作為具有一個輸入和一個輸出的 Media Foundation Transforms (MFT)來實施。 您必須根據輸入數據流的媒體類型,以及您選擇要壓縮數據流的編碼類型,選取輸出媒體類型。
在編碼會話之前,必須根據編碼類型設定相關屬性,以配置編碼器。
設定編碼器之後,您必須使用編碼器值來設定 ContentInfo 物件,因為 ASF Multiplexer 和以填入的 ContentInfo 物件初始化的 ASF 媒體接收器,會使用像洩漏桶值之類的設定,來生成 ASF 數據封包。 這些值不會儲存在最終的 ASF 標頭物件中。 編碼設定會作為屬性而公開。 若要使用編碼器屬性設定 ContentInfo 物件,請執行下列動作:
- 直接查詢 IPropertyStore 介面的編碼器(IMFTransform 介面),以取得編碼器屬性存放區的指標。
- 呼叫 IMFASFContentInfo::GetEncodingConfigurationPropertyStore。 若要設定數據流特定屬性,請在 wStreamNumber 參數中指定數據流標識符;針對檔案層級屬性,傳遞0。 ppIStore 參數會接收 IPropertyStore 介面的指標。 接收的屬性存放區是空的。
- 在編碼器上呼叫 IPropertyStore::GetValue,並指定屬性索引鍵常數來取得屬性值。 如需編碼屬性的完整清單,請參閱 編解碼器程式設計參考。
- 在 ContentInfo 物件上呼叫 IPropertyStore::SetValue,以在屬性存放區中設定必要的屬性。
- 針對您想要設定的每個屬性重複步驟 3 和 4。
您可以使用啟用物件來建立 ASF 媒體接收器,方法是呼叫 MFCreateASFMediaSinkActivate。 新的媒體接收對像是根據可在 ContentInfo 物件屬性存放區中設定的媒體接收特定設定來設定。 下表顯示 ASF 媒體匯入屬性常數。
財產 | 描述 |
---|---|
MFPKEY_ASFMEDIASINK_BASE_SENDTIME | 傳送時間表示漏桶內的承載何時釋放。 這個屬性值表示第一次傳送時間。 多工器會使用此值來計算生成封包的後續傳送時間,並確保數據流能穩定地通過漏桶。 |
MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE | 這個 BOOL 值表示多工器是否需要自動調整比特率,以確保數據不會溢出漏桶。 |
MFPKEY_ASFMEDIASINK_DRMACTION | 這表示 ASF 媒體接收器在產生檔案時的 DRM 操作。 在此版本中,僅支援DRM轉碼。 |
MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET | 當編碼器決定要使用的緩衝區視窗和比特率時,必須設定這個屬性。 若要設定這些值,請使用 IWMCodecLeakyBucket 介面。 這必須針對 ASF 檔案中的每個數據流進行設定。 |
相關主題