Remotion LabRemotion Lab
疑難排解無法播放媒體(媒體播放錯誤)

無法播放媒體(媒體播放錯誤)

了解如何排查 Remotion 中的媒體播放錯誤,包括編解碼器不支援、404 找不到資源、無效來源、錯誤標頭等常見原因及解決方案。

無法以 src 播放影片/音訊

在開發或渲染期間,你的 Remotion 專案中可能會出現以下錯誤:

Error: Could not play video with src [source] [object MediaError]

Error: Could not play audio with src [source] [object MediaError]

當你嘗試在 Remotion 專案中嵌入 <Html5Video/><Html5Audio/> 標籤,但瀏覽器無法載入和播放媒體時,就會發生此錯誤。雖然瀏覽器不會回報確切的錯誤,但此錯誤有兩個常見原因。

Chrome 不支援的編解碼器

Chrome 不支援所有編解碼器的播放。例如:Linux 上的 HEVC、.avi.flv 等。請將影片轉換為 Chrome 支援的格式。

資源找不到(404)

如果資源返回 404 狀態碼,表示檔案可能無法正確提供。如果檔案在你的 public/ 資料夾中,你必須使用 staticFile() 來引用它。像 "/my-video.mp4" 這樣的純路徑不會有效,因為 Remotion 在特殊前綴下提供靜態檔案。

錯誤做法——使用純路徑

import { Html5Video } from 'remotion';
 
<Html5Video src="/my-video.mp4" />;

正確做法——使用 staticFile()

import { Html5Video, staticFile } from 'remotion';
 
<Html5Video src={staticFile('my-video.mp4')} />;

同時確認檔案確實存在於你的 public/ 資料夾中,且拼寫正確。

無效來源

確保你嘗試載入的影片在本地可用或在網際網路上公開可存取。開啟 DevTools,前往「Network」標籤,追蹤正在載入的資源,並在新分頁中開啟它。它真的開始播放了嗎?

錯誤的標頭或狀態碼

為了讓瀏覽器能夠播放媒體,應該以以下條件載入:

  • 200 狀態碼
  • 適當的 Content-Type 標頭
  • Content-Range 標頭以支援尋找

開啟 DevTools 並前往 network 標籤以驗證是否如此。

Internet Download Manager

Internet Download Manager 已知會操縱網路流量,導致瀏覽器載入媒體時出現問題。如果你已安裝,請停用它。

其他不支援的編解碼器

你可能正在匯入與 Chrome 完全不相容的影片,例如 FLV。

太多影片標籤

如果錯誤訊息包含 error creating media player,可能是因為建立了太多的影片標籤。首先檢查你是否意外建立了無限渲染迴圈。

例如,頻繁更改 key 會在每一幀重新建立影片標籤:

import { Html5Video } from 'remotion';
 
export default function SBSVideo() {
  return (
    <>
      {[
        'https://remotion.media/BigBuckBunny.mp4',
        'https://remotion.media/BigBuckBunny.mp4',
      ].map((video, i) => {
        return <Html5Video key={uuidv4()} src={video} />;
      })}
    </>
  );
}

如果你排除了這種可能性,請改用 <OffthreadVideo>,因為它不依賴 <video> 標籤。

從此錯誤中恢復 v3.3.89

你可以透過將 onError() prop 傳遞給 <Html5Video><OffthreadVideo> 元件來處理此錯誤並用不同的影片替換它。

import { Html5Video, staticFile } from 'remotion';
 
export const MyVideo = () => {
  return (
    <Html5Video
      src={staticFile('video.mp4')}
      onError={(e) => {
        console.error('影片載入失敗:', e);
        // 在此處理錯誤,例如顯示備用內容
      }}
    />
  );
};

另請參閱