CORS の失敗を認識する方法
| チェック | 症状 | 意味 |
|---|---|---|
| マニフェストがブロックされました | .m3u8 リクエストは再生が開始される前に失敗します。 | オリジンには Access-Control-Allow-Origin が必要、またはプレーヤーにはプロキシが必要です。 |
| キーがブロックされました | マニフェストはロードされますが、暗号化された再生は失敗します。 | AES-128 キー URL は、CORS または同じプロキシを介したルーティングも許可する必要があります。 |
| ブロックされたセグメント | 再生が開始されますが、バッファリングまたは停止します。 | すべての .ts または .m4s セグメント リクエストには、同じ CORS パスが必要です。 |
| VLC は動作しますが、ブラウザは失敗します | デスクトップ再生は機能しますが、Web 再生は機能しません。 | これは通常、ストリームの破損ではなく、ブラウザの CORS の問題を確認します。 |
| プリフライトが失敗する | カスタム ヘッダーは、オリジンが拒否する OPTIONS リクエストをトリガーします。 | 不要なヘッダーを避けるか、OPTIONS を処理するようにプロキシ/オリジンを構成します。 |
HLS CORS エラーを修正またはテストする方法
- 1
マニフェストが読み込まれるかどうかを確認する
M3U8 URL を開くか、プレーヤーに貼り付けます。マニフェスト要求が CORS によってブロックされている場合、再生を開始することさえできません。
- 2
VLCと比較してください
VLC が同じ URL を再生できるのにブラウザが再生できない場合、ストリームはおそらく到達可能であり、エラーはブラウザのアクセス制御にあります。
- 3
スマート CORS プロキシを有効にする
プロキシをオンにすると、マニフェスト、暗号化キー、メディア セグメントはすべて、ブラウザーが読み取ることができる応答を通じて送信されます。
- 4
ヘルスレポートを実行する
プロキシ経由でバリデータを使用して、セグメントが CORS によってブロックされているだけでなく、実際に生きているかどうかを確認します。
- 5
必要な場合にのみ Referer を追加します
オリジナルでホットリンク保護を使用している場合は、オリジナル ページ URL を Referer に設定します。オリジンで必要な場合を除き、カスタム ヘッダーを追加しないでください。
HLS が複数の URL で CORS を必要とする理由
HLS プレーヤーは 1 つのファイルだけをフェッチするわけではありません。マスター マニフェスト、1 つ以上のメディア プレイリスト、AES-128 ストリームの暗号化キー、および多くのセグメント URL を取得します。これらのリソースのいずれかで CORS ヘッダーが 1 つ欠落していると、再生が中断される可能性があるため、最初の .m3u8 応答だけをテストするだけでは十分ではありません。
Access-Control-Allow-Origin がすべきこと
パブリック ストリームの場合、オリジンはプレーヤーをホストしているサイトに Access-Control-Allow-Origin を送信したり、資格情報が関係しない場合はワイルドカードを使用したりできます。プライベート ストリームの場合は、オリジンをロックダウンしたままにし、テストには制御されたプロキシ エンドポイントを使用します。同じ HLS セッション内で直接の URL とプロキシされた URL を混在させないでください。
プロキシがデバッグに役立つ理由
プロキシを使用すると、ブラウザは許可された独自のオリジンから HLS アセットをリクエストできるようになり、プロキシは実際のマニフェスト、キー、およびセグメント URL をフェッチします。これにより、ストリームが破損しているのか、それとも単にブラウザのポリシーによってブロックされているのかを判断できるようになります。また、オリジンで必要な場合に Referer または User-Agent を追加する場所も 1 つ提供されます。
関連するストリーム デバッグ ツール
- M3U8 リンクのトラブルシューティング CORS、Referer、デッド セグメント、コーデック制限、および DRM について説明します。
- カスタム Referer M3U8 プレーヤー ヘッダーの転送が必要な、ホットリンクで保護されたストリームについて説明します。
よくある質問
HLS CORS エラーの原因は何ですか?
HLS CORS エラーは、オリジンがクロスオリジン アクセスを許可していないためにブラウザが M3U8 マニフェスト、暗号化キー、またはメディア セグメントを読み取れない場合に発生します。 CORS はブラウザによって強制されるため、VLC は引き続きストリームを再生できます。
私の M3U8 ストリームは VLC では再生されるのに、Chrome では再生されないのはなぜですか?
VLC はブラウザの CORS チェックによって制限されません。 VLC が機能し、Chrome が失敗した場合、通常はストリームに到達できますが、ブラウザは CORS ヘッダーまたはプロキシなしで 1 つ以上の HLS リクエストを読み取ることができません。
CORS プロキシは M3U8 の再生を修正できますか?
はい、テストとデバッグ用です。プロキシは、マニフェスト、メディア プレイリスト、キー、セグメントをルーティングし、すべての HLS リクエストがブラウザーが読み取りを許可されているオリジンから送信されるようにする必要があります。
HLS セグメントには CORS ヘッダーが必要ですか?
はい。マニフェスト、子プレイリスト、キー、およびすべてのメディア セグメントはブラウザーで読み取れる必要があります。最上位の .m3u8 ファイルに正しい CORS ヘッダーがある場合でも、ストリームが失敗する可能性があります。
これはホットリンク保護と同じですか?
いいえ。CORS はブラウザのアクセス ルールです。ホットリンク保護は、特定の Referer または User-Agent を必要とするオリジン ルールです。一部のストリームには両方の問題があるため、プロキシと一致する Referer が必要になる場合があります。