主页 > 其他  > 

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

鸿蒙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 })
标签:

鸿蒙5.0实战案例:基于原生能力获取视频缩略图由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“鸿蒙5.0实战案例:基于原生能力获取视频缩略图