【发布时间】:2014-03-16 22:03:19
【问题描述】:
我想在 c 中创建一个函数,它将在 Linux 下捕获视频。我通过system() 在捕获视频的c 程序中嵌入了ffmpeg 命令。 ffmpeg 按 [q] 结束。如何在我的 c 程序中包含终止。
此函数是 server.c 程序的一部分。当客户端请求终止时,我希望终止视频功能。这可能吗?
#include<stdio.h>
#include <string.h>
main()
{
char command[180];
sprintf(command, "ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 out.avi");
system(command);
}
【问题讨论】:
-
系统是同步的,直到你的子进程没有完成它才会退出。也许不知何故来自另一个线程,实际上我什至不确定这是否可能。也许只是不使用系统,使用fork(),execv(),然后在你决定停止子进程时杀死
-
@FiddlingBits:它不会,因为 OP 正在使用现成的
ffmpeg,因此无法让它捕捉任何信号以表现特殊。 OP 应该按照 Dabo 在他的评论中提出的fork()-、exec*()-、kill()-child 路径或使用ffmpegsC 接口直接实现必要的功能。如果采用后一种方式,则在另一方面实现信号处理可能是必要且有帮助的。 -
@alk 可以提供示例代码吗?
-
这不会是一个三班轮。所以对于
fork()和exec*(),这可能是一个介绍:stackoverflow.com/q/1653340/694576 对于信号处理,此站点上有各种答案,您也可以在他的评论中获得 Fiddling Bits 提供的链接。对于如何使用ffmpeg的C 接口,您可能想在这里挖掘:ffmpeg.org 一个起点是查看ffmpeg本身的来源。
标签: c ffmpeg system-calls terminate