Android、iOS平台RTMP/RTSP播放器实现实时音量调节

简介: 介绍移动端RTMP、RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对实时静音来说,播放端实时音量调节粒度更细,从[0, 100],用户体验更好。

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

相关文章
|
2月前
|
安全 数据挖掘 Android开发
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
104 2
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
|
云安全 安全 Cloud Native
Cisco Catalyst 8000 Series IOS XE 17.18.1a ED 发布 - 思科边缘平台系列系统软件
Cisco Catalyst 8000 Series IOS XE 17.18.1a ED - 思科边缘平台系列系统软件
31 0
|
8月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
219 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
7月前
|
存储 编解码 开发工具
Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
本文详细探讨了在Android平台上实现HTTP-FLV播放器的过程。首先介绍了FLV格式的基础,包括文件头和标签结构。接着分析了HTTP-FLV传输原理,通过分块传输实现流畅播放。然后重点讲解了播放器的实现步骤,涵盖网络请求、数据解析、音视频解码与渲染,以及播放控制功能的设计。文章还讨论了性能优化和网络异常处理的方法,并总结了HTTP-FLV播放器的技术价值,尤其是在特定场景下的应用意义。
261 11
|
8月前
|
安全 Android开发 数据安全/隐私保护
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
302 12
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
|
8月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
841 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
XML 缓存 Android开发
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐(下)
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐(下)
325 0
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐(下)
|
Java Android开发
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐(上)
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐(上)
421 0
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐(上)

热门文章

最新文章