当前位置: 首页 > news >正文

鸿蒙5.0实战案例:基于原生能力获取视频缩略图

往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录)

✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~

✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~

✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

✏️ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

✏️ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

✏️ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

✏️ 记录一场鸿蒙开发岗位面试经历~

✏️ 持续更新中……


场景描述

使用 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

})

相关文章:

  • PyQt——信号与槽
  • 橙心同步助手更新,,支持博客园、头条和语雀
  • 数据结构--队列(C语言实现)
  • 【UCB CS 61B SP24】Lecture 17 - Data Structures 3: B-Trees 学习笔记
  • EMO模型详解及代码复现
  • (保姆级教程)Windows系统本地部署通义万相2.1视频生成模型
  • C++双指针法(尺取法)原理及模板代码与例题
  • 基于springboot的酒店客房管理系统----数据库课程设计
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JavaWeb的诞生:从 CGI 到 Servlet 的技术演进
  • VulnHub-DarkHole_2靶机搭建保姆级教程2025
  • C++杂记——RAII (Resource Acquisition Is Initialization)
  • 【Java项目】基于SpringBoot的会员制医疗预约服务管理信息系统
  • 算法 BFS搜爆路径问题
  • 深搜专题6:迷宫问题
  • Python爬虫:一文掌握PyQuery模块
  • 【漫话机器学习系列】109.线性无关(Linearly Independent)
  • Rust~String、str、str、String、Box<str> 或 Box<str>
  • 从零开始构建高效Spring Boot应用:实战案例与最佳实践
  • 【Linux】I/O操作
  • k8s学习记录:环境搭建二(基于Kubeadmin)
  • 菲律宾中期选举初步结果出炉,杜特尔特家族多人赢得地方选举
  • 来沪一个月几乎未花住宿钱,女子虚构卫生问题屡薅酒店羊毛被刑拘
  • A股三大股指涨跌互现:银行股领涨,两市成交12915亿元
  • 马上评丨火车穿村而过多人被撞身亡,亡羊补牢慢不得
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵
  • 马上评丨75万采购300元设备,仅仅终止采购还不够