媒體基礎:基本概念

如果您不熟悉數位媒體,本主題將介紹一些在撰寫媒體基礎應用程式之前必須瞭解的概念。

串流

資料流程是一連串具有統一類型的媒體資料。 最常見的類型是音訊和視訊,但資料流程幾乎可以包含任何類型的資料,包括文字、指令碼命令,以及仍然影像。 本檔中的串 一詞並不表示透過網路傳遞。 用於本機播放的媒體檔案也包含資料流程。

媒體檔案通常包含單一音訊資料流程,或只包含一個視訊串流和一個音訊資料流程。 不過,媒體檔案可能包含相同類型的數個數據流。 例如,視訊檔案可能包含數種不同語言的音訊資料流程。 在執行時間,應用程式會選取要使用的資料流程。

壓縮

壓縮 是指移除備援資訊來減少資料流程大小的任何進程。 壓縮演算法分為兩個廣泛的類別:

  • 無遺失 壓縮。 使用無遺失演算法,重建的資料與原始資料相同。
  • 遺失壓縮 。 使用遺失演算法時,重新建構的資料是原始資料的近似值,但不是完全相符的。

在大部分的其他網域中,無法接受遺失壓縮。 (Imagine 取得試算表的「近似值」!) 但遺失壓縮配置很適合音訊和視訊,原因有幾種。

第一個原因是人類感知物理。 當我們聆聽複雜的音效時,就像音樂錄製一樣,該音效中包含的一些資訊對聽聽不見。 透過訊號處理理論的協助,可以分析和分隔無法察覺的頻率。 這些頻率可以移除,但沒有任何感知效果。 雖然重新建構的音訊與原始音訊完全不符, 但它會與 接聽程式相同。 類似的原則適用于影片。

其次,視預期用途而定,聲音或影像品質可能會有一些降低。 例如,在電話語音中,音訊通常是高度壓縮的。 結果足以進行電話交談,但您不想透過電話接聽令人滿意的協調。

壓縮也稱為 編碼,編碼的裝置稱為 編碼器。 反向程式會 解碼,而裝置自然稱為 解碼器。 編碼器和解碼器一般詞彙是 編解碼器。 編解碼器可以在硬體或軟體中實作。

壓縮技術自數位媒體推出以來已快速變更,而且目前正在使用大量壓縮配置。 這是數位媒體程式設計的主要挑戰之一。

媒體容器

將原始音訊或視訊串流儲存為電腦檔案,或直接透過網路傳送音訊或視訊資料流程很少。 對於一件事,不可能解碼這類資料流程,而不需要事先知道要使用哪一個編解碼器。 因此,媒體檔案通常至少包含下列一些元素:

  • 描述資料流程數目、每個資料流程格式等的檔案標頭。
  • 索引,可隨機存取內容。
  • 描述內容 (的中繼資料,例如,作者或標題) 。
  • 封包標頭,以啟用網路傳輸或隨機存取。

本檔 使用容器一 詞來描述資料流程、標頭、索引、中繼資料等整個套件。 使用 容器 而非 檔案 一詞的原因是某些容器格式是針對即時廣播而設計。 應用程式可以即時產生容器,永遠不會將它儲存到檔案中。

媒體容器的早期範例是 AVI 檔案格式。 其他範例包括 MP4 和進階系統格式 (ASF) 。 容器可以透過副檔名 (來識別,例如,.mp4) 或 MIME 類型。

下圖顯示媒體容器的一般結構。 此圖表不代表任何特定格式;每個格式的詳細資料會有很大的差異。

顯示一般媒體容器的圖表

請注意,圖表中顯示的結構是階層式的,標頭資訊會出現在容器開頭。 此結構通常是許多 (,但並非所有) 容器格式。 另請注意,資料區段包含交錯的音訊和視訊封包。 這種交錯在媒體容器中很常見。

多工處理一詞是指封包化音訊和視訊資料流程,並將封包交錯至容器的程式。 反向程式會從封包化資料重新組譯資料流程,稱為 解除混淆

格式

在數位媒體中, 格式 一詞模棱兩可。 格式可以參考 編碼類型,例如 H.264 視訊或 容器,例如 MP4。 這種區別通常對一般使用者造成混淆。 提供給媒體格式的名稱不一定有説明。 例如, MP3 同時參考編碼格式 (MPEG-1 音訊層 3) 和檔案格式。

不過,差別很重要,因為讀取媒體檔案實際上牽涉到兩個階段:

  1. 首先,必須剖析容器。 在大部分情況下,在此步驟完成之前,無法知道每個資料流程的資料流程數目和格式。
  2. 接下來,如果資料流程經過壓縮,則必須使用適當的解碼器來解碼。

這項事實會自然地引導至軟體設計,其中會使用個別元件來剖析容器和解碼資料流程。 此外,這種方法也適合外掛程式模型,讓協力廠商可以提供自己的剖析器和編解碼器。 在 Windows 上,元件物件模型 (COM) 提供標準方式來分隔 API 與其實作,這是任何外掛程式模型的需求。 基於這個理由,媒體基礎會使用 COM 介面 (其他) 。

下圖顯示用來讀取媒體檔案的元件:

顯示要讀取媒體檔案之元件的圖表

撰寫媒體檔案也需要兩個步驟:

  1. 編碼未壓縮的音訊/視訊資料。
  2. 將壓縮的資料放入特定的容器格式。

下圖顯示用來寫入媒體檔案的元件:

此圖顯示要寫入媒體檔案的元件。

媒體基礎程式設計指南