gpt4 book ai didi

php - 从 php 终止 gstreamer

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:14 25 4
gpt4 key购买 nike

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

操作系统:Ubuntu 16.04 LTS

那么我想达到什么目的:

我需要从网络界面开始/停止视频录制。

我写了一个简单的 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);

一切正常,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,向名称为 gst-launch-1.0 的每个 pid 发送 SIGINIT,kill -9 每个 pid,但它没有帮助。

我做错了什么?

谢谢。

最佳答案

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

可以通过将其杀死两次(或按两次 Ctrl-C)来抑制此行为。第一个 kill(或 Ctrl-C)会将 kill (Ctrl-C) 的行为改回正常,因此第二个实际上会终止程序。
(你可能 Ctrl-C 两次,所以你看不到 30-33 秒的延迟)

关于php - 从 php 终止 gstreamer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com