EasyPlayerPro 全屏模式下黑屏问题解决
发现问题
2017.12.21有客户反馈部分视频源在全屏模式下显示黑屏。
分析问题
EasyPlayerPro由于没有实现单个窗口全屏,故没有暴露该问题。于是我快马加鞭,加上了单个窗口完全全屏,即把控制区全部隐藏,仅将视频铺满整个屏幕。
复现问题发现其实是1080P的视频在全屏状态下显示黑屏,且显示器分辨率刚好是1080P,并且是GDI显示模式。
解决问题
GDI显示视频使用的是DrawDibDraw函数,后经调试,发现是坐标的问题,修改以下三行代码:
SetWindowExtEx(gdiRenderObj.canvas.hDCMemRender, 1, -1, &szWindowExt);
::SetViewportOrgEx(gdiRenderObj.canvas.hDCMemRender, rcWindow.left, rcWindow.bottom, &ptOrg); //2017.11.28 rcWindow.bottom-1, 解决显示时顶部一条黑线问题
::SetViewportExtEx(gdiRenderObj.canvas.hDCMemRender, 1, 1, &szViewportExt);
然后在DrawDibDraw函数中将height-1(必须,否则不能正常显示)。
BOOL bRet = ::DrawDibDraw(gdiRenderObj.hDrawDIB,
gdiRenderObj.canvas.hDCMemRender,
dstL,//rc.left, // dest : left pos
dstT,//rc.top, // dest : top pos
//-1, // don't zoom x
//-1, // don't zoom y
dstW,
dstH-1,
pbih, // bmp header info
pBuf, // bmp data
iSrcLeft, // src :left
iSrcTop, // src :top
iSrcWidth, // src : width
iSrcHeight, // src : height
0//DDF_SAME_DRAW // use prev params....
);
解决了这个问题,就可以顺利播放了。
关于EasyPlayerPro
EasyPlayerPro是一款全功能的流媒体播放器,支持RTSP、RTMP、HTTP、HLS、UDP、RTP、File等多种流媒体协议播放、支持本地文件播放,支持本地抓拍、本地录像、播放旋转、多屏播放、倍数播放等多种功能特性,核心基于ffmpeg,稳定、高效、可靠、可控,支持Windows、Android、iOS三个平台,目前在多家教育、安防、行业型公司,都得到的应用,广受好评!
EasyPlayerPro:https://github.com/EasyDSS/EasyPlayerPro