如下是一个总体接入流程,详细细节请参见 RTC服务开通指南



public void joinRoom(String roomId, String token, String userId, boolean isHost) {
// 初始化 RTCVideo 对象
mRTCVideo = RTCVideo.createRTCVideo(applicationContext, appId,
mRTCVideoEventHandler, null, null);
// 初始化 RTCRoom 对象
mRTCRoom = mRTCVideo.createRTCRoom(roomId);
mRTCRoom.setRTCRoomEventHandler(mRTCRoomEventHandler);
// 主播开启麦克风采集,观众关闭麦克风采集
if (isHost) {
mRTCVideo.startAudioCapture();
} else {
mRTCVideo.stopAudioCapture();
}
// 设置音频路由模式
mRTCVideo.setDefaultAudioRoute(AudioRoute.AUDIO_ROUTE_SPEAKERPHONE);
// 开启发言者音量监听
AudioPropertiesConfig config = new AudioPropertiesConfig(300);
mRTCVideo.enableAudioPropertiesReport(config);
// 设置主播为可见状态,设置观众为隐身状态
mRTCRoom.setUserVisibility(isHost);
// 加入房间,开始连麦需要申请AppId和Token
UserInfo userInfo = new UserInfo(userId, null);
RTCRoomConfig roomConfig = new RTCRoomConfig(ChannelProfile.CHANNEL_PROFILE_INTERACTIVE_PODCAST,
true, true, false);
mRTCRoom.joinRoom(token, userInfo, roomConfig);
}
javaprivate final IRTCRoomEventHandler mRTCRoomEventHandler = new IRTCRoomEventHandler() {
/**
* 收到 RTC 加入房间结果
*/
@Override
public void onRoomStateChanged(String roomId, String uid, int state, String extraInfo) {
super.onRoomStateChanged(roomId, uid, state, extraInfo);
}
};
private final IRTCVideoEventHandler mRTCVideoEventHandler = new IRTCVideoEventHandler() {
/**
* 本地用户音量回调
*
* @param audioPropertiesInfos 本地音频信息
*/
@Override
public void onLocalAudioPropertiesReport(LocalAudioPropertiesInfo[] audioPropertiesInfos) {
super.onLocalAudioPropertiesReport(audioPropertiesInfos);
}
/**
* 远端用户音量回调
*
* @param audioPropertiesInfos 远端音频信息,其中包含音频流属性、房间 ID、用户 ID
* @param totalRemoteVolume 订阅的所有远端流的总音量
*/
@Override
public void onRemoteAudioPropertiesReport(RemoteAudioPropertiesInfo[] audioPropertiesInfos, int totalRemoteVolume) {
super.onRemoteAudioPropertiesReport(audioPropertiesInfos, totalRemoteVolume);
}
};
java
// 观众上麦/下麦
public void makeCoHost(boolean isCoHost) {
Log.d(TAG, String.format("makeCoHost: %b", isCoHost));
if (mRTCVideo != null) {
if (isCoHost) {
mRTCVideo.startAudioCapture();
if (mRTCRoom != null) {
mRTCRoom.setUserVisibility(true);
mRTCRoom.publishStream(MediaStreamType.RTC_MEDIA_STREAM_TYPE_AUDIO);
}
} else {
mRTCVideo.stopAudioCapture();
if (mRTCRoom != null) {
mRTCRoom.setUserVisibility(false);
mRTCRoom.unpublishStream(MediaStreamType.RTC_MEDIA_STREAM_TYPE_AUDIO);
}
}
}
}
java
/**
* 设置背景音乐
* @param filePath 混音文件路径
*/
public void startBackgroundMusic(String filePath) {
if (mRTCVideo == null) {
return;
}
// 获取 IAudioMixingManager 对象
IAudioMixingManager audioMixingManager = mRTCVideo .getAudioMixingManager();
if (audioMixingManager == null) {
return;
}
// 开启混音播放
audioMixingManager.preloadAudioMixing(audioMixingId, filePath);
AudioMixingConfig config = new AudioMixingConfig(AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH, -1);
audioMixingManager.startAudioMixing(audioMixingId, filePath, config);
}
/**
* 设置音频采集音量
* @param volume 采集的音量值和原始音量的比值。范围为 `[0, 400]`,建议范围是 `[0, 100]`。
*/
public void setRecordingVolume(int volume) {
if (mRTCVideo == null) {
return;
}
// 设置麦克风采集音量
mRTCVideo.setCaptureVolume(StreamIndex.STREAM_INDEX_MAIN, volume);
}
/**
* 设置混音音量
* @param volume 混音音量相对原音量的比值。范围为 `[0, 400]`,建议范围是 `[0, 100]`。
*/
public void setMusicVolume(int volume) {
if (mRTCVideo == null) {
return;
}
// 获取 IAudioMixingManager 对象
IAudioMixingManager audioMixingManager = mRTCVideo .getAudioMixingManager();
if (audioMixingManager == null) {
return;
}
audioMixingManager.setAudioMixingVolume(audioMixingId, volume, AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH);
}
java| 技术逻辑 | API |
|---|---|
| 创建 ByteRTCVideo 实例 | createRTCVideo |
| 创建 ByteRTCRoom 实例 | createRTCRoom |
| 开启麦克风采集 | startAudioCapture |
| 关闭麦克风采集 | stopAudioCapture |
| 设置音频路由模式 | setDefaultAudioRoute |
| 开启发言者音量监听 | enableAudioPropertiesReport |
| 设置用户可见性 | setUserVisibility |
| 加入 RTC 房间 | joinRoom |
| 离开 RTC 房间 | leaveRoom |
| 销毁房间对象 | destroy |
| 混音管理接口创建 | getAudioMixingManager |
| 开启混音播放 | startAudioMixing |
| 关闭混音播放 | stopAudioMixing |
| 暂停混音播放 | pauseAudioMixing |
| 恢复混音播放 | resumeAudioMixing |
| 设置混音音量 | setAudioMixingVolume |
| 设置麦克风采集音量 | setCaptureVolume |
| 技术逻辑 | CallBack |
|---|---|
| 本地用户加入 RTC 回调 | onRoomStateChanged |
| 远端用户加入 RTC 回调 | onUserJoined |
| 本地用户音量回调 | onLocalAudioPropertiesReport |
| 远端用户音量回调 | onRemoteAudioPropertiesReport |