2011-10-23 31 views
2

我已經使用Ubuntu上的窗口在VirtualBox中運行內置使用所描述的代碼和方法適用於Android的ffmpeg在機器人FFMPEG halfninja av_open_input_file返回-2(沒有這樣的文件或目錄)

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

。然後,我將libvideokit.so複製到提供的項目的Windows副本的Project \ libs \ armeabi文件夾中。從那裏我能夠在Android設備上從Eclipse運行ProjectTest。我可以看到正在執行的ffmpeg代碼,但是當它打開輸入文件時,它會給我指示的錯誤。我已經注意到這個問題進行了一些討論,在

FFMpeg on Android, undefined references to libavcodec functions, although it is listed on command line

但由於該文件協議在此構建支持,我也試圖把「文件:」該方案並沒有幫助的文件路徑的前無濟於事。爲了完整性,我嘗試設置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! 

回答

6

的問題是在權限Android上,我們安裝在SD卡與系統的所有者,但沒有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而that`s它

+0

謝謝!我會試試這個。 – cdavidyoung

+0

這不是爲我解決問題 - 是否還有其他可能? –

+1

其實,這和從ndk-r5c切換到ndk-r8解決了它。 –

0

其實,我也有同樣的問題,而與此版本的編譯FFmpeg的: http://www.roman10.net/?p=389

,並使所有可以啓用(擺脫 - 禁用所有選項)。

如果你有一些想法,我很感興趣:)

編輯: 在HalfNinja現場,這裏是寫的是:
」 ......在此刻,我有一些問題輸入文件(我認爲大部分輸入都很好,但不能識別JPEG序列)「。
:(

+0

如果我弄明白,我會告訴你。您提供的信息很好知道。 – cdavidyoung

相關問題