如何使用execv执行ffmpeg ingest rtmp流

时间:2015-04-20 14:00:45

标签: ffmpeg timeout rtmp execv

我可以成功执行linux中的follow命令:

ffmpeg -i "rtmp://42.62.95.48/live?vhost=hls/livestream timeout=2" -vcodec copy -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/hd

但它在以下代码中不起作用:

std::vector<std::string> params;
params.push_back("/objs/ffmpeg/bin/ffmpeg");
params.push_back("-i");
params.push_back("\"rtmp://ossrs.net/live/livestream timeout=3\"");
params.push_back("-vcodec");
params.push_back("copy");
params.push_back("-acodec");
params.push_back("copy");
params.push_back("-f");
params.push_back("flv");
params.push_back("-y");
params.push_back("rtmp://127.0.0.1:1935/live/hd");

char** charpv_params = new char*[params.size() + 1];
for (int i = 0; i < (int)params.size(); i++) {
    std::string& p = params[i];
    charpv_params[i] = (char*)p.data();
}

charpv_params[params.size()] = NULL;
execv("/objs/ffmpeg/bin/ffmpeg", charpv_params)
谁知道为什么?

1 个答案:

答案 0 :(得分:0)

如果execv调用失败,则errno变量将设置为描述问题的错误代码。您应该能够使用perror功能打印该错误,或​​者只打印该号码并在table中查找。

为了它的价值,当我尝试运行你的代码时,我得到了错误号2,因为找不到文件 - 我在/objs/ffmpeg/bin/ffmpeg没有ffmpeg,我在/usr/bin/ffmpeg得到它。