常見媒體型別中的編解碼器
從根本上講,您可以使用簡單的 MIME 型別(例如 video/mp4 或 audio/mpeg)來指定媒體檔案的型別。但是,許多媒體型別(尤其是那些支援影片軌道的媒體型別)可以從更精確地描述其內部資料格式的能力中受益。例如,僅使用 MIME 型別 video/mp4 描述 MPEG-4 檔案中的影片,並沒有說明實際媒體的格式。
因此,可以將 codecs 引數新增到描述媒體內容的 MIME 型別中。使用它,可以提供特定於容器的資訊。這些資訊可能包括影片編解碼器的配置檔案、用於音訊軌道的型別等等。
本指南簡要介紹了媒體型別 codecs 引數的語法以及它如何與 MIME 型別字串一起使用,以提供有關音訊或影片媒體內容的詳細資訊,而不僅僅是指示容器型別。
容器格式 MIME 型別
容器格式的 MIME 型別透過說明媒體型別(audio、video 等)、然後是一個斜槓字元(/)、然後是用於包含媒體的格式來表示
audio/mpeg-
使用 MPEG 檔案型別的音訊檔案,例如 MP3。
video/ogg-
使用 Ogg 檔案型別的影片檔案。
video/mp4-
使用 MPEG-4 檔案型別的影片檔案。
video/quicktime-
Apple 的 QuickTime 格式的影片檔案。如其他地方所述,此格式曾經在 Web 上廣泛使用,但現在已不再使用,因為它需要外掛才能使用。
但是,所有這些 MIME 型別都比較模糊。所有這些檔案型別都支援各種編解碼器,而這些編解碼器可能具有任意數量的配置檔案、級別和其他配置因素。因此,您可能希望將 codecs 引數與媒體型別一起包含。
基本語法
您可以將 codecs 引數新增到媒體型別中。為此,請附加一個分號(;),後跟 codecs=,然後是描述檔案內容格式的字串。某些媒體型別僅允許您指定要使用的編解碼器的名稱,而其他媒體型別則允許您指定這些編解碼器的各種約束。您可以透過逗號分隔多個編解碼器來指定它們。
與任何 MIME 型別引數一樣,如果編解碼器的任何屬性使用必須根據 RFC 2231,第 4 節:MIME 引數值和編碼詞擴充套件進行百分比編碼的特殊字元,則必須將 codecs 更改為 codecs*(注意星號字元 *)。您可以使用 JavaScript encodeURI() 函式對引數列表進行編碼;類似地,您可以使用 decodeURI() 解碼先前編碼的引數列表。
注意:當使用 codecs 引數時,指定的編解碼器列表必須包含檔案中使用的每個編解碼器。該列表還可以包含檔案中不存在的編解碼器。
按容器劃分的編解碼器選項
AV1
AV1 的 codecs 引數的語法在 AV1 編解碼器 ISO 媒體檔案格式繫結規範的第 5 節:編解碼器引數字串中定義。
av01.P.LLT.DD[.M.CCC.cp.tc.mc.F]
注意:基於 Chromium 的瀏覽器將接受可選引數的任何子集(而不是像規範要求的那樣全部或無)。
此編解碼器引數字串的元件在下面的表格中進行了更詳細的描述。每個元件都是固定數量的字元;如果值小於該長度,則必須用前導零填充。
| 元件 | 詳細資訊 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P |
一位配置檔案編號
|
||||||||||||||||||||
LL |
兩位級別編號,轉換為 X.Y 格式級別格式,其中 X = 2 + (LL >> 2) 且 Y = LL & 3。有關詳細資訊,請參閱 AV1 規範中的 附錄 A,第 3 節。 |
||||||||||||||||||||
T |
一位層指示符。對於主要層(seq_tier 等於 0),此字元為字母 M。對於高階層(seq_tier 為 1),此字元為字母 H。高階層僅適用於 4.0 及以上級別。 |
||||||||||||||||||||
DD |
兩位元件位元深度。此值必須為 8、10 或 12 之一;哪些值有效取決於配置檔案和其他屬性。 | ||||||||||||||||||||
M |
一位單色標誌;如果此值為 0,則影片除 Y 平面外還包括 U 和 V 平面。否則,影片資料完全位於 Y 平面中,因此是單色的。有關 YUV 顏色系統的工作原理的詳細資訊,請參閱 YUV。預設值為 0(非單色)。 | ||||||||||||||||||||
CCC |
預設值為 |
||||||||||||||||||||
cp |
兩位 color_primaries 值表示媒體使用的顏色系統。例如,用於 HDR 影片的 BT.2020/BT.2100 顏色為 09。此資訊(以及每個剩餘元件的資訊)位於 AV1 規範的 顏色配置語義部分。預設值為 01(ITU-R BT.709)。 |
||||||||||||||||||||
tc |
兩位 transfer_characteristics 值。此值定義用於將伽馬(在技術術語中稱為“光電傳遞函式”)從源對映到顯示器的函式。例如,10 位 BT.2020 為 14。預設值為 01(ITU-R BT.709)。 |
||||||||||||||||||||
mc |
兩位 matrix_coefficients 常量選擇用於將紅、藍和綠通道轉換為亮度和色度訊號的矩陣係數。例如,用於 BT.709 的標準係數使用值 01 表示。預設值為 01(ITU-R BT.709)。 |
||||||||||||||||||||
F |
一個一位數的標誌,指示顏色是否應該允許使用全部可能的取值範圍 (1),或者應該限制在被認為對指定顏色配置有效的取值範圍內(即,**工作室擺動表示**)。預設為 0(使用工作室擺動表示)。 |
從 M(單色標誌)開始的所有欄位都是可選的;您可以在任何時候停止包含欄位(但不能任意省略欄位)。預設值包含在上表中。一些 AV1 編解碼器字串示例
av01.2.15M.10.0.100.09.16.09.0-
AV1 專業配置檔案,級別 5.3,主層級,每個顏色分量 10 位,使用 ITU-R BT.2100 顏色原色、傳輸特性和 YCbCr 顏色矩陣的 4:2:2 色度子取樣。指示工作室擺動表示。
av01.0.15M.10-
AV1 主配置檔案,級別 5.3,主層級,每個顏色分量 10 位。其餘屬性取自預設值:4:2:0 色度子取樣、BT.709 顏色原色、傳輸特性和矩陣係數。工作室擺動表示。
VP9
ISO 基本媒體檔案格式語法
VP9 的 codecs 引數的語法在 VP 編解碼器 ISO 媒體檔案格式繫結 規範的 編解碼器引數字串 部分中定義。
在此格式中,codecs 引數的值以一個四字元程式碼開頭,用於識別容器中使用的編解碼器,然後是一系列用句點 (.) 分隔的兩位數值。
cccc.PP.LL.DD cccc.PP.LL.DD.CC.cp.tc.mc.FF
前四個元件是必需的;從 CC(色度子取樣)開始的所有內容都是可選的,但必須全部或不選。這些元件中的每一個都在下表中進行了描述。表格後面是一些示例。
| 元件 | 詳細資訊 | ||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
cccc |
一個四字元程式碼,指示哪個可能的編解碼器正在被描述。潛在值是
|
||||||||||||||||||||||||||||||||||
PP |
兩位數的配置檔案編號,如果需要,用前導零填充以確保正好兩位數。
|
||||||||||||||||||||||||||||||||||
LL |
兩位數的級別編號。級別編號採用定點表示法,其中第一位是各位數字,第二位表示十分位。例如,級別 3 是 30,級別 6.1 是 61。 |
||||||||||||||||||||||||||||||||||
DD |
亮度和顏色分量值的位深度;允許的值為 8、10 和 12。 | ||||||||||||||||||||||||||||||||||
CC |
一個兩位數的值,指示要使用的色度子取樣格式。下表列出了允許的值;有關此主題和其他主題的更多資訊,請參閱我們“數字影片概念”指南中的 色度子取樣。
|
||||||||||||||||||||||||||||||||||
cp |
一個兩位數的整數,指定 ISO/IEC 23001-8:2016 標準第 8.1 節中的顏色原色中的哪一個。此元件以及之後的每個元件都是可選的。 顏色原色元件的可能值為
|
||||||||||||||||||||||||||||||||||
tc |
一個兩位數的整數,指示影片的 transferCharacteristics。此值來自 ISO/IEC 23001-8:2016 的第 8.2 節,並指示在將解碼後的顏色適配到渲染目標時要使用的傳輸特性。 |
||||||||||||||||||||||||||||||||||
mc |
matrixCoefficients 屬性的兩位數的值。此值來自 ISO/IEC 23001-8:2016 規範第 8.3 節中的表格。此值指示在從本機紅、藍和綠原色對映到亮度和色度訊號時要使用哪組係數。這些係數反過來與該部分中找到的方程一起使用。 |
||||||||||||||||||||||||||||||||||
FF |
指示是否將每個顏色分量的黑電平和顏色範圍限制在合法範圍內。對於 8 位顏色樣本,合法範圍是 16-235。值為 00 表示應強制執行這些限制,而值為 01 則允許每個分量的全部可能的取值範圍,即使結果顏色超出顏色系統的範圍。 |
示例
video/webm;codecs="vp09.02.10.10.01.09.16.09.01,opus"-
VP9 影片,配置檔案 2 級別 1.0,具有使用 4:2:0 色度子取樣、BT.2020 原色、ST 2084 EOTF(HDR SMPTE)、BT.2020 非恆定亮度顏色矩陣和全範圍色度和亮度編碼的 10 位 YUV 內容。音訊採用 Opus 格式。
ISO 基本媒體檔案格式:MP4、QuickTime 和 3GP
基於 ISO 基本媒體檔案格式 (ISO BMFF) 的所有媒體型別都共享相同的 codecs 引數語法。這些媒體型別包括 MPEG-4(實際上,MPEG-4 所基於的 QuickTime 檔案格式)以及 3GP。可以使用以下 MIME 型別使用 codecs 引數描述影片和音訊軌道
| MIME 型別 | 描述 |
|---|---|
audio/3gpp |
3GP 音訊 (RFC 3839:第 3 代合作伙伴計劃 (3GP) 多媒體檔案的 MIME 型別註冊) |
video/3gpp |
3GP 影片 (RFC 3839:第 3 代合作伙伴計劃 (3GP) 多媒體檔案的 MIME 型別註冊) |
audio/3gp2 |
3GP2 音訊 (RFC 4393:3GPP2 多媒體檔案的 MIME 型別註冊) |
video/3gp2 |
3GP2 影片 (RFC 4393:3GPP2 多媒體檔案的 MIME 型別註冊) |
audio/mp4 |
MP4 音訊 (RFC 4337:MPEG-4 的 MIME 型別註冊) |
video/mp4 |
MP4 影片 (RFC 4337:MPEG-4 的 MIME 型別註冊) |
application/mp4 |
封裝在 MPEG-4 中的非視聽媒體 |
由 codecs 引數描述的每個編解碼器都可以指定為容器的名稱(3gp、mp4、quicktime 等)或容器名稱加上其他引數以指定編解碼器及其配置。編解碼器列表中的每個條目可以包含一些元件,用句點 (.) 分隔。
codecs 值的語法因編解碼器而異;但是,它始終以編解碼器的四字元識別符號、句點分隔符 (.) 開頭,後跟特定資料格式的物件型別指示 (OTI) 值。對於大多數編解碼器,OTI 是一個兩位數的十六進位制數;但是,對於 AVC (H.264),它是六位十六進位制數字。
因此,每個支援的編解碼器的語法如下所示
cccc[.pp]*(通用 ISO BMFF)-
其中
cccc是編解碼器的四字元 ID,pp是零個或多個兩位數編碼的屬性值所在的位置。 mp4a.oo[.A](MPEG-4 音訊)-
其中
oo是更精確地描述媒體內容的物件型別指示值,A是一位數的音訊 OTI。OTI 的可能值可以在 MP4 註冊機構網站的 物件型別頁面 上找到。例如,MP4 檔案中的 Opus 音訊為mp4a.ad。有關更多詳細資訊,請參閱 MPEG-4 音訊。 mp4v.oo[.V](MPEG-4 影片)-
在這裡,
oo再次是更精確地描述內容的 OTI,而V是一位數的影片 OTI。 avc1[.PPCCLL](AVC 影片)-
PPCCLL是六位十六進位制數字,指定配置檔案編號 (PP)、約束集標誌 (CC) 和級別 (LL)。有關PP的可能值,請參閱 AVC 配置檔案。約束集標誌位元組由一位布林標誌組成,最高有效位稱為標誌 0(或某些資源中的
constraint_set0_flag),每個後續位編號都高一位。目前,僅使用標誌 0 到 2;其他五位必須為零。標誌的含義取決於使用的配置檔案。級別是一個定點數,因此值為
14(十進位制 20)表示級別 2.0,而值為3D(十進位制 61)表示級別 6.1。一般來說,級別編號越高,流使用的頻寬就越多,支援的最大影片尺寸也越高。
AVC 配置檔案
以下是 AVC 配置檔案及其在 codecs 引數中使用的配置檔案編號,以及約束元件 CC 的指定值。
| 配置檔案 | 編號(十六進位制) | 約束位元組 |
|---|---|---|
| **受約束的基線配置檔案 (CBP)** CBP 主要是針對資源受限或需要控制資源使用以最大程度降低媒體效能不佳的可能性的場景的解決方案。 | 42 |
40 |
| **基線配置檔案 (BP)** 與 CBP 類似,但具有更多資料丟失保護和恢復功能。這不像 CBP 引入之前那樣廣泛使用。所有 CBP 流也被視為 BP 流。 | 42 |
00 |
| **擴充套件配置檔案 (XP)** 旨在透過網路流式傳輸影片,具有高壓縮能力以及對資料魯棒性和流切換的進一步改進。 | 58 |
00 |
| **主配置檔案 (MP)** 用於以 MPEG-4 格式廣播的標準清晰度數字電視的配置檔案。不用於高畫質電視廣播。自 2004 年為 HDTV 使用添加了高階配置檔案以來,該配置檔案的重要性已經下降。 | 4D |
00 |
| **高階配置檔案 (HiP)** 目前,HiP 是廣播和基於磁碟的 HD 影片的主要配置檔案;它用於 HD 電視廣播和藍光影片。 | 64 |
00 |
| 高階漸進編碼(PHiP) 本質上是高階編碼,但不支援欄位編碼。 | 64 |
08 |
| 受限高階編碼 PHiP,但不支援雙向預測切片(“B 切片”)。 | 64 |
0C |
| 高階 10 編碼(Hi10P) 高階編碼,但支援每個顏色分量最多 10 位。 | 6E |
00 |
| 高階 4:2:2 編碼(Hi422P) 在 Hi10P 的基礎上擴充套件,增加了對 4:2:2 色度下采樣的支援,以及每個顏色分量最多 10 位。 | 7A |
00 |
| 高階 4:4:4 預測編碼(Hi444PP) 除了 Hi422P 中包含的功能外,Hi444PP 還增加了對 4:4:4 色度下采樣的支援(其中不丟棄任何顏色資訊)。還包括對每個顏色樣本最多 14 位的支援以及高效的無損區域編碼。可以選擇將每個幀編碼為三個獨立的顏色平面(也就是說,每個顏色的資料都儲存為單色幀)。 | F4 |
00 |
| 高階 10 內部編碼 高階編碼,限制為全幀內使用。主要用於專業應用。 | 6E |
10 |
| 高階 4:2:2 內部編碼 Hi422 編碼,限制為全幀內使用。 | 7A |
10 |
| 高階 4:4:4 內部編碼 高階 4:4:4 編碼,限制為僅使用幀內幀。 | F4 |
10 |
| CAVLC 4:4:4 內部編碼 高階 4:4:4 編碼,限制為全幀內使用,並且僅使用 CAVLC 熵編碼。 | 44 |
00 |
| 可擴充套件基線編碼 旨在用於視訊會議以及監控和移動用途,SVC 基線編碼基於 AVC 的受限基線編碼。流中的基層以高質量提供,還有一些次級子流提供了相同影片的替代形式,可在各種受限環境中使用。這些可能包括任何組合的降低解析度、降低幀率或提高壓縮級別。 | 53 |
00 |
| 可擴充套件受限基線編碼 主要用於即時通訊應用。WebRTC 尚未支援,但 WebRTC API 的擴充套件 以允許 SVC 正在開發中。 | 53 |
04 |
| 可擴充套件高階編碼 主要用於廣播和流媒體應用。基層(或最高質量層)必須符合 AVC 高階編碼。 | 56 |
00 |
| 可擴充套件受限高階編碼 可擴充套件高階編碼的一個子集,主要設計用於即時通訊。 | 56 |
04 |
| 可擴充套件高階內部編碼 主要僅對生產應用有用,此編碼僅支援全幀內使用。 | 56 |
20 |
| 立體高階編碼 立體高階編碼使用場景的兩個渲染(左眼和右眼)提供立體影片。否則,提供與高階編碼相同的功能。 | 80 |
00 |
| 多檢視高階編碼 支援使用時間和 MVC 檢視間預測的兩個或多個檢視。不支援欄位影像或宏塊自適應幀場編碼。 | 76 |
00 |
| 多檢視深度高階編碼 基於高階編碼,主子流必須遵守該編碼。其餘子流必須與立體高階編碼匹配。 | 8A |
00 |
MPEG-4 音訊
當 codecs 列表中條目的值以 mp4a 開頭時,該值的語法應為
mp4a.oo[.A]
此處,oo 是兩位十六進位制物件型別指示,它指定用於媒體的編解碼器類。OTI 由 MP4 註冊機構 分配,該機構維護著 可能的 OTI 值列表。一個特殊的值是 40;這表示媒體為 MPEG-4 音訊(ISO/IEC 14496 第 3 部分)。為了更具體,對於 OTI 40,添加了第三個元件——音訊物件型別,以將型別縮小到 MPEG-4 的特定子型別。
音訊物件型別指定為一位或兩位十進位制值(與 codecs 引數中的大多數其他值不同,後者使用十六進位制)。例如,MPEG-4 的 AAC-LC 的音訊物件型別號為 2,因此表示 AAC-LC 的完整 codecs 值為 mp4a.40.2。
因此,ER AAC LC(其音訊物件型別為 17)可以使用完整 codecs 值 mp4a.40.17 表示。一位值可以作為一位給出(這是最佳選擇,因為相容性最廣),也可以用前導零將其填充到兩位,例如 mp4a.40.02。
注意:規範最初規定第三個元件中的音訊物件型別號只能是一位十進位制數字。但是,隨著時間的推移,規範的修訂將這些值的範圍擴充套件到遠遠超過一位十進位制數字,因此現在第三個引數可以是一位或兩位數字。用前導 0 填充小於 10 的值是可選的。但是,舊版本的 MPEG-4 編解碼器可能不支援兩位值,因此在可能的情況下使用一位數字將最大程度地提高相容性。
音訊物件型別在 ISO/IEC 14496-3 第 1 部分第 1.5.1 節中定義。下表提供了音訊物件型別的基本列表,並且在更常見物件型別的情況下,提供了支援它的配置檔案列表,但如果您需要了解任何給定 MPEG-4 音訊型別的內部工作原理的更多資訊,則應參考規範。
| ID | 音訊物件型別 | 配置檔案支援 |
|---|---|---|
0 |
NULL | |
1 |
AAC 主 | 主 |
2 |
AAC LC(低複雜度) | 主、可擴充套件、HQ、LD v2、AAC、HE-AAC、HE-AAC v2 |
3 |
AAC SSR(可擴展采樣率) | 主 |
4 |
AAC LTP(長期預測) | 主、可擴充套件、HQ |
5 |
SBR(頻譜帶複製) | HE-AAC、HE-AAC v2 |
6 |
AAC 可擴充套件 | 主、可擴充套件、HQ |
7 |
TwinVQ(超低位元率編碼) | 主、可擴充套件 |
8 |
CELP(碼激勵線性預測) | 主、可擴充套件、語音、HQ、LD |
9 |
HVXC(諧波向量激勵編碼) | 主、可擴充套件、語音、LD |
10 – 11 |
保留 | |
12 |
TTSI(文字到語音介面) | 主、可擴充套件、語音、合成、LD |
13 |
主合成 | 主、合成 |
14 |
波表合成 | |
15 |
通用 MIDI | |
16 |
演算法合成和音訊效果 | |
17 |
ER AAC LC(抗誤差 AAC 低複雜度) | HQ、移動互聯 |
18 |
保留 | |
19 |
ER AAC LTP(抗誤差 AAC 長期預測) | HQ |
20 |
ER AAC 可擴充套件(抗誤差 AAC 可擴充套件) | 移動互聯 |
21 |
ER TwinVQ(抗誤差 TwinVQ) | 移動互聯 |
22 |
ER BSAC(抗誤差位切片算術編碼) | 移動互聯 |
23 |
ER AAC LD(抗誤差 AAC 低延遲;用於雙向通訊) | LD、移動互聯 |
24 |
ER CELP(抗誤差碼激勵線性預測) | HQ、LD |
25 |
ER HVXC(抗誤差諧波向量激勵編碼) | LD |
26 |
ER HILN(抗誤差諧波和單個線加噪聲) | |
27 |
ER 引數化(抗誤差引數化) | |
28 |
SSC(正弦編碼) | |
29 |
PS(引數立體聲) | HE-AAC v2 |
30 |
MPEG 環繞聲 | |
31 |
轉義 | |
32 |
MPEG-1 第 1 層 | |
33 |
MPEG-1 第 2 層(MP2) | |
34 |
MPEG-1 第 3 層(MP3) | |
35 |
DST(直接流傳輸) | |
36 |
ALS(音訊無損) | |
37 |
SLS(可擴充套件無損) | |
38 |
SLS 非核心(可擴充套件無損非核心) | |
39 |
ER AAC ELD(抗誤差 AAC 增強低延遲) | |
40 |
SMR 簡單(符號音樂表示簡單) | |
41 |
SMR 主(符號音樂表示主) | |
42 |
保留 | |
43 |
SAOC(空間音訊物件編碼) |
|
44 |
LD MPEG 環繞聲(低延遲 MPEG 環繞聲) |
|
45 及以上 |
保留 |
WebM
WebM codecs 引數的基本形式是列出四個 WebM 編解碼器中的一個或多個,並用逗號分隔。下表顯示了一些示例
| MIME 型別 | 描述 |
|---|---|
video/webm;codecs="vp8" |
包含 VP8 影片的 WebM 影片;未指定音訊。 |
video/webm;codecs="vp9" |
包含 VP9 影片的 WebM 影片。 |
audio/webm;codecs="vorbis" |
WebM 容器中的 Vorbis 音訊。 |
audio/webm;codecs="opus" |
WebM 容器中的 Opus 音訊。 |
video/webm;codecs="vp8,vorbis" |
包含 VP8 影片和 Vorbis 音訊的 WebM 容器。 |
video/webm;codecs="vp9,opus" |
包含 VP9 影片和 Opus 音訊的 WebM 容器。 |
字串 vp8.0 和 vp9.0 也有效,但不建議使用。
使用 codecs 引數
您可以在幾種情況下使用 codecs 引數。首先,您可以在建立 <audio> 或 <video> 元素時,將其與 <source> 元素一起使用,以便為瀏覽器建立一組選項,以便在選擇要呈現給元素中使用者的媒體格式時進行選擇。
您還可以在將 MIME 媒體型別指定給 MediaSource.isTypeSupported() 方法時使用 codecs 引數;此方法返回一個布林值,指示媒體是否可能在當前裝置上工作。