在本文中,您將瞭解媒體檔案的基本知識,例如容器的概念,以及一些可在串流中使用的轉碼器格式。此外,請稍微瞭解自動調整串流、位元率和解析度等主題,不過我們將在後續章節中進一步說明這些主題。
放送影片檔案
您可能會認為可以從攝影機擷取原始檔案,然後照原樣將其上傳至網路。事實上,YouTube 或 Vimeo 等影片串流網站就這麼簡單,甚至提供直播功能。一般來說,您必須連接相機的 HDMI 通訊埠,然後透過擷取卡處理檔案。這些服務大幅簡化影片的處理及上傳程序,包括產生自動調整串流和各種解析度所需的許多檔案和資訊清單。還有許多其他複雜且複雜的要求 使自我託管程序有些許繁瑣。如果您關心使用者的使用者體驗,從自己網站上準備及放送影片 (可能是另外的媒體伺服器) 會比只上傳原始相機檔案來得複雜。
影片檔案有多種格式。相機隨附的格式通常是 .mov
檔案;如果相機具備良好的現代無鏡鏡頭,則會是 .mp4
。不過,雖然 .mov
適合用於錄製,以及用於編輯和其他早期後製程序,但檔案大小表示不適合透過網路串流。此外,4K 格式的原始 .mp4
檔案大小,也會導致檔案在行動裝置上播放。由於瀏覽器支援不同的檔案格式,因此如果您打算支援自動調整串流,就需要建立多個最佳化檔案以及資訊清單。轉換檔案之前,您需要先瞭解檔案的幾項基本資訊及特性。
容器、轉碼器和串流
您在作業系統殼層中看到的檔案是「容器」,可透過副檔名 (.mp4
、.webm
、.ogg
等) 識別。容器存放一或多個「串流」。媒體檔案可包含任意數量的串流,這些格式比這裡說明的更多多。
本節稍後使用的範例檔案最多包含兩個串流:音訊串流和影片串流。在這篇文章中,您可能會遇到字幕和資料,這兩種資料都不在本文的討論範圍內。某些情況下,音訊和視訊串流會分開處理。您遇到的大多數檔案只會包含一個音訊串流和一個視訊串流。
在音訊和視訊串流中,實際資料會以轉碼器壓縮。「轉碼器」或轉碼器/解碼器是影片或音訊資料的壓縮格式。由於具有相同容器的檔案,其內容可以用不同的轉碼器進行編碼,因此容器和轉碼器之間的區別非常重要。
請參考下圖。左側是具有兩個串流的基本容器結構。右圖是單一 WebM 檔案結構的具體細節。
![比較媒體檔案結構與虛構媒體檔案。](https://web.dev/static/articles/media-file-basics/image/comparing-media-file-stru-58d7e1713333f.png?authuser=7&hl=zh-tw)
WebM 容器中的檔案可能比其他格式小很多,因此很適合行動版網站進行串流。很抱歉,並非所有瀏覽器都支援最新的容器和轉碼器。舉例來說,WebM 是專為網路打造的優質開放原始碼選項,但目前仍然提供支援。根據撰寫本文時的我可以使用,Safari 更不支援嵌入影片。不過,WebRTC 對 WebRTC 所用的 VP8 和 VP9 轉碼器提供部分支援。因此最佳做法是提供備用影片
轉碼器格式
許多檔案類型都支援在同一容器中使用多個轉碼器。可用的影片轉碼器和音訊轉碼器完整清單會是整個網站。上述連結只提供 MDN 實用的網路功能清單。 以下列出目前偏好的檔案類型和轉碼器。只要點選檔案類型連結,即可查看支援這些檔案類型的瀏覽器。
檔案類型 | 影片轉碼器 | 音訊轉碼器 |
---|---|---|
MP4 | AV1、AVC (H.264)*、VP9 | AAC |
WebM | AV1、VP9* | Vorbis、Opus |
* 表示偏好的影片轉碼器。
位元率和解析度
位元率是為直播進行一秒編碼時要採用的位元數量上限。用來為串流中的秒進行編碼的位元越多,可能的細節和擬真度越高。我們會在 Bitrate 中進一步說明這個概念。
「解析度」是指影片單一影格中的資訊量,以每個維度中的邏輯像素數量為準。我們會在「Resolution」中提供更多有關這個概念的資訊。
接下來,在媒體應用程式基本概念一節中,我們會說明如何使用 Shaka Packager 和 FFmpeg 這兩項指令列工具來檢查這些特性。