问题描述
使用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的播放的正常效果:
- 而实际代码的渲染效果:
原因:
不是YUV转RGB公式的问题,而是我将YUV的排列成像素点的方式搞成yuv444的,所以颜色偏移不正常,但Y图片渲染正常。
假设YUV420p的二进制数据如下:
映射出的像素点为: