###前提・実現したいこと
phpでmysqlに保存されている動画(mp4)をselectしてクライアントにレスポンスして、html5のvideoタグで再生するような仕組をつくっています。
httpでは上手くいくのですが、httpsだと再生できません。なおサーバー証明書はCAより取得したものを使っています。また対象のクライアントはiPhoneです。
###該当のソースコード
php7
selectの実行
selectした動画ファイルをWEBサーバの一時的なディレクトリに保存
$filePath = 一時的なディレクトリの動画のパス;
$fileSize = filesize( $filePath );
$contentLength = $fileSize;
$contentPointer = fopen($filePath, "rb");
if ( empty($_SERVER["HTTP_RANGE"]) ) {
header("Accept-Ranges: bytes");
header("Content-Type: video/mp4");
header("Content-Length: " .$contentLength);
header("Etag: "" .md5( $_SERVER["REQUEST_URI"] ) .$fileSize .""" );
} else if ( isset($_SERVER["HTTP_RANGE"]) ) {
list($rangeOffset, $rangeLimit) = sscanf($_SERVER['HTTP_RANGE'], "bytes=%d-%d");
header("HTTP/1.1 206 Partial Content");
header("Accept-Ranges: bytes");
header("Content-Type: video/mp4");
$contentRange = sprintf("bytes %d-%d/%d", $rangeOffset, $rangeLimit, $fileSize);
header("Content-Range: " .$contentRange);
$contentLength = $rangeLimit - $rangeOffset + 1;
header("Content-Length: " .$contentLength);
header("Etag: "" .md5( $_SERVER["REQUEST_URI"] ) .$fileSize .""" );
fseek($contentPointer, $rangeOffset);
}
$buffer = fread($contentPointer, $contentLength);
echo $buffer;
fclose($contentPointer);
一時的なディレクトリに保存した動画ファイルの削除;
exit;
回答1件
あなたの回答
tips
プレビュー