EasyPlayerPro 全屏模式下黑屏问题解决

发现问题

2017.12.21有客户反馈部分视频源在全屏模式下显示黑屏。

分析问题

EasyPlayerPro由于没有实现单个窗口全屏,故没有暴露该问题。于是我快马加鞭,加上了单个窗口完全全屏,即把控制区全部隐藏,仅将视频铺满整个屏幕。

复现问题发现其实是1080P的视频在全屏状态下显示黑屏,且显示器分辨率刚好是1080P,并且是GDI显示模式。

解决问题

EasyPlayerPro 全屏模式下黑屏问题解决

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

EasyPlayerPro 全屏模式下黑屏问题解决