为什么要做实时音量调节

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