HarmonyOS鸿蒙Next中XComponent组件播放渲染yuv视频文件,仅显示了1帧,怎么渲染播放整个视频文件
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;
}
});
});
});