1 关键字

搜索视频文件; mkv; wmv;

2 问题描述

设备型号:rk3568 系统版本:3.1release Api:5.0.1.0(Api9)

问题现象:在搭载3.1release的rk3568上使用Api9进行视频文件搜索,不支持mkv与wmv格式。

测试步骤:

  1. 将mkv和wmv格式的视频文件通过hdc传输到设备/mnt/hmdfs/100/account/merge_view/files/目录下,然后重启。

  2. 导入媒体库sdk,使用getFileAssets进行视频文件搜索。

  3. getFileAssets接口未返回mkv与wmv格式的视频文件。

3 问题原因

3.1 正常机制

  1. 将视频文件通过hdc传输到设备中,重启之后能通过getFileAssets获取到。

3.2 异常机制

  1. 将mkv和wmv格式的视频文件通过hdc传输到设备中,重启之后无法通过getFileAssets获取到。

4 解决方案

  1. 通过hdc file send指令将mkv或wmv格式的视频文件传到/storage/media/100/local/files/Pictures/Camera路径下,然后重启。

  2. 通过以下代码可以获取到传到设备里的视频文件:

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 定位过程

  1. 通过hdc将mkv、wmv、mp4、mov等4种格式放到/mnt/hmdfs/100/account/merge_view/files/目录下,调用getFileAssets只能搜索到mp4、mov两种格式。由于mnt属于分布式挂载区,而getFileAssets是媒体库api,所以初步判断是否是因为传输的位置而导致检索的格式不全。

  2. 从camera源码可以得知,通过录像功能生成的视频文件存储在/storage/media/100/local/files/Pictures/Camera路径下。

  3. camera默认录像生成的是mp4格式的视频,修改源码,将其格式改为录像时生成mkv或wmv格式的视频。进行录像,其生成的视频可以被getFileAssets检索,证明getFileAssets没有过滤mkv以及wmv格式的视频。

  4. 将外部mkv或wmv格式的视频传输到/storage/media/100/local/files/Pictures/Camera路径下,重启之后,使用getFileAssets能检索到该视频文件。

6 知识分享

  1. 视频文件无论是通过api生成还是通过外部传输,都放在/storage/media/100/local/files/Pictures路径下才会被getFileAssets检索到。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐