最近在做tutk音视频相关的项目,在接收视频显示的时候出现了一个很奇怪的问题,就是转换后显示的图像画面是条纹状的,如下图:
我接收到的图像宽高是852*480,宽高比例约等于16/9,转换后的格式为RGBA,用sws_scale()转换代码如下:
vctx = sws_getCachedContext(vctx,
frame->width,
frame->height,
(AVPixelFormat) frame->format,
outWidth,
outHeight,
AV_PIX_FMT_RGBA,
SWS_FAST_BILINEAR,
0, 0, 0);
int h = sws_scale(vctx,
frame->data,
frame->linesize, 0,
frame->height,
data, lines);
其中,最开始的时候outWidth,outHeight都是设置为frame->width,frame->height的,但是这样出现的画面就是上图的条纹状画面,经过调试后发现,当我把输出宽高设置16/9并以4的倍数放大的时候,视频就会正常显示。
比如将输出宽高设置成640*360,1280*720,1920*1080的时候会正常显示,设置其他宽高显示就会有问题。
如果大家在显示视频的过程中遇到了这种显示为条纹状画面的问题,可以从输出图像的宽高和输出图像的格式这两个方面去排查。具体为什么会这样,我还在查资料,希望有高手可以指教一下。