介紹移動端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直播播放器的擴充功能,在好多行業用處很大,如教育類、大屏環境下多視窗播放、一對一互動等場景非常有用,感興趣的開發者可以試試看。