日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows平台RTMP|RTSP播放器实现画面全屏功能

發布時間:2025/3/12 windows 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows平台RTMP|RTSP播放器实现画面全屏功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在Windows平臺實現RTSP或者RTMP播放的時候,有個功能是繞不開的,那就是播放窗口全屏。本文就以大牛直播SDK(官方)的Windows播放器為例,大概講下大概實現:

全屏播放需要考慮的點不多:

第一:視頻播放后,全屏的意義;

第二:全屏后,是否等比例顯示,我們的設計原則是,之前等比例顯示的,繼續等比例顯示,之前鋪滿的,繼續鋪滿;

第三:ESC退出全屏。

本文以C++的demo為例,具體實現如下:

void nt_wrapper_render_wnd::FullScreenSwitch() {if ( !::IsWindow(m_hWnd) )return;if (player_handle_ != nullptr){player_api_.SetRenderARGBLogo(player_handle_, nullptr, 0, 0, 0, 0, 0, 0, 0);}if ( !IsFullScreen() ){if ( !IsCanFullScreen() )return;auto old_wnd = GetParent();if ( old_wnd == NULL )return;old_parent_wnd_ = old_wnd->m_hWnd;ASSERT(::IsWindow(old_parent_wnd_));GetWindowRect(&old_rect_);old_wnd->ScreenToClient(old_rect_);HMONITOR hMonitor = ::MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);if (hMonitor == NULL)return;MONITORINFOEX mi;mi.cbSize = sizeof(mi);if ( !GetMonitorInfo(hMonitor, &mi) )return;::SetParent(m_hWnd, NULL);auto wnd_styles = GetWindowLongPtr(m_hWnd, GWL_STYLE);wnd_styles = wnd_styles & (~WS_CHILD); wnd_styles |= WS_POPUP;::SetWindowLongPtr(m_hWnd, GWL_STYLE, wnd_styles);// 隱藏老窗口::ShowWindow(old_parent_wnd_, SW_HIDE);is_full_screen_ = true;::SetWindowPos(m_hWnd, HWND_TOP, mi.rcMonitor.left,mi.rcMonitor.top,mi.rcMonitor.right - mi.rcMonitor.left,mi.rcMonitor.bottom - mi.rcMonitor.top,SWP_FRAMECHANGED);::SetForegroundWindow(m_hWnd);::RedrawWindow(m_hWnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW| RDW_ERASE);::RedrawWindow(NULL, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW| RDW_ERASE);}else{::ShowWindow(old_parent_wnd_, SW_SHOW);auto wnd_styles = GetWindowLongPtr(m_hWnd, GWL_STYLE);wnd_styles = wnd_styles & (~WS_POPUP);wnd_styles |= WS_CHILD;auto ret = SetWindowLongPtr(m_hWnd, GWL_STYLE, wnd_styles);::SetParent(m_hWnd, old_parent_wnd_);is_full_screen_ = false;MoveWindow(old_rect_, TRUE);} }

ESC處理:

void nt_wrapper_render_wnd::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {// TODO: Add your message handler code here and/or call default// 全屏的時候,按ESC將退出全屏if ( nChar == VK_ESCAPE ){if ( IsFullScreen() ){FullScreenSwitch();}}CWnd::OnChar(nChar, nRepCnt, nFlags); }

C#的實現也非常簡單,感興趣的可自行研究。

總結

以上是生活随笔為你收集整理的Windows平台RTMP|RTSP播放器实现画面全屏功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。