HarmonyOS 录制视频后获取封面图和时长

使用系统自带的功能录制视频后,返回的pickerResult里面只包含有录制结果,录制uri和录制类型,有没有比较便捷的方法能获取到录制的封面图和录制时长?

关键代码:

let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(getContext(), mediaType, pickerProfile);
return pickerResult.resultUri;
HarmonyOS
2024-12-25 17:31:34
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

请参考以下文档获取:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/user-file-uri-intro-V5#ZH-CN_TOPIC_0000001884756846

可通过以下demo实现:

import { DataType, PhotoPickerComponent, PickerController, PickerOptions } from '@ohos.file.PhotoPickerComponent';
import dataSharePredicates from '@ohos.data.dataSharePredicates';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
import { image } from '@kit.ImageKit';

@Entry
@Component
struct TestPicker {
  @State message: string = 'Hello World';
  @State pickerController: PickerController = new PickerController();
  @State videoUri: string = '';
  pickerOptions: PickerOptions = new PickerOptions();
  selectUri: string[] = [];
  testUri: string = '';
  @State pixel: image.PixelMap | undefined = undefined
  private onSelect(uri: string) {
    console.log(`select uri is ${uri}`);

  }

  aboutToAppear(): void {
    this.pickerOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE;
    this.pickerOptions.maxSelectNumber = 9;
    this.pickerOptions.isSearchSupported = false;
    this.pickerOptions.backgroundColor = '#AAFF22'
  }

  build() {
    Column() {
      PhotoPickerComponent({
        pickerOptions: this.pickerOptions,
        onSelect: (uri: string) => {
          console.log(`select uri is ${uri}`);
          this.selectUri.push(uri);
          // file://media/Photo/42/VID_1717230235_037/SVID_20240601_162215_1.mp4
        },
        onDeselect: (uri: string) => console.log(`deselect uri is ${uri}}`),
        pickerController: this.pickerController
      }).width('100%')
        .height(500)
      Button('1111')
        .onClick(async () => {
          this.pixel = await uriGetAssets(this.selectUri);
        })
      Image(this.pixel)
        .backgroundColor(Color.Green)
        .width(100)
        .height(100)
    }
    .height('100%')
    .width('100%')
  }
}

async function uriGetAssets(uri: string[]): Promise<undefined | image.PixelMap> {
  try {
    let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext());
    let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
    predicates.equalTo('uri', uri[0]);
    let fetchOption: photoAccessHelper.FetchOptions = {
      fetchColumns: [],
      predicates: predicates
    };
    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption);
    const asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
    console.info('asset displayName: ', asset.displayName);
    console.info('asset uri: ', asset.uri);
    const pixel = await new Promise<image.PixelMap>((resolve, reject) => {
      asset.getThumbnail((err, pixelMap) => {
        if (err == undefined) {
          console.info('getThumbnail successful ' + JSON.stringify(pixelMap));
          resolve(pixelMap);
        } else {
          console.error('getThumbnail fail', err);
          reject(err);
        }
      });
    });
    return pixel;
  } catch (error){
    console.error('uriGetAssets failed with err: ' + JSON.stringify(error));
    return undefined;
  }
}
分享
微博
QQ
微信
回复
2024-12-25 19:29:03
相关问题
如何录制视频并设置最大录制时长
347浏览 • 0回复 待解决
HarmonyOS 图片文件夹获取封面coverUri
504浏览 • 1回复 待解决
HarmonyOS 如何获取视频时长分辨率
65浏览 • 1回复 待解决
HarmonyOS 怎么获取视频的播放时长
515浏览 • 1回复 待解决
HarmonyOS AVDexmuer无法获取视频时长
116浏览 • 1回复 待解决
HarmonyOS如何获取视频第一帧作为封面
1324浏览 • 1回复 待解决
HarmonyOS 支持获取视频首帧吗?
333浏览 • 1回复 待解决
HarmonyOS 视频录制报错
266浏览 • 1回复 待解决