1# 获取视频缩略图 2 3使用AVImageGenerator可以实现从原始媒体资源中获取视频指定时间的缩略图,本开发指导将以获取一个视频资源的缩略图作为示例,向开发者讲解AVImageGenerator相关功能。 4 5获取视频资源的缩略图的全流程包含:创建AVImageGenerator对象,设置资源,获取缩略图,销毁资源。 6 7## 开发步骤及注意事项 8 9详细的API说明请参考[AVImageGenerator API参考](../../reference/apis-media-kit/js-apis-media-sys.md#avimagegenerator11)。 10 111. 使用createAVImageGenerator()创建实例。 12 132. 设置资源:需要设置属性fdSrc(表示文件描述符)。 14 > **说明:** 15 > 16 > 开发者需根据实际情况,确认资源有效性并设置fdSrc, 可以使用ResourceManager.getRawFd打开HAP资源文件描述符,使用方法可参考[ResourceManager API参考](../../reference/apis-localization-kit/js-apis-resource-manager.md#getrawfd9)。 17 183. 获取缩略图:调用fetchFrameByTime(),可以获取到一个PixelMap对象,该对象可用于图片显示。 19 204. 释放资源:调用release()销毁实例,释放资源。 21 22## 完整示例 23 24参考以下示例,设置文件描述符,获取一个视频指定时间的缩略图。 25 26```ts 27import media from '@ohos.multimedia.media' 28import image from '@ohos.multimedia.image' 29 30const TAG = 'MetadataDemo' 31@Entry 32@Component 33struct Index { 34 @State message: string = 'Hello World' 35 36 // pixelMap对象声明,用于图片显示 37 @State pixelMap: image.PixelMap | undefined = undefined; 38 39 build() { 40 Row() { 41 Column() { 42 Text(this.message).fontSize(50).fontWeight(FontWeight.Bold) 43 Button() { 44 Text('TestButton') 45 .fontSize(30) 46 .fontWeight(FontWeight.Bold) 47 } 48 .type(ButtonType.Capsule) 49 .margin({ 50 top: 20 51 }) 52 .backgroundColor('#0D9FFB') 53 .width('60%') 54 .height('5%') 55 .onClick(() => { 56 // 设置fdSrc, 获取视频的缩略图 57 this.testFetchFrameByTime() 58 }) 59 Image(this.pixelMap).width(300).height(300) 60 .margin({ 61 top: 20 62 }) 63 } 64 .width('100%') 65 } 66 .height('100%') 67 } 68 69 // 在以下demo中,使用资源管理接口获取打包在HAP内的视频文件,通过设置fdSrc属性, 70 // 获取视频指定时间的缩略图,并通过Image控件显示在屏幕上。 71 async testFetchFrameByTime() { 72 // 创建AVImageGenerator对象 73 let avImageGenerator: media.AVImageGenerator = await media.createAVImageGenerator() 74 // 设置fdSrc 75 avImageGenerator.fdSrc = await getContext(this).resourceManager.getRawFd('demo.mp4'); 76 77 // 初始化入参 78 let timeUs = 0 79 let queryOption = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC 80 let param: media.PixelMapParams = { 81 width : 300, 82 height : 300, 83 colorFormat : media.PixelFormat.RGB_565 84 } 85 86 // 获取缩略图(promise模式) 87 this.pixelMap = await avImageGenerator.fetchFrameByTime(timeUs, queryOption, param) 88 89 // 释放资源(promise模式) 90 avImageGenerator.release() 91 console.info(TAG, `release success.`) 92 } 93} 94```