canvas如何正确渲染yuv成图像?

问题描述

使用Input标签加载yuv文件,将File文件转换为Buffer,分别切割出y,u,v二进制数组,再转换成对应的RGB值,利用canvas渲染的页面上。

问题出现的环境背景及自己尝试过哪些方法

yuv文件是ffmpeg生成的。格式yuv420p,分辨率640x480,使用yuvplayer播放效果正常,但用canvas渲染不正常,我怀疑是在YUV转RGB这一步出了问题,但我不知道怎么处理,请教下大家。

相关代码

可以参考我写的示例代码:
https://codesandbox.io/s/epic...

使用的YUV转RGB公式:

R = Y + 1.402 * (V - 128);
G = Y - 0.34414 * (U - 128) - 0.71414 * (V - 128);
B = Y + 1.772 * (U - 128);

你期待的结果是什么?实际看到的错误信息又是什么?

  • 我使用yuvplayer的播放的正常效果:
    image.png
  • 而实际代码的渲染效果:
    image.png
回复
阅读 2.7k
3 个回答

原因:

不是YUV转RGB公式的问题,而是我将YUV的排列成像素点的方式搞成yuv444的,所以颜色偏移不正常,但Y图片渲染正常。

假设YUV420p的二进制数据如下:

Y0 Y1 Y2 Y3 Y5 Y6 Y7 Y8 U0 U2 V5 V7 

映射出的像素点为:

[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏