2

나는에 설명 된 코드와 메소드를 사용하여 Android 용 ffmpeg를 만들었습니다.

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

Windows에서 VirtualBox로 실행되는 Ubuntu를 사용합니다. 그런 다음 libvideokit.so를 제공된 프로젝트의 Windows 복사본 인 Project \ libs \ armeabi 폴더로 복사했습니다. 거기에서 필자는 안드로이드 장치에서 Eclipse에서 ProjectTest를 실행할 수있었습니다. 나는 ffmpeg 코드가 실행되고있는 것을 볼 수 있지만, 입력 파일을 여는 시점에 도달하면 지시 된 오류가 발생합니다. 나는이 문제에 대한 토론을에서 보았다.

안드로이드에서 FFMpeg, 명령 줄에 나열되어 있지만 libavcodec 함수에 대한 정의되지 않은 참조

하지만 솔루션은 파일 프로토콜이이 빌드에서 활성화되어 있기 때문에 도움이되지 않았습니다. 또한 "file :"을 파일 경로 앞에 붙여서 시도해 보았습니다. 완성을 위해 minimal_featureset = 0으로 설정하여 모든 기본값을 사용하도록 설정했으나 동일한 오류가 발생합니다. 다음은 Eclipse에서 제공하는 logcat의 스냅 샷으로, 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

문제가 사용 권한에 있습니다. 안드로이드에 우리는 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를 재건하십시오. 그리고 그게 다야!


  • 감사! 이 기능을 사용해 보도록하겠습니다. - cdavidyoung
  • 문제가 해결되지 않는 경우 - 다른 문제가 있습니까? - Rob Lourens
  • 사실, 이것과 ndk-r5c에서 ndk-r8로 전환하면 해결되었습니다. - Rob Lourens
  • 이 문제를 직접 발견 한 경우 알 수 없지만 어쨌든 공유 해 주셔서 감사합니다. 마침내 나를 악몽에서 벗어났다! - JScoobyCed

0

사실,이 버전으로 FFMpeg 컴파일하는 동안 동일한 문제가 있습니다.http://www.roman10.net/?p=389

그리고 모든 것을 가능하게 할 수 있습니다 (--disable-everything 옵션을 없애는 것).

당신은 어떤 생각이 있다면, 나는 관심이 있어요 :)

편집하다 : HalfNinja 사이트에서 작성된 내용은 다음과 같습니다.

"... 현재 입력 파일에 문제가 있습니다. 대부분의 입력은 괜찮지 만 JPEG 시퀀스는 인식하지 못합니다."

:(


  • 내가 알아 내면 알려주지. 당신이 제공 한 정보는 잘 알고 있습니다. - cdavidyoung

연결된 질문


최근 질문