如下是一个总体接入流程,详细细节请参见 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); // 为了保证更好的语音聊天体验,profile 建议设置为 CHANNEL_PROFILE_CHAT_ROOM RTCRoomConfig roomConfig = new RTCRoomConfig(ChannelProfile.CHANNEL_PROFILE_CHAT_ROOM, true, true, false); mRTCRoom.joinRoom(token, userInfo, roomConfig); }
private 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); } }
如果有高音质需求,请联系技术支持或提交工单。

// 观众上麦/下麦 public void makeCoHost(boolean isCoHost) { if (isCoHost) { mRTCVideo.startAudioCapture(); mRTCRoom.setUserVisibility(true); mRTCRoom.publishStream(MediaStreamType.RTC_MEDIA_STREAM_TYPE_AUDIO); } else { mRTCVideo.stopAudioCapture(); mRTCRoom.setUserVisibility(false); mRTCRoom.unpublishStream(MediaStreamType.RTC_MEDIA_STREAM_TYPE_AUDIO); } }

/** * 设置背景音乐 * @param filePath 混音文件路径 */ public void startBackgroundMusic(String filePath) { // 获取 IMediaPlayer 对象 IMediaPlayer player = mRTCVideo.getMediaPlayer(0); // 开启混音播放 player.open(filePath,new MediaPlayerConfig(AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH, -1)); } /** * 设置音频采集音量 * @param volume 采集的音量值和原始音量的比值。范围为 `[0, 400]`,建议范围是 `[0, 100]`。 */ public void setRecordingVolume(int volume) { // 设置麦克风采集音量 mRTCVideo.setCaptureVolume(StreamIndex.STREAM_INDEX_MAIN, volume); } /** * 设置混音音量 * @param volume 混音音量相对原音量的比值。范围为 `[0, 400]`,建议范围是 `[0, 100]`。 */ public void setMusicVolume(int volume) { // 获取 IMediaPlayer 对象 IMediaPlayer player = mRTCVideo.getMediaPlayer(0); player.setVolume(progress,AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH); }
| 技术逻辑 | API |
|---|---|
| 创建 ByteRTCVideo 实例 | createRTCVideo |
| 创建 ByteRTCRoom 实例 | createRTCRoom |
| 开启麦克风采集 | startAudioCapture |
| 关闭麦克风采集 | stopAudioCapture |
| 设置音频路由模式 | setDefaultAudioRoute |
| 开启发言者音量监听 | enableAudioPropertiesReport |
| 设置用户可见性 | setUserVisibility |
| 加入 RTC 房间 | joinRoom |
| 离开 RTC 房间 | leaveRoom |
| 销毁房间对象 | destroy |
| 混音管理接口创建 | getMediaPlayer |
| 开启混音播放 | open |
| 设置混音音量 | setVolume |
| 设置麦克风采集音量 | setCaptureVolume |
| 技术逻辑 | CallBack |
|---|---|
| 本地用户加入 RTC 回调 | onRoomStateChanged |
| 远端用户加入 RTC 回调 | onUserJoined |
| 本地用户音量回调 | onLocalAudioPropertiesReport |
| 远端用户音量回调 | onRemoteAudioPropertiesReport |