EasyPlayerPro Windows播放器全屏模式下GDI显示出现黑屏问题解决

问题来源

  • 2017.12.21
    前天有杭州某教育领域客户反馈有部分视频源在全屏模式下显示黑屏;

问题复现

EasyPlayerPro由于没有实现单个窗口完全全屏,故没有暴露该问题,晚上加班,加上单个窗口完全全屏,即把控制区全部隐藏,仅将视频铺满整个屏幕;

改完,电脑罢工了,今天上午还蓝屏两次,ASUS, 伤透了我的心…

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

又是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

点击链接加入群【EasyPlayer & EasyPlayerPro】:544917793

技术交流

获取更多信息

EasyDarwin开源流媒体服务器:www.EasyDarwin.org

EasyDSS商用流媒体解决方案:www.EasyDSS.com

EasyNVR无插件直播方案:www.EasyNVR.com

Copyright © EasyDarwin Team 2012-2017

EasyDarwin

posted @ 2017-12-26 06:34  Babosa|EasyDarwin  阅读(329)  评论(0编辑  收藏  举报