假设我在远程服务器上有一个视频这是url
" http://domain/video-path/video.mp4 "
什么是正确的方式来流这个视频使用php与能力移动视频向后或向前…
我知道如何使用fopen
和fread
功能流视频,但我想播放器(html5播放器)缓存视频,以便客户端可以向前或向后移动。谢谢,对不起,我的英语不好。
不知道你是否能在PHP中按照你描述的方式做到这一点。
假设我们有这样的HTML:
<video width="320" height="240" controls>
<source src="playmymovie.php?url=http://domain/video-path/video.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
所以现在我们必须制作一个PHP页面来处理这个(参见使用PHP输出mp4视频):
<?php
$vid_url = isset($_GET['url'])?$_GET['url']:"";
if(empty($vid_url)){
// trigger 404
header("HTTP/1.0 404 Not Found");
} else {
// Get Video
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $vid_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$out = curl_exec($ch);
curl_close($ch);
// Set header for mp4
header('Content-type: video/mp4');
header('Content-type: video/mpeg');
header('Content-disposition: inline');
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($out));
// Pass video data
echo $out;
}
exit();
?>
如果是我,我会先测试URL,确保你得到一个200的状态,然后再试图把它传递出去。您还可以触发正确的状态,以便浏览器知道发生了什么,并可以提醒用户(或您)。
非常晚的回答
$remoteFile = 'blabla.com/video5GB.mp4';
play($remoteFile);
function play($url){
ini_set('memory_limit', '1024M');
set_time_limit(3600);
ob_start();
if (isset($_SERVER['HTTP_RANGE'])) $opts['http']['header'] = "Range: " . $_SERVER['HTTP_RANGE'];
$opts['http']['method'] = "HEAD";
$conh = stream_context_create($opts);
$opts['http']['method'] = "GET";
$cong = stream_context_create($opts);
$out[] = file_get_contents($url, false, $conh);
$out[] = $httap_response_header;
ob_end_clean();
array_map("header", $http_response_header);
readfile($url, false, $cong);
}