android ffmpeg halfninja av_open_input_file возвращает -2 (такого файла или каталога нет) - PullRequest
2 голосов
/ 23 октября 2011

Я собрал ffmpeg для Android, используя код и метод, описанный в

https://github.com/halfninja/android-ffmpeg-x264

, используя Ubuntu, работающий в VirtualBox на окнах.Затем я скопировал libvideokit.so в папку Project \ libs \ armeabi копии Windows предоставленных проектов.Оттуда я смог запустить ProjectTest из Eclipse на моем устройстве Android.Я вижу, как выполняется код ffmpeg, но когда он доходит до открытия входного файла, он выдает мне указанную ошибку.Я заметил некоторое обсуждение этой проблемы на

FFMpeg на Android, неопределенные ссылки на функции libavcodec, хотя оно указано в командной строке

, но решения не помоглитак как протокол файла включен в этой сборке, и я также попытался поместить «file:» перед filepath безрезультатно.Для полноты я попытался установить minimal_featureset = 0, чтобы включить все значения по умолчанию, но это дает мне ту же ошибку.Ниже приведен снимок logcat из Eclipse, показывающий вывод Videokit с дополнительным вызовом LOGE для отображения результата из av_open_input_file.Будем весьма благодарны за любые предложения, которые стоит попробовать.

10-23 11:57:33.888: DEBUG/Videokit(4830): run() called
10-23 11:57:33.888: DEBUG/Videokit(4830): run passing off to main()
10-23 11:57:33.904: DEBUG/Videokit(4830): main(): registering all modules
10-23 11:57:33.927: DEBUG/Videokit(4830): main(): registered everything
10-23 11:57:33.927: DEBUG/Videokit(4830): main(): initting opts
10-23 11:57:33.943: DEBUG/Videokit(4830): main(): initted opts.
10-23 11:57:33.943: ERROR/Videokit(4830): ffmpeg version N-30996-gf925b24, Copyright (c) 2000-2011 the FFmpeg developers
10-23 11:57:33.943: ERROR/Videokit(4830):   built on Oct 21 2011 13:54:03 with gcc 4.4.3
10-23 11:57:33.943: ERROR/Videokit(4830):   configuration: --enable-cross-compile --arch=arm5te --enable-armv5te --target-os=linux --disable-stripping --prefix=../output --disable-neon --enable-version3 --disable-shared --enable-static --enable-gpl --enable-memalign-hack --cc=arm-linux-androideabi-gcc --ld=arm-linux-androideabi-ld --extra-cflags='-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated' --disable-everything --enable-decoder=mjpeg --enable-demuxer=mjpeg --enable-parser=mjpeg --enable-demuxer=image2 --enable-muxer=mp4 --enable-encoder=libx264 --enable-libx264 --enable-decoder=rawvideo --enable-protocol=file --enable-hwaccels --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-filter=buffer --enable-filter=buffersink --disable-demuxer=v4l --disable-demuxer=v4l2 --disable-indev=v4l --disable-indev=v4l2 --extra-cflags='-I../x264 -Ivideokit' --extra-ldflags=-L../x264
10-23 11:57:33.943: DEBUG/Videokit(4830): main(): parsing options
10-23 11:57:33.943: DEBUG/Videokit(4830): parse_options has 4 options to parse
10-23 11:57:33.951: ERROR/Videokit(4830): opt_input_file av_open_input_file /mnt/sdcard/fun/snap0000.jpg -2 
10-23 11:57:33.951: ERROR/Videokit(4830): /mnt/sdcard/fun/snap0000.jpg: No such file or directory
10-23 11:57:33.951: ERROR/Videokit(4830): ffmpeg_exit(1) called!

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Проблема в разрешениях. На андроид у нас установлен sdcard с системой как владелец, но без rwx. Но ffmpeg проверяет, что:

avformat / file.c:

static int file_check(URLContext *h, int mask)
{
    struct stat st;
    int ret = stat(h->filename, &st);
    if (ret < 0)
        return AVERROR(errno);

    ret |= st.st_mode&S_IRUSR ? mask&AVIO_FLAG_READ  : 0;
    ret |= st.st_mode&S_IWUSR ? mask&AVIO_FLAG_WRITE : 0;

    return ret;
}

Измените эту функцию следующим образом:

static int file_check(URLContext *h, int mask)
{
    struct stat st;
    int ret = stat(h->filename, &st);
    if (ret < 0)
        return AVERROR(errno);

    ret |= st.st_mode&S_IRUSR ? mask&AVIO_FLAG_READ  : 0;
    ret |= st.st_mode&S_IRGRP ? mask&AVIO_FLAG_READ  : 0;
    ret |= st.st_mode&S_IROTH ? mask&AVIO_FLAG_READ  : 0;
    ret |= st.st_mode&S_IWUSR ? mask&AVIO_FLAG_WRITE : 0;
    ret |= st.st_mode&S_IWGRP ? mask&AVIO_FLAG_WRITE  : 0;
    ret |= st.st_mode&S_IWOTH ? mask&AVIO_FLAG_WRITE  : 0;


    return ret;
}

И восстановите свой ffmpeg. И это все!

0 голосов
/ 01 ноября 2011

На самом деле, у меня та же проблема при компиляции FFMpeg с этой версией: http://www.roman10.net/?p=389

И включение всего, что можно включить (избавление от опции --disable-everything).1005 * Если у вас есть идея, мне интересно:)

Редактировать: На сайте HalfNinja вот что написано:
"... на данный момент у меня возникли некоторые проблемы свходные файлы (я думаю, что большинство входных данных в порядке, но он не распознает последовательности JPEG). "
: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...