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

简介: 我们在Windows平台实现RTSP或者RTMP播放的时候,有个功能是绕不开的,那就是播放窗口全屏。本文就以大牛直播SDK(官方)的Windows播放器为例,大概讲下大概实现:

我们在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#的实现也非常简单,感兴趣的可自行研究。

相关文章
|
3天前
|
安全 前端开发 Linux
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
29 3
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
|
2月前
|
存储 虚拟化 Docker
Docker Desktop 4.38 安装与配置全流程指南(Windows平台)
Docker Desktop 是容器化应用开发与部署的一体化工具,支持本地创建、管理和运行 Docker 容器。4.38 版本新增 GPU 加速、WSL 2 性能优化和 Kubernetes 1.28 集群管理功能,适用于微服务开发和 CI/CD 流水线搭建。安装要求为 Windows 10 2004 及以上(64 位),需启用 Hyper-V 或 WSL 2。硬件最低配置为 4GB 内存、20GB 存储和虚拟化技术支持的 CPU。安装步骤包括启用系统功能、下载并运行安装程序,完成后配置镜像加速并验证功能。常见问题涵盖 WSL 2 安装不完整、磁盘空间清理及容器外网访问等。
4679 14
|
2月前
|
固态存储 C++ 计算机视觉
Windows平台GIMP 2.10下载教程:零基础入门高级图像编辑
GIMP(GNU Image Manipulation Program)是一款开源跨平台图像编辑工具,支持图层管理、高级修图、色彩校正等功能,广泛应用于平面设计和照片修复。其优势包括全功能免费、插件生态丰富(600+扩展插件)、硬件要求低(1GB内存即可流畅运行)。本文详细介绍GIMP的软件定位、安装流程、首次配置及常见问题解答,帮助用户快速上手并充分利用其强大功能。
|
2月前
|
Unix 虚拟化 Windows
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
135 4
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
|
2月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)
139 4
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)
|
1月前
|
Linux 虚拟化 iOS开发
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
79 29
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
|
10天前
|
Ubuntu 虚拟化 Windows
无影云电脑选择哪个操作系统Windows server 2019还是Ubuntu?
在选择阿里云无影云电脑的操作系统时,Windows Server 2019 和 Ubuntu 各有优势。Windows适合依赖微软生态的企业级应用,提供图形化界面和高安全性;Ubuntu则轻量、经济,适合开源工具链和容器化部署。根据应用场景、资源占用、安全性、开发效率及成本考量,选择最适合的系统。条件允许下,可采用混合方案满足多样化需求。
|
2月前
|
存储 运维 监控
提升Windows Server环境安全性:ADAudit Plus的五大关键优势
在Windows Server环境中,内置的安全审计工具虽有用,但存在专业门槛高、耗时及功能缺失等问题。第三方工具ADAudit Plus应运而生,其五大优势包括:日志聚合、关键活动检测、定制化报告、灵活安全配置和长期日志保留,有效提升系统监控与合规能力。选择ADAudit Plus,助力企业更高效应对审计挑战,强化安全性。
|
3月前
|
安全 Unix 虚拟化
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)
95 11
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)

热门文章

最新文章