机器人的ffmpeg halfninja av_open_input_file返回-2(没有这样的文件或目录) [英] android ffmpeg halfninja av_open_input_file returns -2 (no such file or directory)
问题描述
我已经使用了code和方法,在
描述建造的ffmpeg为Androidhttps://github.com/halfninja/android-ffmpeg-x264
使用Ubuntu在Windows上运行在VirtualBox中。然后我libvideokit.so复制到项目\库\ armeabi的项目提供了的Windows副本文件夹。从那里,我可以给我的Android设备上从Eclipse运行ProjectTest。我可以看到正在执行的ffmpeg code,但是当它到达打开输入文件的一点上,它给我的指示的错误。我注意到,在
这个问题进行了一些讨论<一个href="http://stackoverflow.com/questions/5337833/ffmpeg-on-android-undefined-references-to-libav$c$cc-functions-although-it-is">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-&GT;文件名,和放大器; ST);
如果(RET℃下)
返回AVERROR(错误);
RET | = st.st_mode和放大器; S_IRUSR?面膜&功放; AVIO_FLAG_READ:0;
RET | = st.st_mode和放大器; S_IWUSR?面膜&功放; AVIO_FLAG_WRITE:0;
返回RET;
}
更改此功能是这样的:
静态INT file_check(URLContext * H,INT面罩)
{
结构STAT ST;
INT RET = STAT(H-&GT;文件名,和放大器; 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
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!
这篇关于机器人的ffmpeg halfninja av_open_input_file返回-2(没有这样的文件或目录)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!