MPEG-4 檔案接收
MPEG-4 檔案接收會建立 MP4 檔案。 如需 MP4 檔案格式的詳細資訊,請參閱下列標準檔:
- ISO/IEC 14496-12: 資訊技術 -- 音訊視覺物件的編碼 -- 第 12 部分:ISO 基底媒體檔案格式
- ISO/IEC 14496-14: 資訊技術 -- 音訊視覺物件的編碼 -- 第 14 部分:MP4 檔案格式
注意
(某些語言和國家/地區可能無法使用這些資源。
MPEG-4 檔案接收不會封裝編碼功能。
若要建立 MPEG-4 檔案接收,請呼叫 MFCreateMPEG4MediaSink 函式。 MPEG-4 檔案接收會透過 QueryInterface 公開下列介面:
範例描述方塊
MP4 是可延伸的容器格式。 MP4 規格不會定義固定結構來描述 MP4 容器中的媒體類型。 相反地,它會定義物件階層,允許為每個格式定義自訂結構。 格式描述會儲存在每個資料流程的範例描述 ('stsd') 方塊中。 範例描述方塊包含範例專案清單。 針對每個範例專案,4 位元組的程式碼,類似于 FOURCC,會定義格式結構。
MPEG-4 檔案接收可以產生下列格式的範例描述方塊:
- H.264/AVC 影片
- AAC 音訊
- MP3 音訊
針對其他格式,每個資料流程的媒體類型中必須提供範例描述方塊。 若要指定範例描述方塊,請在媒體類型上設定下列屬性:
屬性 | 描述 |
---|---|
MF_MT_MPEG4_SAMPLE_DESCRIPTION | 包含二進位 Blob 的範例描述方塊。 |
MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY | 指定範例描述方塊中目前作用中的範例專案。 (選用。) 目前,值必須是零。 |
在某些情況下,在所有資料都經過編碼之前,無法產生範例描述方塊。 例如,可能不會事先知道平均位元速率等資訊。 在此情況下,您可以在 MPEG-4 檔案接收上使用 IMFMediaTypeHandler 介面來更新媒體類型 。 這必須在媒體接收完成之前完成。
媒體類型通常是由上游編碼器所建立。 編碼器可以在串流期間透過動態格式變更來產生新的媒體類型。 如需詳細資訊,請參閱 動態格式變更 。
H.264/AVC 影片
MPEG-4 檔案接收支援具有基本視訊資料流程的 AVC 資料流程版本,其中序列參數集 (SPS) 和圖片參數集 (PPS) NALU 包含在範例描述方塊中,如 ISO/IEC 14496 第 15 部分 5.1 所定義。 檔案接收不支援將 SPS/PPS NALUs 儲存為個別參數集基礎資料流程的替代方法。
MPEG-4 檔案接收可以產生範例描述方塊,但必須提供 SPS 和 PPS NALU。 藉由設定 MF_MT_MPEG_SEQUENCE_HEADER 屬性,在媒體類型中指定這項資訊。 屬性的值是 H.264 序列標頭。 序列標頭必須包含由 3 位元組或 4 位元組起始碼分隔的 SPS 和 PPS NALUs。
或者,當您設定檔案接收時,可以從初始媒體類型省略 MF_MT_MPEG_SEQUENCE_HEADER 屬性。 在此情況下,您稍後必須更新媒體類型,以包含序列標頭。
MPEG-4 檔案接收對 AVC 位資料流程有下列需求:
- bitstream 必須符合 H.264 附錄 B 格式規格。 特別是,NALU 必須以 3 位元組或 4 位元組起始碼分隔。
- 媒體範例必須包含對應至單一簡報時間的所有配量和資料 NALU。
- 將 B 框架寫入 MP4 檔案時,您必須同時設定簡報時間戳記和解碼時間戳記。 如果資料流程有 B 框架且未設定解碼時間戳記,MP4 寫入器就會看到框架時間向後移動,並將卸載框架。
AAC 音訊
針對 AAC 音訊,MPEG-4 檔案接收可以產生下列子類型的範例描述方塊:
- MFAudioFormat_AAC
- MEDIASUBTYPE_RAW_AAC1
如需這些子類型的詳細資訊,請參閱 AAC 媒體類型 。
針對 MFAudioFormat_AAC 子類型,媒體類型選擇性地包含 MF_MT_USER_DATA 屬性。 如果存在,則此屬性是 HEAACWAVEINFO 結構中出現于WAVEATEX 結構之後 的部分(也就是 wfx 成員之後 )。 後面接著 AudioSpecificConfig() 資料,如 ISO/IEC 14496-3 所定義。 如果MF_MT_USER_DATA 屬性不存在,則資料流程會假設為 AAC 低複雜度 (LC) 設定檔,而 MPEG-4 檔案接收會產生適當的範例描述方塊。
針對MEDIASUBTYPE_RAW_AAC1 子類型,媒體接收必須包含 MF_MT_USER_DATA 屬性,而 屬性必須包含 AudioSpecificConfig() 資料。
MPEG-4 檔案接收會使用 'mp4a' 範例專案搭配 objectTypeIndication = 0x40,建立 AAC 範例描述方塊的 MPEG-4 變體。 它不使用 MPEG-2 物件類型。
MP3 音訊
針對 MP3 音訊,MPEG-4 檔案接收可以從標準音頻媒體類型產生範例描述方塊。 (請參閱 音訊媒體類型 。)
MPEG-4 檔案接收會使用 'mp4a' 範例專案搭配 objectTypeIndication = 0x6b MPEG-1 音訊,建立 MP3 範例描述方塊的 MPEG-4 變體。
限制
- 所撰寫檔案的大小上限為 4 GB。 在 Windows 8 中,支援大於 4 GB 的檔案。
- MPEG-4 檔案接收不支援編輯清單 ('edts' 和 'elst' 方塊)。
MPEG-4 來源和接收的 Windows 8 更新
Windows 8 MPEG-4 來源和接收中新增的旋轉讀取和寫入支援。 Windows 7 MPEG-4 來源和接收不支援此功能。
MPEG-4 來源會讀取使用中視訊播放軌的旋轉角度,做為從 'mvhd' 和 'tkhd' 旋轉角度的總和。
Microsoft MPEG-4 接收會在 'tkhd' 中寫入旋轉角度,但在 'mvhd' 中寫入 0 度 (身分識別) 矩陣。 請注意,Microsoft MPEG-4 接收僅支援單一視訊播放軌。
IPropertyStore 只會讀取第一個視訊播放軌的旋轉角度,做為從 'mvhd' 和 'tkhd' 旋轉角度的總和。
IPropertyStore 會在旋轉角度根據 'mvhd' 中的旋轉角度進行調整之後,只針對 'tkhd' 中的第一個視訊播放軌寫入旋轉角度,如果存在的話。
Windows 8 MPEG-4 來源和接收支援電影片段 ('moof'),但 'mfra' 則不支援。
Windows 8 MPEG-4 來源支援 H.263。
MPEG-4 來源現在會將兩個四cc 的 'h263' 和 's263' 以 MPEG-4 檔案格式對應到媒體類型的 MFVideoFormat_H263 。
在 Windows 8 MPEG-4 來源中新增 MJPEG 的更多四cc 支援。
MPEG-4 來源會將 'dmb1' 的 foucc 對應至媒體類型的 MFVideoFormat_MJPG 。
Windows 8 MPEG-4 來源中新增的 Furigana 中繼資料支援。
MPEG-4 來源會從 'soal'、'soar'、'soaa'、'sonm' 和 'soco' 讀取 Furigana 中繼資料。 IPropertyStore 會透過一組對應的 PKEY 讀取 Furigana 中繼資料。
下表顯示殼層標準名稱、屬性索引鍵和 MPEG-4 檔案格式的 box/tag ID 之間的對應。
欄位 屬性索引鍵 標籤/方塊識別碼 System.Music.AlbumTitleSortOverride PKEY_Music_AlbumTitleSortOverride soal System.Music.ArtistSortOverride PKEY_Music_ArtistSortOverride 飆升 System.Music.AlbumArtistSortOverride PKEY_Music_AlbumArtistSortOverride soaa System.TitleSortOverride PKEY _TitleSortOverride sonm System.Music.ComposerSortOverride PKEY_Music_ComposerSortOverride soco Windows 8 MPEG-4 來源中新增的立體聲 3D Atom 支援。
在 Windows 8 MPEG-4 來源和接收中新增 AC3 和 DD+ 支援。
非片段 MP4 的 Windows 8 MPEG-4 接收支援大於 4 GB 的檔案。
清除已在 Windows 8 MPEG-4 來源中優化。
為了降低延遲,特定搜尋位置的兩個主要畫面格資訊會透過 IMFSeekInfo::GetNearestKeyFrames 公開。 由於主要畫面格沒有相依畫面格,因此在譯碼后只呈現一個畫面格。 使用 IMFGetService::GetService 透過媒體來源、管線或應用程式取得此介面。
將 MPEG-4 來源中的速率設定為零。 當管線處於清除模式時,速率為零。
SPS 和 PPS 可以儲存在 MPEG-4 接收中的範例數據中。
已定義 MPEG-4 接收上的MF_MPEG4SINK_SPSPPS_PASSTHROUGH 屬性,以允許 SPS 和 PPS 與輸入樣本一起儲存(H.264 視訊數據)。 產生的 mp4 剪輯可由 Windows 7 MPEG-4 來源和其他專案播放。
SPS 和 PPS 可以從 MPEG-4 接收中的輸入範例擷取。
當 SPS 和 PPS 未透過 MPEG-4 接收的輸入媒體類型MF_MT_MPEG_SEQUENCE_HEADER 設定時,MPEG-4 接收會嘗試從輸入範例擷取 SPS 和 PPS。 MPEG-4 接收會忽略任何輸入樣本,直到找到第一個 SPS 和 PPS 為止,因為沒有 SPS 和 PPS 的所有輸入樣本都無法譯碼。
非片段 MP4 支援 AVC 設定記錄中的 3D 資訊。
NALU 長度會針對 H.264 壓縮樣本公開,以優化 H.264 VLD DXVA 譯碼。
MPEG-4 來源會在MFVideoFormat_H264或MFVideoFormat_h264的輸出媒體類型上設定MF_NALU_LENGTH_SET。 它會在每個輸出樣本上設定MF_NALU_LENGTH_INFORMATION的 Blob,其中一個壓縮樣本中具有不同 NALU 的四位元組 NALU 長度。
已針對 MP4 來源中的 MPEG2 ADTS 音訊新增支援。
需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 |
Windows Server 2008 R2 [僅限傳統型應用程式] |
另請參閱