有没有办法停止/暂停正在录制的/在raspi相机上?


8

启动Raspi相机非常简单:

raspivid -t 10000 -o test.h264

问题:

没有办法阻止这种情况。就我所知,这确实很愚蠢,因为据我所知,没有可用于零售的相机,这需要用户指定要运行多少秒,然后在停止之前运行那么多秒。

背景:

这在监视方面提出了巨大的问题。我正在创建一个程序,该程序在用户离开时打开家庭监视,然后在用户返回时再次关闭。如果刚好在用户返回之前检测到运动,则照相机会开始录制一段预定的时间(即10分钟),但是由于该raspivid命令被阻止,因此我遇到了用户实际在室内的情况,但是该程序处于surveillance状态。为了解决这个问题,我启动了一个线程来启动raspivid命令,因此现在根据用户来去的时间正确更新状态。但是,现在其他州不起作用。例如,我无法切换到TV状态,因为无法录制高清素材并同时观看。同样,我无法切换到Party 相机已在录制时,状态(各方的连续视频录制)。

潜在的解决方案:

使用我在网上找到的代码(但找不到更多链接),我发现了一个黑手,可以杀死启动该raspivid命令的线程。不幸的是,这被SO亵渎了(请参见此处此处),我同意这一点,不仅是因为它可能损坏.h264文件并导致内存泄漏,而且因为这是我编写代码的噩梦(我必须拥有锁和我还启动了其他线程进行运动检测时,信号灯无处不在。

题:

有什么办法可以停止记录raspi相机吗?如果没有,为什么不呢?

Answers:


7

检查源代码可以Raspivid发现有两种方法可以中断捕获。

第一种方法是将任何SIGNAL发送到捕获过程。该信号由以下代码处理Raspivid

    /**
     * Handler for sigint signals
     *
     * @param signal_number ID of incoming signal.
     *
     */
    static void signal_handler(int signal_number)
    {
        // Going to abort on all signals
        vcos_log_error("Aborting program\n");

        // TODO : Need to close any open stuff...how?

       exit(255);
    }

这导致捕获过程平均在100毫秒内结束执行。

如该答案的注释中所述,这可以通过使用以下代码在Python中完成:

    popen = subprocess.Popen ( cmd )
    .
    .
    .
    popen.send_signal ( signal.SIGINT )

另一种方法是使用用户数据回调,该回调具有字段:

    callback_data.abort = 0;

如果您将此字段设置为除零以外的其他任何值,您可能会猜测会发生什么

如果您需要更详细的说明,我想邀请您检查源代码


谢谢。但是,我不确定这两个是什么。那是C吗?我应该提到我的代码是Python。通过使用popen = subprocess.Popen ( cmd )andpopen.send_signal ( signal.SIGINT )
puk,

好吧,发送信号是我写的第一种方法,对不起,这很痛苦=)
lenik

1
通常STOP和CONT信号可以正常工作
John La Rooy13年

仅供参考,已添加代码raspivid以允许使用信号来控制视频的录制。现在,您可以使用信号暂停然后恢复录制。尚不清楚是否有信号退出程序并正常关闭输出文件的方法。有关添加到中的新选项的更多详细信息,请参见github.com/raspberrypi/userland/pull/104raspivid
HeatfanJohn

我在节点js中发送了SIGTERM信号以使其正常退出。
Goofyahead 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.