支持Windows/Android/iOS全功能安防視頻流媒體播放器EasyPlayerPro-Win全屏模式下黑屏問題解決

流媒體播放器又叫流式媒體,是指邊傳邊播的媒體軟件。流媒體中的「流」指的是一種傳輸方式。流媒體播放器一般指能把視頻文件經過流式傳輸的方式在Internet播放的播放器。用戶經過一邊不斷接受數據而後一遍播放數據達到一個流媒體的傳輸方式。canvas

網頁流媒體播放器

EasyPlayerPro是一款簡單精煉,易用,高效,穩定的流媒體播放器,支持RTSP(TCP / UDP上的RTP),RTMP,HTTP,HLS,TCP,UDP等多種流媒體協議,支持多種編碼格式的流媒體音視頻直播流,點播流,文件播放。函數

9f655b6d2ddba2e9e11777048974bd61.png

EasyPlayerPro-Win全屏模式下黑屏

對於每一位用戶反饋、諮詢的問題,咱們通常都會盡快進行排查和解決。以前有用戶反饋有部分視頻源在全屏模式下顯示黑屏,咱們接到反饋的同時立刻協同開發人員進行檢查。編碼

分析問題

通過咱們的開發檢測,發現實際上是1080P的視頻在全屏狀態下會顯示黑屏,且顯示器分辨率恰好是1080P,而且是在GDI的顯示模式下。spa

解決問題

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(必須,不然不能正常顯示);code

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....
        );

2.jpg

相關文章
相關標籤/搜索