Я делаю код, который загружает список m3u8
ссылок по FFMPEG
У меня был этот код:
function FFMPEG($videocode, $dirvideo) {
$ffmpeg = '"D:\FFMPEG\bin\ffmpeg.exe"' . " -hide_banner -loglevel verbose -n -i https://linkplaylist/{$videocode}.m3u8 -map 0:1 -map 0:2 -acodec copy -bsf:a aac_adtstoasc -vcodec copy {$dirvideo} 1> log.txt 2>&1";
exec($ffmpeg, $output, $var);
return $var;
}
$code = FFMPEG('football', 'football.mp4');
if($code){
{ERROR CODE};
}else{
{SUCCESS CODE}
}
Исходная проблема
Иэто сработало хорошо.Я мог бы загрузить видео и узнать, было ли оно загружено полностью или с какой-либо ошибкой.
Проблема заключается в том, что этот код «зависает» в сценарии exec (), загружаемой страницей, до завершения exec () и выполненияошибка тайм-аута (общий сервер), кроме того, что визуально странная для посетителя загрузка страницы.
Разрешение исходной проблемы
После исследования я думаю, что решение состоит в том, чтобы поместить выполнение кода в фоновом режиме, такЯ нашел этот код:
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "error-output.txt", "a") // stderr is a file to write to
);
function FFMPEG($videocode, $dirvideo) {
$cmd = 'start /B D:\FFMPEG\bin\ffmpeg.exe -y -i "https://linkplaylist/{$videocode}.m3u8" -map p:0 -acodec copy -bsf:a aac_adtstoasc -vcodec copy {$dirvideo}';
proc_close(proc_open ($cmd
,$descriptorspec, $foo));
}
И, наконец, моя текущая проблема
И это прекрасно работает для проблемы загрузки и тайм-аута, но я не могу получить возврат после успешного завершения загрузки.
1 ° proc_open Это лучшее решение для моей первоначальной проблемы?
2 ° Как получить возврат после успешного завершения ffmpeg и продолжения выполнения сценария.
Дополнительная информация
Я пытаюсь создать решение, которое работает на Windows (xampp), но мой последний сервер Linux.