Android4.2 MediaScanner增加其他格式的支持

   Android启动后会自动调用MediaScanner来检索vfat分区中媒体文件,如果找到一个格式支持的文件,并且数据库中没有记录,它就会试着解码一下,如果成功就会加入到数据库中,接下来点击进入Gallery才有可能看到这个文件, 如果解码不成功就不会加入数据库中,在Gallery里不会看到。

    改一下frameworks/base/media/java/android/media/MediaFile.java就行,里面注册了各种支持的格式。在video file types里面增加

[cpp]  view plain copy
  1. public static final int FILE_TYPE_RM      = 30;  
  2. public static final int FILE_TYPE_RMVB    = 31;  
  3. public static final int FILE_TYPE_AVI     = 32;  
  4. public static final int FILE_TYPE_MOV     = 33;  

修正LAST_VIDEO_FILE_TYPE:

[cpp]  view plain copy
  1. private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_MOV;  
把image file types的值都加100,避免冲突。

[cpp]  view plain copy
  1. public static final int FILE_TYPE_JPEG    = 131;  
  2. public static final int FILE_TYPE_GIF     = 132;  
  3. public static final int FILE_TYPE_PNG     = 133;  
  4. public static final int FILE_TYPE_BMP     = 134;  
  5. public static final int FILE_TYPE_WBMP    = 135;  
最后在下面addFileType里注册一下:

[cpp]  view plain copy
  1. addFileType("RM", FILE_TYPE_RM, "video/ffmpeg");  
  2. addFileType("RMVB", FILE_TYPE_RMVB, "video/ffmpeg");  
  3. addFileType("AVI", FILE_TYPE_AVI, "video/ffmpeg");  
  4. addFileType("MOV", FILE_TYPE_MOV, "video/ffmpeg");  
addFileType的第一个参数是文件扩展名,第二个是ID号,第三个文件的mime,要和Extractor返回的文件mime匹配。我这里都是用的上一篇说的FFMEPGExtractor,它返回的文件mime都是"video/ffmpeg",所以这里也要写成"video/ffmpeg"。

    到这里,java部分就可以了。接下来改Stagefright里面的格式支持。在frameworks/av/media/libstagefright/StagefrightMediaScanner.cpp里。

    一上来,在*kValidExtensions数组里就可以看到各种文件后缀名,加上我们自己的:

[cpp]  view plain copy
  1. ".avi"".flv"".rm"".rmvb"".wmv"".mov"  
    好了,结束了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值