支持Windows、Android、iOS三個平臺的全功能安防視頻流媒播放器EasyPlayerPro-Win全屏模式下黑屏問題解決

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

網頁流媒體播放器

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

 

EasyPlayerPro-Win全屏模式下黑屏

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

分析問題

經過我們的開發檢測,發現其實是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....
        );

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章