将移植好的ffmpeg放在android里面,使用的时候会提示:
/mnt/sdcard/1.jpg: No such file or directory
问题是上述文件是存在的。
于是google,参考下面的办法:
http://stackoverflow.com/questions/7867853/android-ffmpeg-halfninja-av-open-input-file-returns-2-no-such-file-or-director
上面已经说的很清楚了,是权限问题,修改方法如下:
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;
}
重新编译即可解决问题。