关于视频文件搜索不支持mkv与wmv格式问题分析报告
1 关键字
搜索视频文件; mkv; wmv;
2 问题描述
设备型号:rk3568 系统版本:3.1release Api:5.0.1.0(Api9)
问题现象:在搭载3.1release的rk3568上使用Api9进行视频文件搜索,不支持mkv与wmv格式。
测试步骤:
-
将mkv和wmv格式的视频文件通过hdc传输到设备/mnt/hmdfs/100/account/merge_view/files/目录下,然后重启。
-
导入媒体库sdk,使用getFileAssets进行视频文件搜索。
-
getFileAssets接口未返回mkv与wmv格式的视频文件。
3 问题原因
3.1 正常机制
-
将视频文件通过hdc传输到设备中,重启之后能通过getFileAssets获取到。
3.2 异常机制
-
将mkv和wmv格式的视频文件通过hdc传输到设备中,重启之后无法通过getFileAssets获取到。
4 解决方案
-
通过hdc file send指令将mkv或wmv格式的视频文件传到/storage/media/100/local/files/Pictures/Camera路径下,然后重启。
-
通过以下代码可以获取到传到设备里的视频文件:
let fileKeyObj = mediaLibrary.FileKey
let mediaType = mediaLibrary.MediaType.VIDEO
let fetchOp = {
selections: fileKeyObj.MEDIA_TYPE + '=?',
selectionArgs: [mediaType.toString()],
};
const ml = mediaLibrary.getMediaLibrary(globalThis.context)
ml.getFileAssets(fetchOp).then((fetchFileResult) => {
if (fetchFileResult != undefined) {
console.info('mediaLibraryTest : ASSET_CALLBACK fetchFileResult success');
fetchFileResult.getAllObject((err, fileAssetList) => {
if (fileAssetList != undefined) {
fileAssetList.forEach((fileAsset)=>{
console.log(JSON.stringify(fileAsset.title))
});
}
});
}
});
5 定位过程
-
通过hdc将mkv、wmv、mp4、mov等4种格式放到/mnt/hmdfs/100/account/merge_view/files/目录下,调用getFileAssets只能搜索到mp4、mov两种格式。由于mnt属于分布式挂载区,而getFileAssets是媒体库api,所以初步判断是否是因为传输的位置而导致检索的格式不全。
-
从camera源码可以得知,通过录像功能生成的视频文件存储在/storage/media/100/local/files/Pictures/Camera路径下。
-
camera默认录像生成的是mp4格式的视频,修改源码,将其格式改为录像时生成mkv或wmv格式的视频。进行录像,其生成的视频可以被getFileAssets检索,证明getFileAssets没有过滤mkv以及wmv格式的视频。
-
将外部mkv或wmv格式的视频传输到/storage/media/100/local/files/Pictures/Camera路径下,重启之后,使用getFileAssets能检索到该视频文件。
6 知识分享
-
视频文件无论是通过api生成还是通过外部传输,都放在/storage/media/100/local/files/Pictures路径下才会被getFileAssets检索到。
更多推荐
所有评论(0)