2015-04-20 2 views
0

я могу выполнить команду следовать в Linux успешно:
как использовать execv для выполнения FFmpeg употребляют RTMP потока

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) 

кто знает, Зачем?

ответ

0

Если сбой execv невозможен, то переменной errno присваивается код ошибки, описывающий проблему. Вы должны иметь возможность распечатать эту ошибку либо с помощью функции perror, либо просто напечатать номер и посмотреть его в table.

Для чего стоит, когда я пытался запустить код, я получил номер ошибки 2, поскольку файл не найден - у меня нет ffmpeg на /objs/ffmpeg/bin/ffmpeg, у меня его есть у /usr/bin/ffmpeg.

+0

спасибо большое, я исправил сейчас –