M3U8のCORSエラーがブラウザでの再生・変換を妨げる理由
ブラウザのページがプレイリストを読めるのは、メディアホストがそのページのオリジンを許可している場合だけです。プレイリスト、子プレイリスト、暗号鍵、初期化マップ、そしてすべてのメディアセグメントのそれぞれが、クロスオリジンレスポンスの成功を必要とします。
新しいタブでURLを開けば、サーバーがバイトを返せることは分かりますが、別オリジンのJavaScriptがそれを読み取れることまでは証明されません。VLC、FFmpeg、ネイティブアプリは、ブラウザの同一オリジンポリシーを同じようには強制しません。
ストリームの管理者がM3U8のCORSレスポンスヘッダーを修正する方法
CDNやオブジェクトストレージを設定し、Webアプリのオリジンに対してAccess-Control-Allow-Originを返し、GETとHEADを許可し、レンジリクエストを使う場合はContent-LengthとContent-Rangeを公開し、カスタムヘッダーがプリフライトを引き起こす場合はOPTIONSリクエストが成功するようにしてください。
最終的なセグメントレスポンスだけでなくリダイレクトも確認してください。正しく設定されたマスタープレイリストでも、子プレイリストやセグメントのホストがCORSヘッダーを欠くと失敗することがあります。
- マスタープレイリストと1つのメディアセグメントをテストする
- リダイレクトレスポンスを確認する
- EXT-X-BYTERANGE使用時はレンジリクエストを検証する
このM3U8ツールが公開CORS回避プロキシを提供しない理由
汎用プロキシは非公開URLを露出させ、大量の帯域を消費し、デバッグツールを運営者が管理しないメディアの中継装置に変えてしまう恐れがあります。そのためM3U8toMP4.orgは、ブラウザとソースの間のデータ経路を直接のまま保っています。
ソースを所有している場合は、サーバー設定を修正してください。社内の非公開システムには、オープンなプロキシではなく、認証、URLの許可リスト、リクエスト制限、監査ログを備えた管理された同一オリジン中継を運用してください。