HarmonyOS XComponent组件播放渲染yuv视频文件,仅显示了1帧,怎么渲染播放整个视频文件

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

imageReceiver中的缓存图片个数有限,需要release() 释放图片,下一帧数据才能进来。

参考代码:

// 创建ImageReceiver对象,并设置照片参数:分辨率大小是根据前面 photoProfilesArray 获取的当前设备所支持的拍照分辨率大小去设置
let imageReceiver: image.ImageReceiver = image.createImageReceiver(2592, 1200, 4, 8);
// 获取照片显示SurfaceId
let photoSurfaceId: string = await imageReceiver.getReceivingSurfaceId();
imageReceiver.on('imageArrival', () => {
  imageReceiver.readNextImage((err: BusinessError, nextImage: image.Image) => {
    if (err || nextImage === undefined) {
      return;
    }
    nextImage.getComponent(image.ComponentType.JPEG, async (err: BusinessError, imgComponent: image.Component) => {
      if (err || imgComponent === undefined) {
        return;
      }
      if (imgComponent.byteBuffer as ArrayBuffer) {
        console.info(TAG, "接收到图片数据[" + imgComponent.byteBuffer.byteLength + "]")
        let imageName = "IMG_" + Date.parse(new Date().toString()) + ".jpg";
        let context = getContext() as common.UIAbilityContext;
        let path = context.filesDir + "/" + imageName;
        console.info(TAG, "图片路径:" + path);
        let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
        let value = fs.writeSync(file.fd, imgComponent.byteBuffer);
        if (value !== -1) {
          console.info(TAG, "图片保存成功")
          this.imageUri = fileUri.getUriFromPath(path);
          console.info(TAG, "imageUri->" + this.imageUri.toString())
          this.showMode = 1;
          this.releaseCamera();
        }
        nextImage.release() // release释放
      } else {
        return;
      }
    })
  })
})
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 如何获取视频文件的第一
52浏览 • 1回复 待解决
av_player新增支持本地音视频文件播放
2168浏览 • 1回复 待解决
Harmony 如何读取本地视频文件路径?
14823浏览 • 2回复 待解决
HarmonyOS 播放flv文件视频
27浏览 • 1回复 待解决
HarmonyOS XComponent播放视频问题
35浏览 • 1回复 待解决
HarmonyOS 怎么获取视频播放时长?
407浏览 • 1回复 待解决