Я использую файл сценария PHP с простым интерфейсом html для управления запуском и остановкой процесса 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 (который его вызывает) не умрет, сначала я подумал, что это проблема с командой source или ffmpeg, но я тестирую ту же команду на продажу, и она работает отлично. Я подозреваю, что на STDIO и т. Д. Не было перенаправлено правильно. даже когда я запускаю тот же php-скрипт из оболочки, он останавливается через несколько секунд.
=Изменить=
Даже когда я пытался запустить ffmpeg
из командной строки и заставить его работать в фоновом режиме, у меня было такое же поведение: процесс останавливался через несколько секунд, ffmpeg продолжал работать, только если я ждал его вывода.
Здесь подробности моей ОС: -
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
escapeshellarg()
php.net/escapeshellarg - person miken32   schedule 01.10.2019ffmpeg
живет недолго, я думаю, проблема вffmpeg
программе, а не в PHP. - person Salem   schedule 05.10.2019NOHUP
для этой команды shell_exec. - person AD7six   schedule 07.10.2019