为什么要做实时音量调节

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直播播放器的扩展功能,在好多行业用处很大,如教育类、监控类多窗口(大屏环境下)播放场景,感兴趣的开发者可以试试看。

Windows平台RTMP/RTSP播放器实现实时音量调节的更多相关文章

  1. Android平台RTMP/RTSP播放器开发系列--解码和绘制

    本文主要抛砖引玉,粗略介绍下Android平台RTMP/RTSP播放器中解码和绘制相关的部分(Github). 解码 提到解码,大家都知道软硬解,甚至一些公司觉得硬解码已经足够通用,慢慢抛弃软解了,如 ...

  2. Android、iOS平台RTMP/RTSP播放器实时音量调节

    介绍移动端RTMP.RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对 ...

  3. 如何实现Windows平台RTMP播放器/RTSP播放器播放窗口添加OSD文字叠加

    好多开发者在做Windows平台特别是单屏多画面显示时,希望像监控摄像机一样,可以在播放画面添加OSD台标,以实现字符叠加效果,大多开发者可很轻松的实现以上效果,针对此,本文以大牛直播SDK (Git ...

  4. EasyPlayer RTSP播放器:一个适用于安防行业的工具利器(EasyPlayer Windows v2.0.17.0709)

    本文转自EasyDarwin开源团队成员Sword的博客:http://blog.csdn.net/swordtwelve EasyPlayer(Windows) v2.0.17.0709版本又更新发 ...

  5. Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器

    基于NDK开发Android平台RTSP播放器 最近做了不少android端的开发,有推流.播放.直播.对讲等各种应用,做了RTMP.RTSP.HTTP-FLV.自定义等各种协议,还是有不少收获和心得 ...

  6. RTSP播放器开发填坑之道

    好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTSP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延 ...

  7. EasyPlayer RTSP播放器运行出现: Unable to load DLL 找不到指定的模块。exception from HRESULT 0x8007007E 解决方案

    最近有EasyPlayer RTSP播放器的开发者反馈,在一台新装的Windows Server 2008的操作系统上运行EasyPlayer RTSP播放器出现"Unable to loa ...

  8. 基于Live555,ffmpeg的RTSP播放器直播与点播

    基于Live555,ffmpeg的RTSP播放器直播与点播 多路RTSP高清视频播放器下载地址:http://download.csdn.net/detail/u011352914/6604437多路 ...

  9. 几款优秀的点播、RTSP/RTMP直播播放器介绍

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

随机推荐

  1. 3D大场景展示功能你了解多少?见详解!

    裸眼3D技术的出现打破了真实与虚拟的界限,人们不仅希望能够体验奇妙的虚拟场景,也希望足不出户在短短几分钟内就能看到遍布各地的场景,希望能实时对接关键数据. 裸眼3D技术的出现打破了真实与虚拟的界限,人 ...

  2. Sublime Text 新建代码片段(图解)

    新建代码片段 1.打开NEW Snippet- 2.编辑代码片段 3.设置快捷键,按tab键执行 更多内容请见原文,原文转载自:https://blog.csdn.net/weixin_4451949 ...

  3. 监控pos收银机

    1.打开pos收银机snmp功能 控制面板-->程序和功能-->启用或关闭windows功能→简单网络管理协议(SNMP) 2.配置snmp服务 控制面板-->管理工具-->服 ...

  4. python小题目练习(十)

    题目:根据生日判断星座 需求:实现如下图所示结果 代码展示: """Author:mllContent:根据生日判断星座Date:2020-11-23"&quo ...

  5. ASP.NET Core 根据环境变量支持多个 appsettings.json配置文件 (开发和生产)

    新建一个项目,web根目录会出现一个 appsettings.json  配置文件, 此时添加--新建项,输入  appsettings.Development.json 再新增一个,appsetti ...

  6. Session会话 Cookie JSTL标签

    Cookie  1) HTTP是无状态协议(连接结束后就自动断开),服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我 ...

  7. NC15665 maze

    题目链接 题目 题目描述 小明来到一个由n x m个格子组成的迷宫,有些格子是陷阱,用'#'表示,小明进入陷阱就会死亡,'.'表示没有陷阱.小明所在的位置用'S'表示,目的地用'T'表示. 小明只能向 ...

  8. 4-7 CS后台项目练习-1

    1. 关于此项目 此项目是一个自营性质电商类型的项目. 当前目标是设计后台管理相关功能. 2. 关于项目的开发流程 开发项目的标准流程应该有:需求分析.可行性分析.总体设计.详细设计等. 建议课后学习 ...

  9. 【Python3】列表字典集合元组

    1 列表 1.1 定义与索引 在Python中,第一个列表元素的下标为 0通过将索引指定为 -1 可以让Python返回最后一个列表元素 inventory = ['sword', 'armor', ...

  10. 第八天pyhton3 函数的返回值、作用域

    返回值 pthon函数使用return语句返回"返回值": 所有函数都有返回值,如果没有return语句,隐式调用return None: return 语句并不一定是函数的语句块 ...