我想在c中创建一个函数,它将在Linux下捕获视频。我在我的c程序中通过ffmpeg
嵌入system()
命令,该程序捕获视频。 {[1}}按[q]终止。如何在我的c程序中包含终止。
此函数是server.c程序的一部分。当客户端请求终止时,我希望视频cature功能终止。这可能吗?
ffmpeg
答案 0 :(得分:1)
正如你问fork的示例,exec,kill这里是可能的解决方案。 avconv替换了我的电脑上的ffmpeg。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <errno.h>
#include <assert.h>
#include <unistd.h>
#include <sched.h>
#include <sys/wait.h>
pid_t parent_pid;
void sigquit_handler (int sig)
{
assert(sig == SIGKILL);
pid_t self = getpid();
if (parent_pid != self)
{
printf("recording done");
_exit(0);
}
}
int main()
{
int pid = 0;
int status;
pid_t child;
signal(SIGKILL, sigquit_handler);
parent_pid = getpid();
pid = fork();
if ( pid == 0)
{
execl("/usr/bin/avconv","avconv","-f","video4linux2","-r","25","-s","640x480","-i","/dev/video0","out.avi",(char*)0);
}
else if( pid > 0)
{
sleep(5);
kill(pid, SIGKILL);
child = wait(&status);
printf("child %d succesully quit\n", (int)child);
}
return 0;
}