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

posted @   音视频牛哥  阅读(120)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示