tencent cloud

文档反馈

音频开播与收听

最后更新时间:2025-01-07 16:33:51
    本文档主要介绍如何使用 RTC Room Engine SDK 实现语聊开播与收听功能。

    前提条件

    在使用 RTC Room Engine SDK 前,您需要先调用 登录 SDK,以便后续功能正常使用。

    音频开播

    使用 RTC Room Engine 实现语聊开播核心步骤需要3步:创建并加入直播间、上麦推流、开启媒体设备,下面将对齐进行详细介绍。

    步骤1: 创建并加入直播间

    iOS
    Android
    在开播前您需要填写关键参数 TUIRoomInfo,接下来进行详细介绍:

    参数:TUIRoomInfo

    TUIRoomInfo 由很多的字段构成,但通常您只需要关心如下几个字段的填写:
    参数名称
    字段含义
    补充说明
    数据类型
    填写示例
    roomId
    房间ID
    只允许包含大小写英文字母(a-z、A-Z)、数字(0-9)及下划线和连词符。
    该字段为创建房间时必填参数,最大支持48个字节。
    字符串
    "live_100001"
    name
    房间名称
    字符串类型的房间名称。(未填写时和roomId一致)
    字符串
    "denny`s room"
    seatMode
    
    上麦模式
    
    该字段只有开启麦位控制后生效。
    分为“自由上麦模式(freeToTake)”和“申请上麦模式(applyToTake)”。自由上麦模式下台下观众可以自由上麦,无需申请。上麦模式下台下观众上麦需要房主或同意后才能上麦。
    
    
    枚举值
    TUISeatMode.applyToTake
    maxSeatCount
    最大麦位数
    数字类型的最大麦位数,这里指最多maxSeatCount个人同时在麦上。
    最大麦位数和购买的套餐包连麦人数上限一致。
    数字
    10
    isSeatEnabled
    是否开启麦位控制
    布尔类型的麦位控制使能标志符。
    布尔值
    true
    roomType
    房间类型
    分为“会议(conference)”和“直播(live)”两种房间类型,语聊属于直播,因此这里使用live。
    枚举值
    TUIRoomType.live
    在准备好参数 TUIRoomInfo 后,就可以调用 createRoomenterRoom 接口函数创建并加入直播间了。
    在开播前您需要填写关键参数 RoomInfo,接下来进行详细介绍:

    参数:RoomInfo

    RoomInfo 由很多的字段构成,但通常您只需要关心如下几个字段的填写:
    参数名称
    字段含义
    补充说明
    数据类型
    填写示例
    roomId
    房间ID
    只允许包含大小写英文字母(a-z、A-Z)、数字(0-9)及下划线和连词符。
    该字段为创建房间时必填参数,最大支持48个字节。
    字符串
    "live_100001"
    name
    房间名称
    字符串类型的房间名称。(未填写时和roomId一致)
    字符串
    "denny`s room"
    seatMode
    上麦模式
    该字段只有开启麦位控制后生效。
    分为“自由上麦模式(FREE_TO_TAKE)”和“申请上麦模式(APPLY_TO_TAKE)”。自由上麦模式下台下观众可以自由上麦,无需申请。上麦模式下台下观众上麦需要房主或同意后才能上麦。
    枚举值
    SeatMode.APPLY_TO_TAKE
    maxSeatCount
    最大麦位数
    数字类型的最大麦位数,这里指最多maxSeatCount个人同时在麦上。
    最大麦位数和购买的套餐包连麦人数上限一致。
    数字
    10
    isSeatEnabled
    是否开启麦位控制
    布尔类型的麦位控制使能标志符。
    布尔值
    true
    roomType
    房间类型
    分为“会议(CONFERENCE)”和“直播(LIVE)”两种房间类型,语聊属于直播,因此这里使用live。
    枚举值
    RoomType.Live
    在准备好参数 RoomInfo 后,就可以调用 createRoomenterRoom 接口函数创建并加入直播间了。
    iOS
    Android
    import RTCRoomEngine
    
    let roomInfo = TUIRoomInfo()
    roomInfo.roomId = "voice_100001" // 请替换成您自己的房间ID
    roomInfo.name = "denny`s room" // 请替换成您自己的房间名称
    roomInfo.seatMode = .applyToTake // 也可根据您的需求替换为.freeToTake
    roomInfo.maxSeatCount = 10 // 请替换成您购买的Live套餐包的最大麦位数
    roomInfo.isSeatEnabled = true // 如果您不需要麦位控制,可以将isSeatEnabled置为false
    roomInfo.roomType = .live // 房间类型请确保是直播(live)类型
    
    TUIRoomEngine.sharedInstance().createRoom(roomInfo) { [weak self] in
    guard let self = self else { return }
    TUIRoomEngine.sharedInstance.enterRoom(self.roomId, roomType: .live) { [weak self] roomInfo in
    guard let self = self else { return }
    // 加入直播间成功
    } onError: { code, message in
    // 加入直播间失败
    }
    } onError: { code, message in
    // 创建直播间失败
    }
    TUIRoomDefine.RoomInfo roomInfo = new TUIRoomDefine.RoomInfo();
    roomInfo.roomId = "voice_100001"; // 请替换成您自己的房间ID
    roomInfo.name = "denny`s room"; // 请替换成您自己的房间名称
    roomInfo.seatMode = TUIRoomDefine.SeatMode.APPLY_TO_TAKE; // 也可根据您的需求替换为.freeToTake
    roomInfo.maxSeatCount = 10; // 请替换成您购买的Live套餐包的最大麦位数
    roomInfo.isSeatEnabled = true; // 如果您不需要麦位控制,可以将isSeatEnabled置为false
    roomInfo.roomType = TUIRoomDefine.RoomType.LIVE; // 房间类型请确保是直播(live)类型
    
    TUIRoomEngine.sharedInstance().createRoom(roomInfo, new TUIRoomDefine.ActionCallback() {
    @Override
    public void onSuccess() {
    TUIRoomEngine.sharedInstance().enterRoom(roomInfo.roomId, TUIRoomDefine.RoomType.LIVE, new TUIRoomDefine.GetRoomInfoCallback() {
    @Override
    public void onSuccess(TUIRoomDefine.RoomInfo roomInfo) {
    // 加入直播间成功
    }
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 加入直播间失败
    }
    });
    }
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 创建直播间失败
    }
    });

    步骤2:上麦推流

    只有上麦后才能推流,因此在您成功创建房间后,您需要调用 takeSeat 接口上麦并开始推流。
    iOS
    Android
    import RTCRoomEngine
    
    let index = 0 // 请将这里替换成您想要申请的麦位号
    let timeout = 30 // 请将这里替换成您申请上麦的超时时间,单位秒,如果设置为 0,SDK 不会做超时检测,也不会触发超时回调
    
    TUIRoomEngine.sharedInstance().takeSeat(index, timeout: TimeInterval(timeout)) { requestId, userId in
    // 上麦成功
    } onRejected: { requestId, userId, messagae in
    // 上麦请求被拒绝
    } onCancelled: { requestId, userId in
    // 上麦请求被取消
    } onTimeout: { requestId, userId in
    // 上麦请求已超时
    } onError: { requestId, userId, code, message in
    // 上麦失败
    }
    int index = 0; // 请将这里替换成您想要申请的麦位号
    int timeout = 30; // 请将这里替换成您申请上麦的超时时间,单位秒,如果设置为 0,SDK 不会做超时检测,也不会触发超时回调
    
    TUIRoomEngine.sharedInstance().takeSeat(index, timeout, new TUIRoomDefine.RequestCallback() {
    @Override
    public void onAccepted(String requestId, String userId) {
    // 上麦成功
    }
    @Override
    public void onRejected(String requestId, String userId, String message) {
    // 上麦请求被拒绝
    }
    
    @Override
    public void onCancelled(String requestId, String userId) {
    // 上麦请求被取消
    }
    @Override
    public void onTimeout(String requestId, String userId) {
    // 上麦请求已超时
    }
    @Override
    public void onError(String requestId, String userId, TUICommonDefine.Error error, String message) {
    // 上麦失败
    }
    });

    步骤3:开启媒体设备

    iOS
    Android
    在开播后,您还需要调用 openLocalMicrophone 连个接口开启麦克风,传入一个 TUIAudioQuality 类型的参数 quality ,确保观众可以听到您的声音。
    TUIAudioQuality 是一个枚举。
    参数名称
    字段含义
    speech
    人声模式。单声道;音频裸码率:18kbps;适合语音通话为主的场景。
    default
    默认模式。单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。
    music
    音乐模式。双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如在线K歌、音乐直播等。
    在开播后,您还需要调用 openLocalMicrophone 连个接口开启麦克风,传入一个 AudioQuality 类型的参数 quality ,确保观众可以听到您的声音。
    AudioQuality 是一个枚举。
    参数名称
    字段含义
    SPEECH
    人声模式。单声道;音频裸码率:18kbps;适合语音通话为主的场景。
    DEFAULT
    默认模式。单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。
    MUSIC
    音乐模式。双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如在线K歌、音乐直播等。
    下面以音乐模式为例,打开本地麦克风。
    iOS
    Android
    import RTCRoomEngine
    
    let audioQuality: TUIAudioQuality = .music // 请根据您对音质的场景需求选择对应的模式
    TUIRoomEngine.sharedInstance().openLocalMicrophone(audioQuality) {
    // 打开麦克风成功
    } onError: { code, message in
    // 打开麦克风失败
    }
    TUIRoomDefine.AudioQuality audioQuality = TUIRoomDefine.AudioQuality.MUSIC; // 请根据您对音质的场景需求选择对应的模式
    TUIRoomEngine.sharedInstance().openLocalMicrophone(audioQuality, new TUIRoomDefine.ActionCallback() {
    @Override
    public void onSuccess() {
    // 打开麦克风成功
    }
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 打开麦克风失败
    }
    });

    音频收听

    您仅需要调用 enterRoom 接口成功进房即可收听到语聊房主播的声音。
    enterRoom 您需要传入两个参数:想要收听的主播所在房间的房间 Id 和房间类型。
    说明:
    房间类型有两种:会议(conference)和直播(live),语聊房属于直播房间,因此您在调用 enterRoom 进房语聊房时,房间类型需要传入 live
    iOS
    Android
    import RTCRoomEngine
    
    let roomId = "voice_100001" // 收听的房间Id
    let roomType = .live // 此处需设置为.live
    
    TUIRoomEngine.sharedInstance().enterRoom(roomId, roomType: roomType) { roomInfo in
    // 进房成功
    } onError: { code, message in
    // 进房失败
    }
    String roomId = "voice_100001"; // 收听的房间Id
    TUIRoomDefine.RoomType roomType = TUIRoomDefine.RoomType.LIVE; // 此处需设置为.live
    
    TUIRoomEngine.sharedInstance().enterRoom(roomId, roomType, new TUIRoomDefine.GetRoomInfoCallback() {
    @Override
    public void onSuccess(TUIRoomDefine.RoomInfo roomInfo) {
    // 进房成功
    }
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 进房失败
    }
    });
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持