Я кодирую файл со специальным водяным знаком для загрузки пользователем
Я хотел бы иметь возможность начать загрузку, когда ffmpeg кодирует файл.
У меня есть страница php, которая создает водяной знак, запускает ffmpeg и начинает загрузку с X-sendifle
Загрузка не начинается, добавив sleep (15), давайте начнем загрузку, только я получаю только то, что сделано
На самом деле я использую Apache2 в качестве веб-сервера с модом X-sendfile
Хорошо, я наконец-то нашел, как это сделать
Использование X-sendfile это неправильная идея
Использование mp4 — неправильная идея, потому что в конце кодировки программа перезаписывает 4 байта в начале файла.
Так что это код, который я использую, чтобы иметь возможность отправлять такие файлы, как файлы webm или flv, когда ffmpeg кодирует вывод
shell_exec('ffmpeg command');
sleep(2); //wait few second for the software start
$foutput ="where/is/your/output.file";
header('Content-Disposition: attachment; file.name.for.the.user"');
header("Keep-Alive:timeout=200, max=500");
//sending by chunk
set_time_limit(3600);
$file =fopen($foutput , 'r');
$files = fstat($file);
$filesize= $files['size'];
$last = 0;
echo fread($file , $filesize);
sleep(5); //wait a little for the software add new bytes
$last = $filesize;
$files = fstat($file);
$filesize= $files['size'];
$done =0;
while( $done < 2 ){
if ($filesize != $last){
fseek($file , $last);
$read = $filesize - $last ;
echo fread($file , $read);
$last =$filesize;
sleep(5);
$files = fstat($file);
$filesize= $files['size'];
}else{
fclose($file);
return 0;
};
};
Я новичок в программировании, и у меня проблема с «while», просто код работает очень хорошо, без проблем
Не используйте размер файла, эта команда не нравится, когда размер файла постоянно меняется, и в этом случае возвращается только 4096
Загрузка будет медленной, это нормально, вы получаете порцию за порцией, как программное обеспечение работает с ffmpeg, скорость передачи составляет от 200 до 1200 кбит / с.
Других решений пока нет …