mp4のプログレッシブダウンロード
mp4をrangeリクエストをして、細切れにもらえる。 videoタグは、rangeリクエストを勝手にしくれるらしい。 リクエストヘッダに、 Range: bytes=18832832- とういのがついている。 188xxx移行全部くださいということらしい。 下記PHPでは、全部と言われても1000しか上げないので、 結局大変細かいやり取りが続き、ローカルで試してもいっこうに再生が始まらなかった。 下記の部分は、参考サイトのように、1000000bytes(1MB)とかにしないといけない。
if (empty($end)) $end = $start + 1000 - 1;index.html
<html><head> <tiltle>PHP MP4 PROGRESSIVE</tiltle></head><body><h1>PHP MP4 PROGRESSIVE</h1><video controls> <source src="http://localhost:8001/php-mp4-progressive/mp4.php" type="video/mp4"> <p>Sorry...</p></video></body></html>mp4.php
<?php$file = './sample.mp4';$size = filesize($file);$fp = fopen($file, 'rb');
if ($_SERVER['HTTP_RANGE']) { [$start, $end] = sscanf($_SERVER['HTTP_RANGE'], 'bytes=%d-%d'); if (empty($end)) $end = $start + 1000 - 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('Accept-Ranges: bytes');header('Content-Type: video/mp4');header("Content-Length: {$size}");
if ($size) echo fread($fp, $size);fclose($fp);参考サイトの真似ですがとりあえず出来ました。
参考:
https://aruo.net/arbk/blog/article/techclip_how2make_mp4_video_file_for_progressive_download_with_ffmpeg_or_mp4box — aruo.net
https://qiita.com/kyorohiro/items/ade0147849dd3d6f0f9c — qiita.com
https://www.systemexpress.co.jp/php/mp4.html — www.systemexpress.co.jp
https://developer.mozilla.org/ja/docs/Web/HTTP/Range_requests — developer.mozilla.org