PHPを用いてiOSの端末向けに大容量(300~600MB程度)動画ファイルを観れるようにしたいです。
・ファイル格納場所を秘匿したい。
・認証のあるサイト内で会員のみ再生させたい。
・メモリは128MB迄
上記の様な要件からPHPで動画ファイルを読出して表示するコードを書いたのですが、メモリサイズを超えるファイルを再生できません。
(数十MB程度のファイルでは問題なく再生できます)
$_SERVER["HTTP_RANGE"]で細かくロードされると思っていたのですが、$_SERVER["HTTP_RANGE"]のログを取ったところ、動画の全容量がリクエストされてしまうようでメモリが足りなくなってしまっているようです。
$_SERVER["HTTP_RANGE"]でリクエストされるレンジを数十MB程度等制御できるればと思い調べましたが、
見つける事が出来ませんでした、何か解決する方法ございますでしょうか。
bytes=0-1
bytes=0-265650875
bytes=632850-265650875
bytes=34734080-265650875
bytes=37224448-265650875
現在のソースコード
$fp = fopen(動画のパス, "r"); $etag = md5($_SERVER["REQUEST_URI"]).$size; if(isset($_SERVER["HTTP_RANGE"]) && $_SERVER["HTTP_RANGE"]){ header("Accept-Ranges: bytes"); list($start,$end) = sscanf($_SERVER["HTTP_RANGE"],"bytes=%d-%d"); if(empty($end)) $end = $start + 1000000 - 1; if($end>=($size-1)) $end = $size - 1; header("HTTP/1.1 206 Partial Content"); header("Content-Range: bytes {$start}-{$end}/{$size}"); $size = $end - $start + 1; fseek($fp,$start); header("Content-Type: video/mp4"); header("Content-Length: {$size}"); header("Etag: \"{$etag}\""); header("Connection: close\r\n"); echo fread($fp,$size); }else{ header("Accept-Ranges: bytes"); header("Content-Type: video/mp4"); header("Etag: \"{$etag}\""); } fclose($fp); exit;
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/23 06:23