Android启动后会自动调用MediaScanner来检索vfat分区中媒体文件,如果找到一个格式支持的文件,并且数据库中没有记录,它就会试着解码一下,如果成功就会加入到数据库中,接下来点击进入Gallery才有可能看到这个文件, 如果解码不成功就不会加入数据库中,在Gallery里不会看到。
改一下frameworks/base/media/java/android/media/MediaFile.java就行,里面注册了各种支持的格式。在video file types里面增加
- public static final int FILE_TYPE_RM = 30;
- public static final int FILE_TYPE_RMVB = 31;
- public static final int FILE_TYPE_AVI = 32;
- public static final int FILE_TYPE_MOV = 33;
修正LAST_VIDEO_FILE_TYPE:
- private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_MOV;
- public static final int FILE_TYPE_JPEG = 131;
- public static final int FILE_TYPE_GIF = 132;
- public static final int FILE_TYPE_PNG = 133;
- public static final int FILE_TYPE_BMP = 134;
- public static final int FILE_TYPE_WBMP = 135;
- addFileType("RM", FILE_TYPE_RM, "video/ffmpeg");
- addFileType("RMVB", FILE_TYPE_RMVB, "video/ffmpeg");
- addFileType("AVI", FILE_TYPE_AVI, "video/ffmpeg");
- addFileType("MOV", FILE_TYPE_MOV, "video/ffmpeg");
到这里,java部分就可以了。接下来改Stagefright里面的格式支持。在frameworks/av/media/libstagefright/StagefrightMediaScanner.cpp里。
一上来,在*kValidExtensions数组里就可以看到各种文件后缀名,加上我们自己的:
- , ".avi", ".flv", ".rm", ".rmvb", ".wmv", ".mov"