この問題の解決策を探すのに何日も費やしましたが、何もうまくいきません。状況は次のとおりです。Cloudfront で多数のビデオをホストし、Web サイトを通じてそれらをストリーミングしています。(魔法のように機能します)
プレミアム メンバーは、一部の動画をダウンロードするオプションを提供する必要がありますが、実際の URL を表示することはできません。そのため、Cloudfront URL からビデオを読み取り、サーバーを介して渡す次のスクリプトをセットアップしました。これにより、その場所を効果的に隠します。
奇妙な点は次のとおりです。これは一部のビデオでは正常に機能しますが、他の (同じエンコーディングを使用する) ものは Apple の Quicktime プレーヤーで再生されず、形式が認識されないというメッセージが表示されます。VLC でファイルを開くと問題なく動作しますが、Apple の動作が不安定です。
当然、その URL からファイルを直接ダウンロードしようとしましたが、Quicktime で問題なく動作しました。また、ヘッダーは、直接ダウンロードと readfile パススルーの両方で同じです。
奇妙なことに、私が言ったように、解像度の低い他のビデオは、スクリプトを使用して問題なく動作します。ただし、解像度がこれに影響を与える理由は見つかりませんでした。他のすべては等しいです。ビデオは H.264 形式でエンコードされ、MP4 コンテナーに保存されます。
この問題を解決するために私ができることについて何か考えはありますか?
本当にありがとう
header('Content-Description: File Transfer');
header('Content-Type: video/mp4'); //tried multiple options here, none work
header('Content-Disposition: attachment; filename=asciifriendly-filename.mp4');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: 1234567890'); //this number IS correct. 100%
ob_clean();
flush();
readfile ( $url ); //points to Cloudfront server