介绍移动端RTMP、RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对实时静音来说,播放端实时音量调节粒度更细,从[0, 100],用户体验更好。
为什么要做实时音量调节
RTMP或RTSP直播播放音量调节,主要用于多实例(多窗口)播放场景下,比如同时播放4路RTMP或RTSP流,如果音频全部打开,几路audio同时打开,可能会影响用户体验,我们通用的做法是支持播放端实时静音,更细粒度的做法是可以实时调节每一路RTMP/RTSP流的音量,当然,另外一个好处就是,“尽可能少的调节全局音量”,避免给系统带来不必要的“麻烦”。
音量调节接口设计
RTMP或RTSP直播播放端音量调节功能设计主要考虑到一点,和市面通用的本地播放器或点播播放器功能对齐(如VLC、PotPlayer等),音量可以实时调整即可,本文以大牛直播SDK的移动端平台RTSP直播播放SDK/RTMP直播播放SDK为例(具体可参照 Github),简单介绍下相关的接口设计和用法。
接口设计-Android平台
/** * 设置播放音量 * * @param handle: return value from SmartPlayerOpen() * * @param volume: 范围是[0, 100], 0是静音,100是最大音量, 默认是100 * * @return {0} if successful */ public native int SmartPlayerSetAudioVolume(long handle, int volume);
接口设计-iOS平台
/** * 设置播放音量 * * @param volume 范围是[0, 100], 0是静音,100是最大音量, 默认是100 * * @return {0} if successful */ - (NSInteger)SmartPlayerSetAudioVolume:(NSInteger)volume;
移动端接口调用实例
demo以SeekBar控件为例,音量调节力度,设置到[0, 100], 设置为0时,实时静音,设置为100时,默认原音量输出,具体调用如下:
Android平台:
audioVolumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { curAudioVolume = seekBar.getProgress(); audioVolumeText.setText("当前音量: " + curAudioVolume); if(playerHandle != 0) { libPlayer.SmartPlayerSetAudioVolume(playerHandle, curAudioVolume); } } });
iOS平台:
//实时音量 audioVolumeSlider = [[UISlider alloc] initWithFrame:CGRectMake(45, screen_height_/2 + 50 + 30, 120, 20)]; //初始化 audioVolumeSlider.center = CGPointMake(self.view.frame.size.width / 2 + 120, audioVolumeSlider.frame.origin.y + audioVolumeSlider.frame.size.height / 2); audioVolumeSlider.minimumValue = 0; //指定可变最小值 audioVolumeSlider.maximumValue = 100; //指定可变最大值 audioVolumeSlider.value = 100; //指定初始值 audioVolumeSlider.thumbTintColor = [UIColor whiteColor]; // 设置滑块已经划过区域的颜色 audioVolumeSlider.minimumTrackTintColor = [UIColor greenColor]; // 设置滑块还未划过区域的颜色 audioVolumeSlider.maximumTrackTintColor = [UIColor redColor]; audioVolumeSlider.continuous = NO; [audioVolumeSlider addTarget:self action:@selector(updateAudioVolume:) forControlEvents:UIControlEventValueChanged]; //设置响应事件 [self.view addSubview:audioVolumeSlider];
- (void)updateAudioVolume:(id)sender { //添加响应事件 float f = audioVolumeSlider.value; //读取滑块的值 NSString* curVolume = [NSString stringWithFormat:@"%ld",(NSInteger)f]; _textCurVolumeLabel.text = @"当前音量:"; _textCurVolumeLabel.text = [_textCurVolumeLabel.text stringByAppendingString:curVolume]; [_smart_player_sdk SmartPlayerSetAudioVolume:(NSInteger)f]; }
实时音量调节作为RTSP或RTMP直播播放器的扩展功能,在好多行业用处很大,如教育类、大屏环境下多窗口播放、一对一互动等场景非常有用,感兴趣的开发者可以试试看。