天天看點

Android、iOS平台RTMP/RTSP播放器實作實時音量調節

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