Windows平台RTMP/RTSP播放器如何实现实时音量调节

简介: RTMP或RTSP直播播放音量调节,主要用于多实例(多窗口)播放场景下,比如同时播放4路RTMP或RTSP流,如果音频全部打开,几路audio同时打开,可能会影响用户体验,我们通用的做法是支持播放端实时静音,更细粒度的做法是可以实时调节每一路RTMP/RTSP流的音量。

为什么要做实时音量调节

RTMP或RTSP直播播放音量调节,主要用于多实例(多窗口)播放场景下,比如同时播放4路RTMP或RTSP流,如果音频全部打开,几路audio同时打开,可能会影响用户体验,我们通用的做法是支持播放端实时静音,更细粒度的做法是可以实时调节每一路RTMP/RTSP流的音量。

音量调节接口设计

RTMP或RTSP直播播放端音量调节功能设计主要考虑到一点,和市面通用的本地播放器或点播播放器功能对齐(如VLC、PotPlayer等),音量可以实时调整即可,本文以大牛直播SDK的Windows平台RTSP直播播放SDK/RTMP直播播放SDK的C++接口demo为例(C#亦可,具体可参照 Github),简单介绍下相关的接口设计和用法。

    /*
    设置播放音量, 范围是[0, 100], 0是静音,100是最大音量, 默认是100
    调用正确返回NT_ERC_OK
    */
    NT_UINT32(NT_API *SetAudioVolume)(NT_HANDLE handle, NT_INT32 volume);

具体调用:


C++的demo以CSliderCtrl控件为例,音量调节力度,设置到[0, 100], 设置为0时,实时静音,设置为100时,默认原音量输出,具体调用如下:

  CSliderCtrl slider_audio_volume_;
  player_api_.SetAudioVolume(player_handle_, slider_audio_volume_.GetPos());
void CSmartPlayerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
  // TODO: Add your message handler code here and/or call default
  if (IDC_SLIDER_VOLUME == pScrollBar->GetDlgCtrlID())
  {
    switch (nSBCode)
    {
    case SB_LINELEFT:
    case SB_LINERIGHT:
    case SB_PAGELEFT:
    case SB_PAGERIGHT:
    case SB_LEFT:
    case SB_RIGHT:
    {
      /*std::wostringstream wss;
      wss << L"OnHScroll nSBCode:" << nSBCode << " nPos:" << nPos << " GetPos():" << slider_audio_device_volume_.GetPos()
      << "\r\n";
      OutputDebugString(wss.str().c_str());*/
      if (is_playing_ && player_handle_ != NULL)
      {
        player_api_.SetAudioVolume(player_handle_, slider_audio_volume_.GetPos());
      }
    }
    break;
    case  SB_THUMBPOSITION:
    {
      /*std::wostringstream wss;
      wss << L"SB_THUMBPOSITION" << " nPos:" << nPos << " GetPos():" << slider_audio_device_volume_.GetPos()
      << "\r\n";
      OutputDebugString(wss.str().c_str());*/
    }
    break;
    case SB_THUMBTRACK:
    {
      /*std::wostringstream wss;
      wss << L"SB_THUMBTRACK" << " nPos:" << nPos << " GetPos():" << slider_audio_device_volume_.GetPos()
      << "\r\n";
      OutputDebugString(wss.str().c_str());*/
      if (is_playing_ && player_handle_ != NULL)
      {
        player_api_.SetAudioVolume(player_handle_, slider_audio_volume_.GetPos());
      }
    }
    break;
    default:
      break;
    }
  }
  CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}

实时音量调节作为RTSP或RTMP直播播放器的扩展功能,在好多行业用处很大,如教育类、监控类多窗口(大屏环境下)播放场景,感兴趣的开发者可以试试看。

相关文章
|
2月前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
231 4
|
2月前
|
NoSQL Shell MongoDB
Windows 平台安装 MongoDB
10月更文挑战第10天
50 0
Windows 平台安装 MongoDB
|
2月前
|
并行计算 开发工具 异构计算
在Windows平台使用源码编译和安装PyTorch3D指定版本
【10月更文挑战第6天】在 Windows 平台上,编译和安装指定版本的 PyTorch3D 需要先安装 Python、Visual Studio Build Tools 和 CUDA(如有需要),然后通过 Git 获取源码。建议创建虚拟环境以隔离依赖,并使用 `pip` 安装所需库。最后,在源码目录下运行 `python setup.py install` 进行编译和安装。完成后即可在 Python 中导入 PyTorch3D 使用。
219 0
|
Web App开发 负载均衡 测试技术
Windows平台分布式架构实践 - 负载均衡
原文:Windows平台分布式架构实践 - 负载均衡 概述   最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行。
1567 0
|
Web App开发 负载均衡 算法
Windows平台分布式架构实践 - 负载均衡(下)
原文:Windows平台分布式架构实践 - 负载均衡(下) 概述   我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效果,可以说还是非常的理想的。
1506 0
|
14天前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
|
19天前
|
监控 安全 网络安全
Windows Server管理:配置与管理技巧
Windows Server管理:配置与管理技巧
56 3
|
23天前
|
存储 安全 网络安全
Windows Server 本地安全策略
由于广泛使用及历史上存在的漏洞,Windows服务器成为黑客和恶意行为者的主要攻击目标。这些系统通常存储敏感数据并支持关键服务,因此组织需优先缓解风险,保障业务的完整性和连续性。常见的威胁包括勒索软件、拒绝服务攻击、内部威胁、恶意软件感染等。本地安全策略是Windows操作系统中用于管理计算机本地安全性设置的工具,主要包括用户账户策略、安全选项、安全设置等。实施强大的安全措施,如定期补丁更新、网络分段、入侵检测系统、数据加密等,对于加固Windows服务器至关重要。
|
2月前
|
边缘计算 安全 网络安全
|
2月前
|
数据安全/隐私保护 Windows
安装 Windows Server 2019
安装 Windows Server 2019