从php终止gstreamer

从php终止gstreamer,php,linux,gstreamer,Php,Linux,Gstreamer,我在终止从php运行的gstreamer时遇到问题 操作系统:Ubuntu 16.04 LTS 那么,我要实现什么目标: 我需要从web界面开始/停止视频录制 我编写了简单的php脚本,它执行shell命令: start.php <?php $cmd = "sudo gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! 'image/jpeg, width=1920, height=1080, framerate=30/1' ! vi

我在终止从php运行的gstreamer时遇到问题

操作系统:Ubuntu 16.04 LTS

那么,我要实现什么目标:

我需要从web界面开始/停止视频录制

我编写了简单的php脚本,它执行shell命令:

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);
<?php
$cmd = "sudo killall gst-launch-1.0";
shell_exec($cmd);

您正在录制视频,使用选项
-e

此选项使GStreamer在退出前等待完成其任务,从而防止文件损坏。
在这种情况下,当您终止gst启动时,由于选项
-e
gst启动将等待记录的数据完全写入磁盘。这就是延迟30-33秒的原因。
(对于长时间录制,延迟通常会变长)

可以通过两次杀死它(或两次Ctrl-C)来抑制此行为。。第一个kill(或Ctrl-C)将使kill(Ctrl-C)的行为恢复正常,因此第二个将实际终止程序。

(您可能按Ctrl-C键两次,因此不会看到30-33秒的延迟)

谢谢您的回答。但我在终端中单击一次Ctrl-c,它就会立即退出。而且,我多次发出kill命令,但都没有用。而且,正如我所知,若您将kill和-9一起发送给进程,它应该立即退出,进程不能覆盖-9信号。很抱歉,并没有注意到您尝试了kill-9。在这种情况下,有一个理论,但我不确定。理论是:可能gst launch已将任务转移到系统,以完成将数据写入磁盘的操作(类似于
sync
命令),而此时它不会处理您的信号。我在录制长视频时也会遇到这种情况。