Skip to content

Audio_Mixer

zanxiaofei edited this page Jan 26, 2018 · 9 revisions

混音

混音功能,主要是针对主播端插上耳机后,背景音乐等无法通过麦克风返采,进而播放端无法听到的问题。

SDK提供混音功能,当前提供以下几种声原混合:

  • Mic录制声音
  • 播放中的背景音乐
  • 画中画声音

开启和关闭混音功能:setEnableAudioMix(boolean)

背景音乐

背景音乐设置说明

SDK内部负责创建和销毁背景音乐相关资源,开发者只需要调用KSYStreamer的接口startBgmstopBgm开启和关闭背景音乐即可。

接口说明:

v4.2.0及之后版本:

从v4.2.0版本开始,废弃了KSYBgmPlayer,背景音乐播放由功能更加强大的KSYMediaPlayer来实现, 相关常用接口如下:

接口 说明
mStreamer.getAudioPlayerCapture().setOnCompletionListener 设置播放完成回调
mStreamer.getAudioPlayerCapture().setOnErrorListener 设置播放错误回调
mStreamer.getAudioPlayerCapture().setVolume 设置BGM音量
mStreamer.getAudioPlayerCapture().setMute 设置BGM静音模式
mStreamer.getAudioPlayerCapture().setPlayableRanges(long startTime, long endTime) 设置BGM播放区间,该接口不是时时生效,若想时时生效,设置结束后,调用getAudioPlayerCapture().restart()即可
mStreamer.getAudioPlayerCapture().getMediaPlayer().pause 暂停播放
mStreamer.getAudioPlayerCapture().getMediaPlayer().start 恢复播放
mStreamer.getAudioPlayerCapture().getMediaPlayer().seekTo seek定位
mStreamer.getAudioPlayerCapture().getMediaPlayer().getDuration 获取音频时长
mStreamer.getAudioPlayerCapture().getMediaPlayer().getCurrentPosition 获取当前播放进度

参考代码:

private void onBgmChecked(boolean isChecked) {
    if (isChecked) {
        mStreamer.getAudioPlayerCapture().setOnCompletionListener(
                new IMediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(IMediaPlayer iMediaPlayer) {
                        Log.d(TAG, "End of the currently playing music");
                    }
                });
        mStreamer.getAudioPlayerCapture().setOnErrorListener(
                new IMediaPlayer.OnErrorListener() {
                    @Override
                    public boolean onError(IMediaPlayer iMediaPlayer, int what, int extra) {
                        Log.e(TAG, "OnErrorListener, Error:" + what + ", extra:" + extra);
                        return false;
                    }
                });
        mStreamer.getAudioPlayerCapture().setVolume(0.4f);
        mStreamer.getAudioPlayerCapture().setMute(false);
        mStreamer.setEnableAudioMix(true);
        mStreamer.startBgm(mBgmPath, true);
    } else {
        mStreamer.stopBgm();
    }
}

v4.2.0之前版本:

v4.2.0版本之前可以使用KSYBgmPlayer来控制背景音乐,相关接口如下:

接口 说明
KSYStreamer.getAudioPlayerCapture().getBgmPlayer() 获取背景音乐实例KSYBgmPlayer
KSYStreamer.getAudioPlayerCapture().getBgmPlayer()

.setOnCompletionListener
设置音频播放结束状态回调
KSYStreamer.getAudioPlayerCapture().getBgmPlayer()

.setOnErrorListener
设置音频播放错误回调
KSYStreamer.getAudioPlayerCapture().getBgmPlayer()


.setVolume
设置背景音乐音量
KSYStreamer.getAudioPlayerCapture().getBgmPlayer()


.pause
暂停背景音乐播放
KSYStreamer.getAudioPlayerCapture().getBgmPlayer()


.resume
暂停后恢复背景音乐播放
KSYStreamer.getAudioPlayerCapture().getBgmPlayer()


.setMute
设置背景音乐静音
KSYStreamer.startBgm(String path, boolean loop) 开始背景音乐播放,path是背景音乐文件绝对路径,loop代表是否循环播放
KSYStreamer.stopBgm() 停止背景音乐播放

参考代码:

 private void onBgmChecked(boolean isChecked) {
        if (isChecked) {
            mStreamer.getAudioPlayerCapture().getBgmPlayer()
                    .setOnCompletionListener(new KSYBgmPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(KSYBgmPlayer bgmPlayer) {
                            Log.d(TAG, "End of the currently playing music");
                        }
                    });
            mStreamer.getAudioPlayerCapture().getBgmPlayer()
                    .setOnErrorListener(new KSYBgmPlayer.OnErrorListener() {
                        @Override
                        public void onError(KSYBgmPlayer bgmPlayer, int what, int extra) {
                            Log.e(TAG, "onBgmError: " + what);
                        }
                    });
            mStreamer.getAudioPlayerCapture().getBgmPlayer().setVolume(1.0f);
            mStreamer.getAudioPlayerCapture().getBgmPlayer().setMute(false);
            mStreamer.startBgm(mBgmPath, true);
            mStreamer.setHeadsetPlugged(true);
        } else {
            mStreamer.stopBgm();
        }
    }

注:如果您是v3.x的用户,在迁移到v4.x时,切记注意以下几点:

  1. 在窗口onResume和onPause的时候不再需要对BgmPlayer的播放做任何处理,因为会支持纯音频推流,切记把这部分代码删除
  2. onDestroy时也不需要对bgmPlayer的实例进行释放,SDK内部会处理,也需要把这部分代码删除
  3. 不建议您持有KSYBgmPlayer的实例,想要访问接口使用KSYStreamer.getAudioPlayerCapture().getBgmPlayer()来代替
  4. 在耳返时,您不再需要对KSYBgmPlayer进行静音处理,SDK内部会进行
Clone this wiki locally