1. 程式人生 > 其它 >EasyPlayerPro-win配置全屏模式不能全屏是為什麼

EasyPlayerPro-win配置全屏模式不能全屏是為什麼

最近遇到一個專案團隊是做全景視訊播放的,希望用EasyPlayerPro做一個客戶端程式,但是在除錯DEMO的時候遇到一個問題,即配置了全屏模式後,視訊只能出現在窗體左上角。

EasyPlayerPro播放介面:

針對該問題,我們與這個專案團隊進行了詳細溝通,才得知當前的顯示器是多屏拼接顯示的,用Nvidia的Surround配置多個顯示器拼接成一個顯示器來用,目的是提高顯示效果。但是就算如此,也不應該在本應全屏的時候不能全屏顯示,最終只能迴歸到檢查程式碼。

在檢查到程式碼FullScreen()時,忽然看到了如下程式碼:

ShowWindow(SW_MAXIMIZE);

這個程式碼透露了一定的資訊,讓我們開始思考當前指定視窗最大化是否不能對多屏顯示起作用,或者只是對當前第一塊螢幕有效?於是我們開始實驗,去除最大化操作,這時候程式正好出現在螢幕中間,通過拖拽的方式可以拉到鋪滿整個螢幕的最大化效果,於是又檢查了下當前螢幕解析度,解析度為:7688*4328。

既然通過拖拽的方式可以實現最大化的需求,我們是否可以換個思路,直接將視窗指定解析度,於是做如下試驗:

SetWindowPos(NULL, 0, 0, 7688, 4328, 0)

從左上角開始繪製窗體的時候就指定好窗體的寬和高,然後再配合去除窗體邊框等,除錯執行後,過然可以解決問題,此時能果斷解決網友遇到的“全屏”問題。

關鍵程式碼如下:

// 去掉標題欄  
ModifyStyle(WS_CAPTION, 0); //(WS_POPUP | WS_BORDER | WS_CAPTION | WS_SYSMENU, WS_CHILD);
// 去掉邊框
ModifyStyleEx(WS_EX_DLGMODALFRAME, 0);  
//視窗位置和大小保持原來不變
SetWindowPos(NULL, 0, 0, 7688, 4328, 0);//SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED); 
//SetWindowPos(NULL, 0, 0, 1920, 1080, 0);//SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED); 
//最大化視窗
ShowWindow(SW_NORMAL); 
//ShowWindow(SW_MAXIMIZE);//不能再使用最大化,此最大化只是針對當前螢幕最大化

拓展

EasyPlayerPro雖然支援了幾乎所有的流媒體協議,但是在很多場景和需求下面(例如:SDK包大小,自定義協議,資料加密),EasyPlayerPro的定製成本比較高,靈活程度沒有EasyPlayer-RTSP和EasyPlayer-RTMP專用播放器的靈活程度高,EasyPlayerPro考慮的是通用性,而專用播放器考慮的是定製性。因此如果還想了解TSINGSEE青犀視訊開發的其他專用播放器,歡迎聯絡我們,目前EasyPlayer系列已經支援H265編碼的視訊播放,同時支援整合,歡迎瞭解。