php ffmpeg exec & shell_exec 进程在几秒后停止

标签 php shell ffmpeg exec

我正在使用带有简单 html 界面的 PHP 脚本文件来控制 FFMPEG 进程从浏览器启动和停止,脚本目标是在我的服务器上开始实时流式传输,通常会连续运行数小时(使用 ffmpeg 和 nginx-rtmp) 我的脚本运行良好,直到我最近注意到这是奇怪的行为 这是我的 php 脚本变量

$cast =" /usr/sbin/ffmpeg -loglevel 0 -thread_queue_size 32768 -re -i '".$src."' -i /var/www/example/logo.png -r 23.976 -strict -2 480x360 -aspect 16:9 -filter_complex 'overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)-23' -vcodec libx264 -x264opts colormatrix=bt709 -profile:v high444 4 -b:v 290k -maxrate 290k -bufsize 250k  -af "aresample=async=1:min_hard_comp=0.100000:first_pts=0" -acodec libfdk_aac -profile:a aac_he_v2 -b:a 16k -map_metadata -1 -f flv  rtmp://localhost/hls/live 2>/dev/null >/dev/null  & " ; 
$output =  shell_exec( $cast   )    ;

这就像 FFMPEG 进程一直持续到原始 php 进程(称为它)死掉,起初我认为这个问题与 sorce 或 ffmpeg 命令有关,但我在 sell 上测试了相同的命令并且它工作得很好。 我怀疑 STDIO 等没有正确重定向。即使当我从 shell 中执行相同的 php 脚本时,它也会在几秒钟后停止执行相同的操作。

=编辑=

即使我尝试从命令行运行 ffmpeg 并让它在后台运行,我也得到了同样的行为,进程在几秒钟后停止,只有当我等待它输出时 ffmpeg 才会继续运行.

这里是我的操作系统详细信息:-

DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"

最佳答案

好吧好吧,经过几天的尝试和调查,这个问题看起来主要问题出在 ffpmeg 上。由于未知的原因,我拒绝在未定义任何输出管道的情况下运行,我的猜测是输入 stram 不时丢失了一些帧。无论如何,这是我添加到 ffmpeg 命令末尾的内容

$cast ="< /dev/null /usr/sbin/ffmpeg -loglevel verbose -thread_queue_size 12768 -re -i \"$link/$chnl\" -r 23.976 -s 480x360  -vcodec libx264 -b:v $bitrate -minrate $bitrate -maxrate $bitrate -bufsize $bitrate -acodec aac -b:a 29k -map_metadata -1 -f flv rtmp://localhost/hls/live  </dev/null >/dev/null 2>/var/www/vlc10/ffmpeg.log & " ;
exec(   $cast   ) ; 

我必须重定向 ffmpeg像这样记录文件 </dev/null >/dev/null 2>/var/www/vlc10/ffmpeg.log &前夕ffmpeg有静音模式但它不会工作“或者至少在几秒钟后崩溃”。

关于php ffmpeg exec & shell_exec 进程在几秒后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58175049/

相关文章:

c# - 如何正确地将 PHP 和 CURL 帖子转换为 groupon API 的 C# HTTP 客户端帖子

python - 当我运行 setuptools .egg "as if it were a shell script"时,实际发生了什么?

mysql - 在 Shell 脚本中调用 MySQL 存储过程

ffmpeg - 如何使用 FFMPEG 在 0、5、10 秒时仅提取 3 个视频帧?

python - Pims.open 在一台机器上抛出 "UnkownFormat Error"和 "Invalid Argument"但不在另一台机器上

go - 如何使用 golang 和 FFmpeg 从视频中获取帧文件夹?

php - 通过 Composer 安装 Codeception 到 Yii2

php - 在 Laravel 4 中缓存 View 输出

php - 提交后如何重置表单?

bash - 剪切并替换 bash