前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android平台GB28181设备接入端语音广播如何实现实时音量调节

Android平台GB28181设备接入端语音广播如何实现实时音量调节

原创
作者头像
音视频牛哥
修改2022-10-27 11:06:03
6520
修改2022-10-27 11:06:03
举报

​Android平台GB28181设备接入,语音广播功能非常重要,本文要介绍的,不是语音广播的流程,语音广播流程,之前的blog也有非常详细的分享,感兴趣的可以参考官方规范书的交互流程:

语音广播这块,有开发者提出这样的诉求,如何适时调节语音广播的音量?

因为我们的语音广播,audio的播放,是基于我们RTMP、RTSP直播播放模块设计实现的,对应的接口如下:

代码语言:javascript
复制
	/**
	 * 设置播放音量
	 *
	 * @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);

如果需要实时调节音量,只要加个音量调节的SeekBar即可:

代码语言:javascript
复制
        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);
                }
            }
        });

如果需要在启动播放的时候,给个默认的初始音量,可以在StartAudioPlay()的时候,设置即可:

代码语言:javascript
复制
    private boolean startAudioPlay() {
        if (player_handle_ != 0 )
            return false;

        player_handle_ = lib_player_.SmartPlayerOpen(context_);
        if (player_handle_ == 0)
            return false;

        lib_player_.SetSmartPlayerEventCallbackV2(player_handle_,new EventHandePlayerV2());

        // 缓存大小可以调整
        lib_player_.SmartPlayerSetBuffer(player_handle_, 0);

        // lib_player_.SmartPlayerSetFastStartup(player_handle_, 0);

        // set report download speed(默认2秒一次回调 用户可自行调整report间隔)
        lib_player_.SmartPlayerSetReportDownloadSpeed(player_handle_, 1, 20);

        lib_player_.SmartPlayerClearRtpReceivers(player_handle_);
        lib_player_.SmartPlayerAddRtpReceiver(player_handle_, rtp_receiver_handle_);

        lib_player_.SmartPlayerSetSurface(player_handle_, null);
        // lib_player_.SmartPlayerSetRenderScaleMode(player_handle_, 1);

        lib_player_.SmartPlayerSetAudioOutputType(player_handle_, 1);

        lib_player_.SmartPlayerSetMute(player_handle_, 0);

        lib_player_.SmartPlayerSetAudioVolume(player_handle_, 100);

        lib_player_.SmartPlayerSetExternalAudioOutput(player_handle_, new PlayerExternalPCMOutput());

        lib_player_.SmartPlayerSetUrl(player_handle_, "rtp://ntinternal/rtpreceiver/implemention0");

        if (0 != lib_player_.SmartPlayerStartPlay(player_handle_)) {
            lib_player_.SmartPlayerClose(player_handle_);
            player_handle_ = 0;

            Log.e(TAG,  "start audio paly failed");
            return false;
        }

        lib_player_.SmartPlayerSetAudioDataCallback(player_handle_, new PlayerAudioDataOutput());
        lib_player_.SmartPlayerSetPullStreamAudioTranscodeAAC(player_handle_, 0);

        if (0 ==lib_player_.SmartPlayerStartPullStream(player_handle_) ) {
            // 启动定时器,长时间收不到音频数据,则停止播放,发送BYE
            last_received_audio_data_time_.set(SystemClock.elapsedRealtime());
            handler_.postDelayed(new AudioPlayerPCMTimer(player_handle_), AudioPlayerPCMTimer.INTERVAL_MS);
        }

        return true;
    }

如果需要静音,audio volume设置为0即可,以上是大概的接口设计和调用逻辑,感兴趣的开发者,可以自行尝试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档