2015-10-21 2 views
0

Я пытаюсь захватить поток веб-камеры, используя API FFMPEG C в окнах. Я могу делать то, что я хочу использовать следующие параметры командной строки:FFMPEG Set Webcam Encoder C++

ffmpeg -f dshow -vcodec mjpeg -s 1280x720 -framerate 30 -i video=HX-A1:audio="Microphone (HX-A1)" outputFile.mpg 

Я начал с примера transcoding.c и получил это работает для записи виртуального веб-камера, как экран-захвата-рекордера. Тем не менее, мне нужно установить параметры кодировщика для моей реальной веб-камеры, потому что по умолчанию используется необработанное видео 160x120, и я предпочел бы более высокое разрешение. Я пытаюсь настроить параметры кодировщика камеры, но, похоже, ничего не делает.

AVDictionary *opt = NULL; 
av_dict_set(&opt, "vcodec", "mjpeg", 0); 
av_dict_set(&opt, "s", "1280x720", 0); 
av_dict_set(&opt, "framerate", "30", 0); 
if ((ret = avformat_open_input(&ifmt_ctx, filename, inputFormat, &opt)) < 0) { 
    av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n"); 
    return ret; 
} 

Есть ли другой способ установить параметры ввода, чтобы сообщить камере, какой кодек использовать, как это сделано в моей командной строке?

ответ

1

Решено, мне пришлось сначала инициализировать AVFormatContext, а затем открыть декодер MJPEG и установить видеодекодер AVI и файл кодека AVFormatContext, прежде чем открывать его.

AVDictionary* dictionary = NULL; 
av_dict_set(&dictionary, "video_size", "1280x720", NULL); 
av_dict_set(&dictionary, "framerate", "30", NULL); 

ifmt_ctx = avformat_alloc_context(); 
ifmt_ctx->video_codec_id = AV_CODEC_ID_MJPEG; 
av_format_set_video_codec(ifmt_ctx, opened_mjpeg_codec); 

avformat_open_input(&ifmt_ctx, filename, inputFormat, &dictionary); 
Смежные вопросы