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

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

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

1 回复

更多关于HarmonyOS鸿蒙Next中XComponent组件播放渲染yuv视频文件,仅显示了1帧,怎么渲染播放整个视频文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


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;
      }
    });
  });
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!