再不寫下來(lái)就忘了。
Android啟動(dòng)后會(huì)自動(dòng)調(diào)用MediaScanner來(lái)檢索vfat分區(qū)中媒體文件,如果找到一個(gè)格式支持的文件,并且數(shù)據(jù)庫(kù)中沒有記錄,它就會(huì)試著解碼一下,如果成功就會(huì)加入到數(shù)據(jù)庫(kù)中,接下來(lái)點(diǎn)擊進(jìn)入Gallery才有可能看到這個(gè)文件, 如果解碼不成功就不會(huì)加入數(shù)據(jù)庫(kù)中,在Gallery里不會(huì)看到。
改一下frameworks/base/media/java/android/media/MediaFile.java就行,里面注冊(cè)了各種支持的格式。在video file types里面增加
[cpp]
view plaincopypublic 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:
[cpp]
view plaincopyprivate static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_MOV;
把image file types的值都加100,避免沖突。
[cpp]
view plaincopypublic 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里注冊(cè)一下:
[cpp]
view plaincopyaddFileType("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");
addFileType的第一個(gè)參數(shù)是文件擴(kuò)展名,第二個(gè)是ID號(hào),第三個(gè)文件的mime,要和Extractor返回的文件mime匹配。我這里都是用的上一篇說(shuō)的FFMEPGExtractor,它返回的文件mime都是"video/ffmpeg",所以這里也要寫成"video/ffmpeg"。
到這里,java部分就可以了。接下來(lái)改Stagefright里面的格式支持。在frameworks/base/media/libstagefright/StagefrightMediaScanner.cpp里。
一上來(lái),在kValidExtensions數(shù)組里就可以看到各種文件后綴名,加上我們自己的:
[cpp]
view plaincopy, ".avi", ".flv", ".rm", ".rmvb", ".wmv", ".mov"
好了,結(jié)束了。