HarmonyOS 视频缩略图问题

我现在有一个视频url地址,如何获取该视频的每一秒(或者指定时间)的缩略图

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

参考demo

import { media } from '@kit.MediaKit';
import { common } from '@kit.AbilityKit';
import fs from '@ohos.file.fs';
import { BusinessError, request } from '@kit.BasicServicesKit';
import { image } from '@kit.ImageKit';

// 获取应用文件路径
let context = getContext(this) as common.UIAbilityContext;
let cacheDir = context.cacheDir;
@Entry
@Component
struct Index {

  @State message: string = 'Hello World';
  // pixelMap对象声明,用于图片显示
  @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: '',
        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);
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
缩略图,如何获取文件的缩略图
750浏览 • 1回复 待解决
HarmonyOS读取视频缩略图问题求助
659浏览 • 1回复 待解决
HarmonyOS 根据视频路径生成缩略图
78浏览 • 1回复 待解决
鸿蒙能获取图片指定大小的缩略图
9620浏览 • 1回复 待解决
HarmonyOS视频解码问题
729浏览 • 1回复 待解决
HarmonyOS video视频问题
15浏览 • 1回复 待解决
HarmonyOS 视频录制相关问题
433浏览 • 0回复 待解决
HarmonyOS 视频列表播放问题
75浏览 • 1回复 待解决