是否可以使用Apache获得文件传输的速度?

时间:2018-10-28 23:12:53

标签: javascript apache xmlhttprequest 360-virtual-reality delightvr

我正在开发360度视频流应用。我目前正在通过Apache代理将S3的HLS片段传递给客户端,以解决iOS错误,在该错误中不检查CORS标头是否包含视频纹理。我想监视正在发送给用户的数据量,以便可以向用户提供有关他们何时可以开始视频播放的反馈。

假设用户加载了/video.php,这将对/video/video1.ts进行XHR调用,大小为20mb。是否可以在PHP或命令行中甚至通过IP地址匹配两个请求,以便将进度消息传递回用户?我希望能够说“下载的5mb / 20mb”,即使仍无法准确预测HLS播放何时开始。

据我所知,无法得知已取得多少进展或何时开始HLS播放-我使用的是Delight VR,但他们表示他们无法访问该数据从浏览器。

感谢任何想法!

1 个答案:

答案 0 :(得分:0)

看起来唯一的方法是使用PHP脚本代理文件并将进度存储在会话变量中。

这是https://coolcodings.wordpress.com/2014/08/27/track-file-downloading-progress-with-javascript/的一种方法的摘录

$file = @fopen("SET YOUR DOWNLOADING FILE PATH HERE","rb");
$fileSize = filesize("SET YOUR DOWNLOADING FILE PATH HERE");
$fileName = "SET FILE NAME";

header('Content-Type: SET YOUR MIME TYPE');
header("Content-Disposition: attachment; filename=".$fileName);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Length: '.$fileSize); 
while(!feof($file)) {
        echo fread($file, 1024*8);
        ob_flush();
        flush();     
        $downloadedBytes+= (1024 * 8);


        session_start();
        $_SESSION['current_file_downloaded_bytes'] = $downloadedBytes;
        session_commit();
}