当用户在 RTC 与白板的动态 PPT 同时使用时,可能会遇到以下问题:
为了解决这些问题,2.9.15 的白板内置了用于混音的 RTC 接口,用户在根据本章内容进行实现后可以避免这些问题。
如果用户使用的 RTC 提供商不支持混音本章内容将会无效
样例代码可以参考 Android-demo
本文中 RTC 使用 Agora Android SDK 作为实例,运行 demo 前请先在 strings.xml 中配置好 rtc_app_id 参数
用户需要实现 com.herewhite.sdk.AudioMixerBridge 类,该类用于桥接 native sdk 与用户引用的 RTC 客户端。
PPT 内部在触发播放事件前会调用 AudioMixerBridge 接口方法,通过用户的实现类调用到 RTC 的混音相关方法。
AudioMixerBridge 的实现例子如下(具体方法说明请参考 AudioMixerBridge 接口注释):
public class AudioMixerBridgeImpl implements AudioMixerBridge {
private RtcEngine rtcEngine;
public AudioMixerBridgeImpl(RtcEngine rtcEngine) {
this.rtcEngine = rtcEngine;
}
@Override
public void startAudioMixing(String filepath, boolean loopback, boolean replace, int cycle) {
rtcEngine.startAudioMixing(filepath, loopback, replace, cycle);
}
@Override
public void stopAudioMixing() {
rtcEngine.stopAudioMixing();
}
@Override
public void setAudioMixingPosition(int position) {
rtcEngine.setAudioMixingPosition(position);
}
}
在 2.9.15 后的 white sdk 初始化方法中多了一个可选参数 AudioMixerBridge audioMixerBridge。用户如果要使用 RTC 混音功能需要在初始化 sdk 前将 AudioMixerBridge接口实现传入到该方法中:
new WhiteSdk(xxx, xxx, xxx, new CommonCallbacks() {
....
},
// 如果用户需要用到 rtc 混音功能来解决回声和声音抑制问题,那么必须要在 whiteSDK 之前初始化 rtcEngine
// AudioMixerBridgeImpl 在传入 sdk 后,ppt 内的音视频就全部使用 rtc 混音的方式播放
new AudioMixerBridgeImpl(rtcEngine));
其中 rtcEngine 是用户引入的 RTC 服务客户端对象,需要在该步骤前初始化完毕。
RTC 客户端需要有混音状态回调提示,在该回调方法中调用 sdk 中的混音状态变化方法来通知 PPT 是否该进行视频播放。
如果 RTC 客户端没有相关回调会造成 PPT 的视频音画不同步问题。
IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() {
...
@Override
// 混音状态变化时的回调
public void onAudioMixingStateChanged(int state, int errorCode) {
if (whiteSdk != null) {
/**
* 混音 API 完成后的状态回调
* @param state 混音状态
* 710: 成功调用 startAudioMixing 或 resumeAudioMixing
* 711: 成功调用 pauseAudioMixing
* 713: 成功调用 stopAudioMixing
* 714: 播放失败,error code 会有具体原因,
* @param errorCode 当播放失败时,该值有意义
*/
whiteSdk.getAudioMixerImplement().setMediaState(state, errorCode);
}
}
};