У меня есть проблема с завершением gstreamer, который работает с php.
ОС: Ubuntu 16.04 LTS
Итак, чего я пытаюсь достичь:
Мне нужно начать / остановить запись видео из веб-интерфейса.
Я написал простой PHP-скрипт, который выполняет команду оболочки:
start.php
<?php
$cmd = "sudo gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! 'image/jpeg, width=1920, height=1080, framerate=30/1' ! videorate ! queue ! mux. alsasrc device="plughw:CARD=Device" ! queue ! mux. avimux name=mux ! filesink location=test.avi"shell_exec($cdm);
Все работает нормально, пользователь apache sudoer, запись началась.
Но теперь мне нужно остановить запись:
stop.php
<?php
$cmd = "sudo killall gst-launch-1.0";
shell_exec($cmd);
И эта команда занимает слишком много времени, чтобы прекратить запись (около 33 секунд)
Когда я запускаю команду запуска (например, sudo gst-launch-1.0 -v -e v4l2sr ….) из командной строки, а затем нажимаю Ctrl + c — она немедленно останавливается.
Даже если я пытаюсь убить процессы (есть несколько процессов с именем gst-launch-1.0) из командной строки (запись выполняется с помощью start.php), это также занимает примерно то же время (30-33 секунды).
Я пробовал различные команды: sudo killall gst-launch-1.0, посылая SIGINIT каждому pid с именем gst-launch-1.0, kill -9 каждый pid, но это не помогает.
Что я делаю неправильно?
Спасибо.
Вы записываете видео, с возможностью -e
,
Эта опция заставляет GStreamer ждать до завершения своей задачи перед выходом, тем самым предотвращая повреждение файла.
В этом случае, когда вы убиваете gst-launch, из-за опции -e
gst-launch
будет ждать, пока записанные данные будут полностью записаны на диск. Это является причиной задержки 30-33 секунд.
(Задержка обычно увеличивается при длительной записи)
Такое поведение можно подавить, убив его дважды (или дважды Ctrl-C). Первое уничтожение (или Ctrl-C) вернет обычное поведение kill (Ctrl-C), таким образом, второе фактически уничтожит программу.
(Вы, вероятно, дважды нажимаете Ctrl-C, поэтому не видите 30-33 секундную задержку)
Других решений пока нет …