M3U8 の一般的なエラーと解決策

M3U8 の再生、ダウンロード、変換失敗を診断するためのガイドです。

CORS クロスオリジンエラー

エラーメッセージ

Access to XMLHttpRequest at 'https://example.com/video.m3u8'
from origin 'https://yoursite.com' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.

解決策

1. サーバーで CORS ヘッダーを設定

M3U8 を読み込むドメインに Access-Control-Allow-Origin を許可します。

2. バックエンドプロキシを使う

ソースが CORS ヘッダーを出せない場合は自分のサーバー経由で取得します。

3. 同一オリジンに配置

ページ、playlist、segments、keys を同じ origin に置きます。

404 ファイル未検出

エラーメッセージ

GET https://example.com/segment-1.ts 404 (Not Found)
Failed to fetch segment #1 of "https://example.com/playlist.m3u8"

解決策

1. URL パスを確認

M3U8 内の TS または fMP4 セグメントパスが正しいか確認します。

2. ファイル存在を確認

セグメント URL を直接開き、サーバーが media file を返すか確認します。

3. ベース URL を確認

相対パスは実際の playlist 位置から解決される必要があります。

デコードまたは再生エラー

エラーメッセージ

MEDIA_ERR_DECODE: The media resource indicated by the src attribute
or assigned media provider object was not suitable.
DOMException: Failed to decode media resource

解決策

1. コーデックを確認

H.264 video と AAC audio などブラウザ対応 codec を使います。

2. M3U8 構文を検証

#EXTM3U や #EXTINF など必須タグを確認します。

3. HLS プレイヤーを使う

HLS.js など専用 player で互換性を高めます。

ネットワークタイムアウトまたは接続エラー

エラーメッセージ

NetworkError: Failed to fetch
ERR_CONNECTION_TIMED_OUT
Manifest request timed out

解決策

1. タイムアウトを延長

遅いネットワークでも playlist や segment が失敗扱いになるまで待ちます。

2. CDN 配信を使う

CDN で segments を配信して遅延と損失を減らします。

3. リトライを追加

一時的な playlist、segment、key request を再試行します。

暗号化コンテンツエラー

エラーメッセージ

KEY_LOAD_ERROR: Failed to load decryption key
KEY_SESSION_ERROR: Failed to generate license request
DECRYPT_ERROR: Failed to decrypt segment

解決策

1. キー URL を確認

#EXT-X-KEY の URI が到達可能で期待する key を返すか確認します。

2. キー形式を確認

AES-128 key は 16 bytes で、text encoding で壊れてはいけません。

3. キーに CORS を設定

key server は playback page からの browser request を許可する必要があります。

推奨デバッグツール

ブラウザ DevTools

Network リクエスト、レスポンスヘッダー、ステータスコード、Console エラーを確認します。

HLS.js Demo

既知の HLS プレイヤーで直接 M3U8 URL をテストします。

FFmpeg/FFprobe

コーデック、ストリームメタデータ、セグメント、コンテナを調べます。

オンライン M3U8 バリデーター

一般的な HLS 要件に対してプレイリスト構文を検証します。

便利なデバッグコマンド

動画コーデック情報を確認

ffprobe -v quiet -print_format json -show_streams video.m3u8

M3U8 URL の到達性をテスト

curl -I https://example.com/video.m3u8

M3U8 をダウンロードして結合

ffmpeg -i "https://example.com/video.m3u8" -c copy output.mp4