场景描述
使用 getThumbnail和AVImageGenerator接口可以实现从原始媒体资源中获取视频指定时间的缩略图。
方案描述
场景一:自动生成相册中视频的缩略图
效果图

方案
1.通过photoAccessHelper的getAlbums方法获取获取视频相册对象。
2.通过视频检索条件调用album.getAssets方法,获取视频对象。
3.调用 Asset.getThumbnail接口获取视频对象的缩略图(pixelMap)。
4.通过image组件显示pixelMap。
核心代码
async getThumbnail() {
//建立视频检索条件,用于获取视频
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let fetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: predicates
};
//获取视频相册
let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.VIDEO);
let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject();
console.info('get video album successfully, albumUri: ' + album.albumUri);
//获取视频相册的视频资源
let videoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await album.getAssets(fetchOptions);
//调用FetchResult.getFirstObject接口获取第一个视频。
let photoAsset: photoAccessHelper.PhotoAsset = await videoFetchResult.getFirstObject();
console.info('video album getAssets successfully, photoAsset displayName: ' + photoAsset.displayName);
try {
console.info('getAssets photoAsset.displayName : ' + photoAsset.displayName);
// let size: image.Size = { width: 350, height: 300 };
//调用PhotoAsset.getThumbnail获取图片的缩略图的PixelMap
this.pixelMapp = await photoAsset.getThumbnail();
let imageInfo: image.ImageInfo = await this.pixelMapp.getImageInfo()
console.info('getThumbnail successful, pixelMap ImageInfo size: ' + JSON.stringify(imageInfo.size));
videoFetchResult.close();
albumFetchResult.close();
} catch (err) {
console.error('getThumbnail failed with err: ' + err);
}
}
场景二:指定时间获取视频的缩略图
方案
1. 通过用createAVImageGenerator()创建AVImageGenerator对象。
2. 设置资源:需要设置AVImageGenerator对象的属性fdSrc(表示文件描述符)。
3. 获取指定时间点的缩略图:调用fetchFrameByTime(),传入具体时间,根据获取的缩略图时间点与视频帧的对应关系,可以获取到一个PixelMap对象,该对象可用于图片显示。

取的缩略图时间点与视频帧的对应关系AVImageQueryOptions。

4. 间隔一秒时间获取视频缩略图。
5. 释放资源:调用release()销毁avImageGenerator实例,释放资源。
核心代码
//申明缩略图时间点与视频帧的对应关系。
let queryOption = media.AVImageQueryOptions.AV_IMAGE_QUERY_CLOSEST_SYNC
//缩略图的格式参数。
let param: media.PixelMapParams = {
width: 300,
height: 300,
}
async aboutToAppear(): Promise<void> {
// 创建AVImageGenerator对象
avImageGenerator = await media.createAVImageGenerator()
// 设置fdSrc
avImageGenerator.fdSrc = await getContext(this).resourceManager.getRawFd('VID_1713928724_004.mp4');
}
async testFetchFrameByTime(i: number) {
// 获取缩略图(promise模式)
this.pixelMap = await avImageGenerator.fetchFrameByTime(i, queryOption, param)
}
//间隔1秒获取视频缩略图
onClick(() => {
i = i + 1000000;
Logger.info("current i is :" + i);
this.testFetchFrameByTime(i)
})
Image(this.pixelMap).width(300).height('30%')// .syncLoad(true)
.margin({
top: 20
})
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
点击领取→【纯血版鸿蒙全套最新学习资料】(安全链接,放心点击)希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
鸿蒙(HarmonyOS NEXT)最新学习路线
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
HarmonyOS Next 最新全套视频教程
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
- ArkTS语言
- 安装DevEco Studio
- 运用你的第一个ArkTS应用
- ArkUI声明式UI开发
- .……
《鸿蒙开发进阶》
- Stage模型入门
- 网络管理
- 数据管理
- 电话服务
- 分布式应用开发
- 通知与窗口管理
- 多媒体技术
- 安全技能
- 任务管理
- WebGL
- 国际化开发
- 应用测试
- DFX面向未来设计
- 鸿蒙系统移植和裁剪定制
- ……
《鸿蒙进阶实战》
- ArkTS实践
- UIAbility应用
- 网络案例
- ……
大厂面试必问面试题
鸿蒙南向开发技术
鸿蒙APP开发必备
鸿蒙生态应用开发白皮书V2.0PDF
总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。


1072

被折叠的 条评论
为什么被折叠?



