-
Notifications
You must be signed in to change notification settings - Fork 209
Audio_Mixer
zanxiaofei edited this page Jan 26, 2018
·
9 revisions
混音功能,主要是针对主播端插上耳机后,背景音乐等无法通过麦克风返采,进而播放端无法听到的问题。
SDK提供混音功能,当前提供以下几种声原混合:
- Mic录制声音
- 播放中的背景音乐
- 画中画声音
开启和关闭混音功能:setEnableAudioMix(boolean)
SDK内部负责创建和销毁背景音乐相关资源,开发者只需要调用KSYStreamer的接口startBgm和stopBgm开启和关闭背景音乐即可。
接口说明:
从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版本之前可以使用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时,切记注意以下几点:
- 在窗口onResume和onPause的时候不再需要对BgmPlayer的播放做任何处理,因为会支持纯音频推流,切记把这部分代码删除
- onDestroy时也不需要对bgmPlayer的实例进行释放,SDK内部会处理,也需要把这部分代码删除
- 不建议您持有KSYBgmPlayer的实例,想要访问接口使用KSYStreamer.getAudioPlayerCapture().getBgmPlayer()来代替
- 在耳返时,您不再需要对KSYBgmPlayer进行静音处理,SDK内部会进行