偵錯網路上的媒體播放錯誤

François Beaufort
François Beaufort

調試 HTML 媒體元素 (例如 <video><audio>) 可能很困難,因為解碼器實作會視情況判定錯誤 (硬體解碼器通常最嚴格),尤其是當播放內容可能使用特定編解碼器的較不尋常功能時。所幸,我們可以利用各種工具來協助調試。

在排解媒體播放錯誤時,我們通常會先檢查 HTML 媒體元素上的 MediaError error 屬性。這個屬性是媒體播放錯誤的概略提示。屬性 MediaError.code 會傳回數值,代表媒體元素中發生的錯誤類型。其他資源 MediaError.message 可能會提供包含瀏覽器部分診斷資訊的字串。

const video = document.querySelector('video');
video.addEventListener('error', () => {
  console.log('Error code: ' + video.error.code);
  console.log('Error message: ' + video.error.message);
});

這些屬性最適合用於遙測分析,而且可能無法提供充足的資訊來排除播放錯誤。基於隱私考量,有時必須省略完整的錯誤文字。

如要存取完整的錯誤資訊,請使用 Chrome 開發人員工具「媒體面板」查看媒體記錄。您可以找到事件、警告和錯誤訊息等大量資訊,還能獲得關於媒體播放錯誤的實用提示。

Chrome 開發人員工具中的媒體面板螢幕截圖
Chrome 開發人員工具中的媒體面板。

您也可以使用 FFmpeg 免費應用程式,透過下列指令來檢查媒體檔案完整性

ffmpeg -err_detect explode -i <file> -f null -

以下是針對含有無效轉碼器的影片檔案,您可能會遇到的下列錯誤:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc62df05380] Could not find codec parameters for stream 0 (Video: none (zzzz / 0x7A7A7A7A), none(smpte170m/smpte170m/bt709, progressive), 320x240, 4 kb/s): unknown codec
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
[matroska,webm @ 0x7fd45b705380] Unknown EBML doctype '0000'
[matroska,webm @ 0x7f8d17904d40] Element at 0x8b ending at 0x10400000095 exceeds containing master element ending at 0x9b
Truncating packet of size 9069 to 94

MP4Box.js / ISOBMFF 方塊結構檢視器是對位元流問題進行偵錯的實用工具。但必須先瞭解 MP4 才能使用 MP4。

最後,某些影片串流分析專業工具 (例如 VQAnalyzerElecard StreamEyeCodecian CodecVisa) 也許還值得。