我试图在我的C代码中使用ffmpeg捕获设备输入,例如屏幕和音频记录。我已经浏览了他们的官方文档和Wiki,但是与命令行用法相比,API文档的解释不是很好。
根据文档,例如,如果我想在Linux上用alsa录制音频
ffmpeg -f alsa -i hw:<#card>,<#device> -t <seconds> out.wav
我想使用C API做同样的事情,有什么想法吗?
答案 0 :(得分:0)
我不确定您的程序的真正用途,但是如果没有特殊限制,您可以尝试在C中调用shell命令:
/**
* @brief exec_shcmd - execute a shell command via popen
*(This function doesn't support write command now. such as 'echo "abc" > abc.txt')
*
* @para cmd_line - shell command string
* @para read_buf - output string buffer after execute command
* @para len - length of read buffer
*
* @return result of shell command execute
* @retval 0 - success
* @retcal -1 - failed
*/
int exec_shcmd(char *cmd_line, char *read_buf, ssize_t len)
{
FILE *stream;
if ((cmd_line == NULL) || (read_buf == NULL) || (len == 0)) {
assert(0);
return -1;
}
stream = popen(cmd_line, "r");
if (stream == NULL) {
assert(0);
return -1;
}
memset(read_buf, 0, len);
fread(read_buf, sizeof(char), len, stream);
pclose(stream);
printf("execute a shell command: %s", cmd_line);
printf("shell command return: %s", read_buf);
return 0;
}
这是我正在使用的功能,您可以根据自己的需要进行更改。您可以像这样使用它:
void main(void)
{
char *cmd = "ls -al\n";
char buf[500];
int ret;
printf("<-----------cmd exec------------->\n");
ret = exec_shcmd(cmd, buf, sizeof(buf));
printf("result(0 - success -1 - fail): <%d>\n", ret);
}