如何在C中使用ffmpeg捕获设备输入?

时间:2019-05-24 00:57:06

标签: c ffmpeg

我试图在我的C代码中使用ffmpeg捕获设备输入,例如屏幕和音频记录。我已经浏览了他们的官方文档和Wiki,但是与命令行用法相比,API文档的解释不是很好。

根据文档,例如,如果我想在Linux上用alsa录制音频

ffmpeg -f alsa -i hw:<#card>,<#device> -t <seconds> out.wav

我想使用C API做同样的事情,有什么想法吗?

1 个答案:

答案 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);
}