介绍移动端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直播播放器的扩展功能,在好多行业用处很大,如教育类、大屏环境下多窗口播放、一对一互动等场景非常有用,感兴趣的开发者可以试试看。

最新文章

  1. 万能的SqlHelper,麻麻再也不用担心用什么数据库了
  2. 总结CSS3新特性(Transform篇)
  3. Oracle 10g -- 修改DB的编码
  4. ModelFirst的CRUD
  5. Delphi 设置WebBrowser 代理服务器 与 UserAgent
  6. YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)
  7. ubuntu 14.04 修改PS1提示符
  8. BZOJ3709: [PA2014]Bohater
  9. 将Linux下编译的warning警告信息输出到文件中[整理笔记]
  10. Ext JS学习第十六天 事件机制event(一)
  11. js获取url中的参数方法
  12. jvm中的垃圾回收器
  13. win10 nginx
  14. 解决echarts饼图不显示数据为0的数据
  15. sqoop 问题以及 小tips
  16. Linux命令(一)
  17. Android自带Monkey测试
  18. RabbitMQ快速入门
  19. 【Professional English】Words Summary
  20. 20个优秀的JavaScript 键盘事件处理库

热门文章

  1. BUUCTF-另一个世界
  2. BUUCTF-LSB
  3. 机械硬盘和ssd固态硬盘的原理对比分析
  4. Linux字符集和编码
  5. Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程
  6. 对象映射 - Mapping.Mapster
  7. NC201605 Bits
  8. CesiumJS 2022^ 源码解读[7] - 3DTiles 的请求、加载处理流程解析
  9. 机器学习基础:用 Lasso 做特征选择
  10. CF141E Clearing Up 题解