Можно ли получить скорость передачи файлов с помощью Apache? - PullRequest
0 голосов
/ 29 октября 2018

Я работаю над приложением потокового видео на 360 градусов.В настоящее время я передаю фрагменты HLS из S3 через Apache-прокси для клиента, чтобы обойти ошибку iOS, когда заголовки CORS не проверяются на наличие видео-текстур.Я хочу отслеживать, сколько данных отправляется пользователю, чтобы я мог предоставить пользователю обратную связь о том, когда он может ожидать начала воспроизведения видео.

Скажем, пользователь загружает /video.php, которыйделает XHR вызов /video/video1.ts, который составляет 20 МБ.Можно ли сопоставить два запроса в PHP или в командной строке, даже по IP-адресу, чтобы иметь возможность передавать сообщения о ходе выполнения обратно пользователю?Я хотел бы иметь возможность сказать «5 МБ / 20 МБ загружено» - даже если все еще не совсем возможно точно предсказать, когда начнется воспроизведение HLS.

Насколько я знаю, нет никакого способа сказать, какой прогресс был достигнут или когда начнется воспроизведение HLS - я использую Delight VR, но они сказали, что не получают никакого доступак этим данным из браузера.

Спасибо огромное за любые идеи!

1 Ответ

0 голосов
/ 30 октября 2018

Похоже, что единственный способ будет использовать сценарий 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();
}
...