Переписываю один видео файл в другой. Сначала разобралась с видео, сейчас пытаюсь переписать аудио. После создания в новом файле аудио потока, прога стала вылетать на av_interleaved_write_frame(). С аудио ничего не делаю, просто создаю новий стрим, а в конце закрываю. В чем может быть проблема?
Что почитать что бы понять как работать с видео? Смотрела исходники ffmpeg, пару статтей с примерами типа «как написать свой проигрователь» и т.д., но особого понимания нету. Сейчас пытаюсь понять как изменить резолюшын в файле, вернее как это закодить (что видео надо открить найти стрим, читать фрейм, роздекодить его, ресайзнуть, заенкодить и записать мне понятно). Чаще всего проблемы с пониманием параметров функций, например:
sws_getCachedContext (struct SwsContext *context, int srcW, int srcH, enum PixelFormat srcFormat, int dstW, int dstH, enum PixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
Какой флаг выбирать и почему? Я уже перерыла все просторы нета, но чего-то стоящего не нашла. Поделитесь опытом как и где набатся знаний в этой области?
Пытаюсь работать с libavcodec и libavformat (смотрела исходники ffmpeg и примеры на разных сайтах) все просто но при попытках использовать примеры функция av_guess_format(NULL, filename, NULL) всегда возвращает null:
char *filename=«/mnt/sdcard/DCIM/OUT.mp4»;
// Allocate output format context AVFormatContext *out; out = avformat_alloc_context(); out->oformat = av_guess_format(NULL, filename, NULL); if (out->oformat == NULL) { out->oformat = av_guess_format(«mpeg», NULL, NULL); if (out->oformat == NULL) { LOGI(1, «Could not guess output format\n»); exit(1); } } Насколько я понимаю проблема в подключении decoder и encoder в конфигфайле: