langhuihui / jessibuca

Jessibuca是一款开源的纯H5直播流播放器
https://jessibuca.com
GNU General Public License v3.0
2.22k stars 415 forks source link

使用Jessibuca播放540x960的数据,绿屏 #152

Closed hsinor closed 2 years ago

hsinor commented 2 years ago

使用Jessibuca播放540x960的数据,YUV字节未对齐,出现绿屏现象。在使用WebGL对YUV420P进行渲染时,WebGL图像预处理默认每次取4字节的数据,但是540x960分辨率下的U、V分量宽度是540/2=270不能被4整除,导致绿屏。

bosscheng commented 2 years ago

@hsinor 有测试地址吗,我回归看下。

hsinor commented 2 years ago

目前没有测试地址,都是在自己电脑上测试,用的方法是 ffmpeg fileter 修改图片尺寸,同时推流到monibuca

bosscheng commented 2 years ago

@hsinor ffmpeg 推流的指令贴下呢。

hsinor commented 2 years ago

ffmpeg -re -stream_loop -1 -i test.mp4 -vcodec libx264 -vf scale=540:960 -f rtsp rtsp://localhost/live/test

hsinor commented 2 years ago

目前找到的解决方案是 在 webgl 初始化时,添加代码,指定WebGl预处理字节数 gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1); image

hsinor commented 2 years ago

目前找到的解决方案是 在 webgl 初始化时,添加代码,指定WebGl预处理字节数 gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1); image

但是这个对性能会有影响

hsinor commented 2 years ago

还有另外一个想法,在解码之后,memcpy取linesize而不是halfw或者width https://github.com/langhuihui/jessibuca/blob/1325ee7aad2f3be26b59d87f48794acc03346439/wasm/decoder.cpp#L287-L305 上面 memcpy(_1, _2, halfw),替换为 memcpy(_1, _2, frame->linesize[i]) 关于 linesize,参考这篇文章 Ffmpeg的数据结构AVFrame

bosscheng commented 2 years ago

@hsinor 好的,TKS ,我看下。

bosscheng commented 2 years ago

@hsinor 已添加配置项进去了,默认是不开启的。