HarmonyOS鸿蒙Next中如何获取视频第一帧作为封面

HarmonyOS鸿蒙Next中如何获取视频第一帧作为封面 手机录制的视频,如何获取视频第一帧作为封面,麻烦给个示例代码

5 回复

更多关于HarmonyOS鸿蒙Next中如何获取视频第一帧作为封面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


视频封面可以用缩略图:

async uriGetAssets(fileUri:string) {
  try {
    let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(this.context);
    let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
    // 配置查询条件,使用PhotoViewPicker选择图片返回的uri进行查询
    predicates.equalTo('uri', fileUri);
    let fetchOption: photoAccessHelper.FetchOptions = {
      fetchColumns: ['duration'],
      predicates: predicates
    };
    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption);
    // 得到uri对应的PhotoAsset对象,读取文件的部分信息
    const asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
    console.info('asset displayName: ', asset.displayName);
    console.info('asset uri: ', asset.uri);
    console.info('asset photoType: ', asset.photoType);
    // 获取时长
    let duration: photoAccessHelper.PhotoKeys = photoAccessHelper.PhotoKeys.DURATION;
    let photoAssetDuration: photoAccessHelper.MemberType = asset.get(duration.toString());
    console.info('asset duration: ', photoAssetDuration);
    // 获取缩略图
    asset.getThumbnail((err, pixelMap) => {
      if (err == undefined) {
        this.pixelMap = pixelMap
        console.info('getThumbnail successful ' + JSON.stringify(pixelMap));
      } else {
        console.error('getThumbnail fail', err);
      }
    });
  } catch (error){
    console.error('uriGetAssets failed with err: ' + JSON.stringify(error));
  }
}

在HarmonyOS鸿蒙Next中,获取视频第一帧作为封面可以通过使用MediaMetadataRetriever类来实现。首先,你需要初始化MediaMetadataRetriever对象,然后通过setDataSource方法设置视频文件路径或URI。接着,使用getFrameAtTime方法获取视频的第一帧图像。最后,将获取到的图像数据转换为PixelMapImage对象,以便在UI中显示或进一步处理。

具体步骤如下:

  1. 初始化MediaMetadataRetriever对象:

    let retriever = new media.MediaMetadataRetriever();
    
  2. 设置视频数据源:

    retriever.setDataSource(videoFilePath);
    
  3. 获取视频第一帧:

    let frame = retriever.getFrameAtTime(0, media.MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
    
  4. 将帧数据转换为PixelMapImage对象:

    let pixelMap = frame.pixelMap;
    
  5. 在UI中显示或处理PixelMap对象。

通过以上步骤,你可以在HarmonyOS鸿蒙Next中成功获取视频的第一帧作为封面。

在HarmonyOS鸿蒙Next中,可以通过AVPlayerAVImageGenerator来获取视频的第一帧作为封面。以下是使用AVImageGenerator的示例代码:

// 创建AVImageGenerator实例
AVImageGenerator generator = new AVImageGenerator();
// 设置视频路径
generator.setSource("/sdcard/video.mp4");
// 获取第一帧
PixelMap pixelMap = generator.createThumbnail(0);
// 将PixelMap转换为Image并显示
Image image = new Image(this);
image.setPixelMap(pixelMap);

此代码会从指定视频路径中提取第一帧,并将其显示在UI中。确保已添加相关权限和依赖库。

回到顶部