【发布时间】:2018-05-20 15:24:37
【问题描述】:
我正在制作一个代码,通过FFMPEG 下载m3u8 链接列表
我有这个代码:
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。
【问题讨论】: