• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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```