HarmonyOS 鸿蒙Next AVPlayer是什么获取本地相册里面的视频的缩略图

HarmonyOS 鸿蒙Next AVPlayer是什么获取本地相册里面的视频的缩略图 【设备信息】Mate60

【API版本】Api13

【DevEco Studio版本】5.0.7.200

【问题描述】

AVPlayer是什么获取本地相册里面的视频的缩略图,然后把缩略图用Image展示。

2 回复

AVPlayer 是 功能较完善的音视频播放ArkTS/JS API,集成了流媒体和本地资源解析,媒体资源解封装,视频解码和渲染功能,适用于对媒体资源进行端到端播放的场景,可直接播放mp4、mkv等格式的视频文件

获取视频缩放图demo 获取到的缩放图为pixelMap 只需使用image组件展示即可

// 获取应用文件路径
let context = this as common.UIAbilityContext;
let cacheDir = context.cacheDir;

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  @State pixelMap: image.PixelMap | undefined = undefined;

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.downLoad()
        })
        .height('100%')
        .width('100%')
      Image(this.pixelMap).width(300).height(300)
        .margin({
          top: 20
        })
    }
  }

  downLoad() {
    try {
      request.downloadFile(context, {
        url: 'https://sns-video-bd.xhscdn.com/stream/110/258/01e602cadc11542d010370038e7ae8b418_258.mp4',
        filePath: cacheDir + '/b.mp4'
      }).then((downloadTask: request.DownloadTask) => {
        downloadTask.on('complete', () => {
          console.info('download complete');
          this.testFetchFrameByTime(cacheDir + '/b.mp4')
        })
      }).catch((err: BusinessError) => {
        console.error(`Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);
      });
    } catch (error) {
      let err: BusinessError = error as BusinessError;
      console.error(`Invoke downloadFile failed, code is ${err.code}, message is ${err.message}`);
    }
  }

  // 获取缩略图
  async testFetchFrameByTime(filePath: string) {
    // 创建AVImageGenerator对象
    let avImageGenerator: media.AVImageGenerator = await media.createAVImageGenerator()
    let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
    let avFileDescriptor: media.AVFileDescriptor = { fd: file.fd };
    avImageGenerator.fdSrc = avFileDescriptor;
    // 初始化入参
    let timeUs = 0
    let queryOption = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC
    let param: media.PixelMapParams = {
      width: 300,
      height: 400,
    }
    // 获取缩略图(promise模式)
    this.pixelMap = await avImageGenerator.fetchFrameByTime(timeUs, queryOption, param)
    // 释放资源(promise模式)
    avImageGenerator.release()
    console.info(`release success.`);
    fs.closeSync(file);
  }
}

获取视频缩放图demo:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/avimagegenerator-V5

image组件参考指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-image-V5#image-1

AVPlayer 参考指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-media-V5#avplayer9

更多关于HarmonyOS 鸿蒙Next AVPlayer是什么获取本地相册里面的视频的缩略图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next中的AVPlayer是一个用于多媒体播放的组件,支持音视频的播放控制。要获取本地相册中视频的缩略图,可以使用AVPlayer的相关API结合MediaLibrary模块来实现。

首先,通过MediaLibrary模块获取本地相册中的视频文件。MediaLibrary提供了访问和管理媒体文件的能力,可以查询到视频文件的基本信息,如路径、时长等。

接下来,使用AVPlayergetVideoThumbnail方法来获取视频的缩略图。该方法可以从指定的视频文件中提取某一帧作为缩略图。通常,可以指定时间点来获取特定帧,或者使用默认的时间点获取第一帧作为缩略图。

以下是简要的步骤:

  1. 使用MediaLibrary查询本地相册中的视频文件。
  2. 通过AVPlayergetVideoThumbnail方法获取视频的缩略图。
  3. 将获取的缩略图显示在UI上或进行其他处理。

需要注意的是,获取缩略图的过程可能会涉及到异步操作,因此需要在合适的时机处理回调结果。

回到顶部