机器人的ffmpeg halfninja av_open_input_file返回-2(没有这样的文件或目录)机器人、文件、目录、halfninja

2023-09-05 10:00:27 作者:Voir à travers 看透

我已经使用了code和方法,在

描述建造的ffmpeg为Android

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

使用Ubuntu在Windows上运行在VirtualBox中。然后我libvideokit.so复制到项目\库\ armeabi的项目提供了的Windows副本文件夹。从那里,我可以给我的Andr​​oid设备上从Eclipse运行ProjectTest。我可以看到正在执行的ffmpeg code,但是当它到达打开输入文件的一点上,它给我的指示的错误。我注意到,在

这个问题进行了一些讨论

FFMpeg在Android上,未定义的引用libav codeC的功能,尽管它被列在命令行

但方案并没有帮助,因为文件协议是在这个版本允许,我也试图把文件中的文件路径的前无济于事。为了完整我尝试设置minimal_featureset = 0,以使所有的默认设置,但是这给了我同样的错误。下面是Eclipse中显示,从Videokit输出与一个额外调用包厢显示来自av_open_input_file的结果logcat的快照。事情任何建议,试图将大大AP preciated。

称为run():

  11月10号至23号:57:33.888:DEBUG / Videokit(4830)
十一月10号至23日:57:33.888:DEBUG / Videokit(4830):运行假冒主()
十一月10号至23日:57:33.904:DEBUG / Videokit(4830):主要():注册的所有模块
十一月10号至23日:57:33.927:DEBUG / Videokit(4830):主要():注册的一切
十一月10号至23日:57:33.927:DEBUG / Videokit(4830):主要():initting OPTS
十一月10号至23日:57:33.943:DEBUG / Videokit(4830):主要():initted OPTS。
十一月10号至23日:57:33.943:ERROR / Videokit(4830):ffmpeg的版本N-30996-gf925b24,版权所有(C)2000-2011 FFmpeg的开发
十一月10号至23日:57:33.943:ERROR / Videokit(4830):建于二○一一年十月二十一日13时54分03秒用gcc 4.4.3
十一月10号至23日:57:33.943:ERROR / Videokit(4830):配置:--enable-交叉编译--arch = ARM5TE --enable-的ARMv5TE --target-OS = Linux的 - 禁用剥离 -  preFIX = .. /输出 - 禁用霓虹灯--enable-版本3  - 禁用共享--enable-静态--enable-GPL --enable-memalign可乱砍--cc =臂的Linux androideabi- GCC --ld =臂的Linux androideabi-LD --extra-CFLAGS =' - 灵活插卡-DANDROID -D__thumb__ -mthumb -Wfatal-错误-Wno-DE precated' - 禁用一切--enable-DE codeR = MJPEG --enable-分路器= MJPEG --enable-解析器= MJPEG --enable-分路器= IMAGE2 --enable-复用器= MP4 --enable-CN codeR = libx264 --enable-libx264 --enable-DE codeR = rawvideo --enable-协议=文件--enable-hwaccels  - 禁用的ffmpeg  - 禁用ffplay  - 禁用ffprobe  - 禁用--disable ffserver的网络 - 启用过滤器=缓冲--enable-过滤= buffersink  - 禁用分路器=为v41  - 禁用分路器=用v412  - 禁用indev =为v41  - 禁用indev =用v412 --extra-CFLAGS =' - 我。 ./x264 -Ivideokit--extra-LDFLAGS = -L ../ X264
十一月10号至23日:57:33.943:DEBUG / Videokit(4830):主要():解析选项
十一月10号至23日:57:33.943:DEBUG / Videokit(4830):parse_options函数有4个选项解析
十一月10号至23日:57:33.951:ERROR / Videokit(4830):opt_input_file av_open_input_file /mnt/sdcard/fun/snap0000.jpg -2
十一月10号至23日:57:33.951:ERROR / Videokit(4830):/mnt/sdcard/fun/snap0000.jpg:没有这样的文件或目录
十一月10号至23日:57:33.951:ERROR / Videokit(4830):ffmpeg_exit(1)呼吁!
 

解决方案

现在的问题是权限。在Android上,我们已经安装SD卡与系统的所有者,但没有RWX。但是ffmpeg的检查是:

avformat / file.c中:

 静态INT file_check(URLContext * H,INT面罩)
{
    结构STAT ST;
    INT RET = STAT(H->文件名,和放大器; ST);
    如果(RET℃下)
        返回AVERROR(错误);

    RET | = st.st_mode和放大器; S_IRUSR?面膜&功放; AVIO_FLAG_READ:0;
    RET | = st.st_mode和放大器; S_IWUSR?面膜&功放; AVIO_FLAG_WRITE:0;

    返回RET;
}
 
亚马逊等投资的OpenAI要打造家务机器人

更改此功能是这样的:

 静态INT file_check(URLContext * H,INT面罩)
{
    结构STAT ST;
    INT RET = STAT(H->文件名,和放大器; ST);
    如果(RET℃下)
        返回AVERROR(错误);

    RET | = st.st_mode和放大器; S_IRUSR?面膜&功放; AVIO_FLAG_READ:0;
    RET | = st.st_mode和放大器; S_IRGRP?面膜&功放; AVIO_FLAG_READ:0;
    RET | = st.st_mode和放大器; S_IROTH?面膜&功放; AVIO_FLAG_READ:0;
    RET | = st.st_mode和放大器; S_IWUSR?面膜&功放; AVIO_FLAG_WRITE:0;
    RET | = st.st_mode和放大器; S_IWGRP?面膜&功放; AVIO_FLAG_WRITE:0;
    RET | = st.st_mode和放大器; S_IWOTH?面膜&功放; AVIO_FLAG_WRITE:0;


    返回RET;
}
 

和重建的ffmpeg。而that`s吧!

I have built ffmpeg for Android using the code and method described at

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

using Ubuntu running in VirtualBox on windows. I then copied libvideokit.so into the Project\libs\armeabi folder of a Windows copy of the provided projects. From there I was able to run the ProjectTest from Eclipse on my Android device. I can see the ffmpeg code being executed but when it gets to the point of opening the input file it gives me the indicated error. I have noticed some discussion of this problem at

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

but the solutions have not helped since the file protocol is enabled in this build and I also tried putting "file:" in front of the filepath to no avail. For completeness I tried setting minimal_featureset=0 to enable all the defaults but this gives me the same error. Below is a snapshot of the logcat from Eclipse showing the output from Videokit with an extra call to LOGE to display the result from av_open_input_file. Any suggestions of things to try would be greatly appreciated.

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!

解决方案

The problem is in permissions. On android we have sdcard mounted with system as owner, but without rwx. But ffmpeg checks that:

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;
}

Change this function like this:

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;
}

And rebuild your ffmpeg. And that`s it!