来自远程服务器的php流文件

时间:2015-05-29 12:38:10

标签: php html5 video stream

我们说我在远程服务器上有一个视频及其网址

" groovy.util.ConfigObject"

使用php传输此视频的正确方法是什么,能够将视频向后移动或向前移动..

我知道如何使用freadMean功能来传输视频,但我想让播放器(html5播放器)缓存视频,以便客户端可以将其向前或向后移动..谢谢和抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

不知道您是否能够按照描述的方式在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页面(参见Using php to output an mp4 video):

<?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();
?>

如果是我,我会首先测试网址,确保你获得200状态,然后再尝试将其传回去。您还可以触发正确的状态,以便浏览器知道发生了什么,并可以提醒用户(或您)。

答案 1 :(得分:1)

答案很晚

$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);
}