為 Ogg 媒體配置伺服器
HTML 的 <audio> 和 <video> 元素允許無需使用者安裝擴充套件程式或其他軟體即可呈現媒體。本指南涵蓋了正確提供 Ogg 媒體檔案可能需要的伺服器配置。如果您遇到伺服器尚未配置為識別的其他媒體型別,這些資訊也可能很有用。
使用正確的 MIME 型別提供媒體
如果您不確定 Ogg 檔案包含音訊還是影片,您可以使用 application/ogg MIME 型別提供它,瀏覽器會將其視為影片檔案。
- 包含影片(當然也可能包含音訊軌道)的
*.ogg和*.ogv檔案應使用video/oggMIME 型別提供。 - 僅包含音訊的
*.oga和*.ogg檔案應使用audio/oggMIME 型別提供。
大多數伺服器預設不會使用正確的 MIME 型別提供 Ogg 媒體,因此您可能需要為此新增相應的配置。
對於 Apache,您可以將以下內容新增到您的配置中
AddType audio/ogg .oga
AddType video/ogg .ogv
AddType application/ogg .ogg
關於媒體容器格式的文章在正確配置伺服器託管媒體時特別有幫助。
正確處理範圍請求
為了支援在尚未下載的媒體區域進行跳轉和播放,您可以使用範圍請求從跳轉目標位置檢索媒體。此外,它使用位元組範圍請求跳轉到媒體末尾(假設您提供了Content-Length標頭)以確定媒體的時長。
如果您的伺服器可以接受範圍請求,它應該接受Accept-Ranges標頭。它必須為所有範圍請求返回206 Partial Content,否則瀏覽器無法確定伺服器是否支援範圍請求。您的伺服器還必須為請求 Range: bytes=0- 返回 206: Partial Content。
有關更多資訊,請參閱範圍請求。
包含常規關鍵幀
當瀏覽器跳轉 Ogg 媒體到指定時間時,它必須跳轉到目標之前的最近關鍵幀,然後從那裡下載並解碼影片直到請求的目標時間。關鍵幀之間的間隔越大,所需時間就越長,因此定期包含關鍵幀很有幫助。
預設情況下,ffmpeg2theora 每 64 幀使用一個關鍵幀(或在 30 幀/秒的情況下大約每 2 秒一個),效果相當不錯。
注意:當然,您使用的關鍵幀越多,影片檔案就越大,因此您可能需要進行一些實驗以在檔案大小和跳轉效能之間找到合適的平衡。
考慮使用 preload 屬性
HTML 的 <audio> 和 <video> 元素提供了 preload 屬性,它告訴瀏覽器在頁面載入時嘗試下載整個媒體。沒有 preload,瀏覽器只會下載足夠的媒體來顯示第一個影片幀並確定媒體的時長。
preload預設是關閉的,所以如果影片是您網頁的重點,您的使用者可能會很感激您在影片元素中包含preload。- 使用
preload="metadata"將預載入媒體檔案的元資料,可能還有影片的前幾幀。將payload設定為auto會告知瀏覽器在頁面載入後立即開始自動下載媒體,假設使用者會播放它。
不要對 Ogg 媒體使用 HTTP 壓縮
減少 Web 伺服器負載的一種常見方法是在向支援的 Web 瀏覽器提供服務時使用gzip 或 deflate 壓縮。
儘管不太可能,但當請求媒體檔案時,瀏覽器可能透過 Accept-Encoding: gzip,deflate 標頭宣告它支援 HTTP 壓縮(gzip/deflate)。您的伺服器不應該配置成這樣做。媒體檔案中的資料已經過壓縮,因此您不會獲得任何實際的壓縮收益,並且使用壓縮將導致瀏覽器無法正確跳轉影片或確定其時長。
允許 HTTP 壓縮排行媒體流式傳輸的另一個問題是:Apache 伺服器在使用 gzip 編碼時不會發送Content-Length響應標頭。
獲取 Ogg 媒體的時長
您可以使用 oggz-info 工具獲取媒體時長;此工具包含在 oggz-tools 包中。oggz-info 的輸出如下所示
$ oggz-info /g/media/bruce_vs_ironman.ogv
Content-Duration: 00:01:00.046
Skeleton: serialno 1976223438
4 packets in 3 pages, 1.3 packets/page, 27.508% Ogg overhead
Presentation-Time: 0.000
Basetime: 0.000
Theora: serialno 0170995062
1790 packets in 1068 pages, 1.7 packets/page, 1.049% Ogg overhead
Video-Framerate: 29.983 fps
Video-Width: 640
Video-Height: 360
Vorbis: serialno 0708996688
4531 packets in 167 pages, 27.1 packets/page, 1.408% Ogg overhead
Audio-Samplerate: 44100 Hz
Audio-Channels: 2
請注意,您不能直接使用 oggz-info 報告的 Content-Duration 行,因為它以 HH:MM:SS 格式報告。您需要將其轉換為秒,然後將該值作為 X-Content-Duration 值提供。您可以透過解析 HH、MM 和 SS 分段,然後將其轉換為 (HH * 3600) + (MM * 60) + SS 作為您應該報告的值來實現。
重要的是要注意,oggz-info 似乎會進行一次讀取過程來計算媒體時長,因此最好將時長值儲存起來,以避免在每次請求 Ogg 媒體的 HTTP 請求計算該值時出現長時間延遲。