You need to enable JavaScript to run this app.
导航

场景搭建(Android)

最近更新时间2023.08.28 12:05:35

首次发布时间2022.11.15 15:26:04

SDK集成

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

alt

整体实现流程

整体业务流程图

alt

  • 房主可以邀请观众上麦、下麦嘉宾、封锁麦位。
  • 房主可以播放背景音乐、修改音乐音量、人声音量。
  • 房主可以开关观众连线申请开关。开启开关后,观众申请上麦需要房主同意。
  • 观众可以申请上麦、下麦。

核心功能实现

创建/加入房间模块

时序图

alt

示例代码

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);
}
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);
    }
}

上麦模块

时序图

alt

示例代码

// 观众上麦/下麦
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);
    }
}

背景音乐

时序图

alt

示例代码

/**
 * 设置背景音乐
 * @param filePath 混音文件路径
 */
public void startBackgroundMusic(String filePath) {
    // 获取 IAudioMixingManager 对象
    IAudioMixingManager audioMixingManager = mRTCVideo .getAudioMixingManager();
    // 开启混音播放
    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) {
    // 设置麦克风采集音量
    mRTCVideo.setCaptureVolume(StreamIndex.STREAM_INDEX_MAIN, volume);
}

/**
 * 设置混音音量
 * @param volume 混音音量相对原音量的比值。范围为 `[0, 400]`,建议范围是 `[0, 100]`。
 */
public void setMusicVolume(int volume) {
    // 获取 IAudioMixingManager 对象
    IAudioMixingManager audioMixingManager = mRTCVideo .getAudioMixingManager();
    audioMixingManager.setAudioMixingVolume(audioMixingId, volume, AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH);
}

核心功能 API 与回调参考

API

技术逻辑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