HarmonyOS 鸿蒙Next ArkTs如何获取外置存储内的视频缩略图和视频时长等信息

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ArkTs如何获取外置存储内的视频缩略图和视频时长等信息

一种实现方法是将文件拷贝到应用沙箱内,用ffmpeg获取,但是如果文件很多或文件过大对性能有影响

一种是参考使用AVMetadataExtractor提取音视频元数据信息(ArkTS)-媒体信息查询-媒体开发指导(ArkTS)-Media Kit(媒体服务)-媒体 - 华为HarmonyOS开发者实现,但支持的视频格式和编码有限,例如AVI格式的视频获取不到缩略图和时长


更多关于HarmonyOS 鸿蒙Next ArkTs如何获取外置存储内的视频缩略图和视频时长等信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

媒体文件uri的使用方式

normal等级的应用使用此类uri可以通过photoAccessHelper模块进行进一步处理。示例代码参见媒体资源使用指导中的指定URI获取图片或视频资源。此接口需要申请相册管理模块读权限'ohos.permission.READ_IMAGEVIDEO',在使用中需要注意应用是否有此权限。

若normal等级的应用不想申请权限也可以通过临时授权的方式使用PhotoAccessHelper的PhotoViewPicker得到的uri使用photoAccessHelper.getAssets接口获取对应uri的PhotoAsset对象。这种方式获取的对象可以调用getThumbnail获取缩略图和使用get接口读取PhotoKeys中的部分信息。

以下为PhotoKeys中支持临时授权方式可以读取的信息:

名称 说明
URI 'uri' 文件uri。
PHOTO_TYPE 'media_type' 媒体文件类型。
DISPLAY_NAME 'display_name' 显示名字。
SIZE 'size' 文件大小。
DATE_ADDED 'date_added' 添加日期(添加文件时间距1970年1月1日的秒数值)。
DATE_MODIFIED 'date_modified' 修改日期(修改文件时间距1970年1月1日的秒数值,修改文件名不会改变此值,当文件内容发生修改时才会更新)。
DURATION 'duration' 持续时间(单位:毫秒)。
WIDTH 'width' 图片宽度(单位:像素)。
HEIGHT 'height' 图片高度(单位:像素)。
DATE_TAKEN 'date_taken' 拍摄日期(文件拍照时间距1970年1月1日的秒数值)。
ORIENTATION 'orientation' 图片文件的方向。
TITLE 'title' 文件标题。

官方文档中也给出了相关实现demo:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/user-file-uri-intro-V5#%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6uri%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F

更多关于HarmonyOS 鸿蒙Next ArkTs如何获取外置存储内的视频缩略图和视频时长等信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这种方法只能获取设备本地存储的视频文件的时长,拿不到外置存储设备里视频的相关信息

在HarmonyOS鸿蒙系统中,使用ArkTs(Ark TypeScript)框架获取外置存储内的视频缩略图和视频时长等信息,可以通过以下步骤实现:

  1. 权限申请:首先,确保你的应用已经申请了访问外置存储的权限。在config.json文件中添加必要的权限声明,如ohos.permission.READ_EXTERNAL_STORAGE

  2. 文件访问:使用ArkTs的文件系统API访问外置存储中的视频文件。你可以通过fileio模块来读取文件路径。

  3. 视频缩略图生成:利用ArkTs中的多媒体处理API(如media模块),可以生成视频的缩略图。通常,这涉及到读取视频文件的元数据,并提取某一帧作为缩略图。

  4. 视频时长获取:同样,通过media模块,你可以获取视频文件的时长信息。这通常涉及到解析视频文件的头部信息。

  5. 数据处理:将获取到的缩略图和时长信息进行处理或展示,例如,在UI组件中显示缩略图,或在文本组件中显示时长。

示例代码(简化):

import fileio from '[@ohos](/user/ohos).fileio';
import media from '[@ohos](/user/ohos).multimedia.media';

// 假设已经获取到视频文件路径
let filePath = "/path/to/video.mp4";

// 获取视频时长
let mediaMetadata = media.createMediaMetadataRetriever(filePath);
let duration = mediaMetadata.extractMetadata(media.MediaMetadataRetriever.METADATA_KEY_DURATION);

// 生成缩略图(具体实现需根据API文档)
// ...

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html
回到顶部