跳到主要内容

主播端

用户以主播身份加入房间后,需要发布资源,房间内的其他主播和观众才能看见、听见。直播房间内有多名主播时,主播之间也需要订阅才能相互看见、听见。

发布

直播房间发布音视频流,可调用 RCRTCLocalUser 中的 publishDefaultLiveStreams 来发布本地默认音视频流。这里定义的默认音视频流,是指麦克风采集的音频和摄像头采集的视频;也可以调用 publishLiveStream 由开发者指定资源进行发布,比如单独发布音频或视频,亦或发布媒体文件或屏幕共享流。

发布成功回调返回的 RCRTCLiveInfo 对象为直播资源对象,通过它可调用 CDN、合流布局等直播相关接口。

提示

从 5.3.1 版本开始,若在加入房间前开启了网络质量探测,本端发布资源时 SDK 会在探测到网络质量较差时,自适应调整发布资源的分辨率,防止远端订阅资源的观众或主播无法正常查看该资源。网络恢复后,分辨率会恢复到初始分辨率。

// 直播模式下,发布默认音视频流,即麦克风、摄像头采集数据
room.getLocalUser().publishDefaultLiveStreams(new IRCRTCResultDataCallback<RCRTCLiveInfo>() {
@Override
public void onSuccess(RCRTCLiveInfo liveInfo) {
// 发布成功
}

@Override
public void onFailed(RTCErrorCode code) {
// 发布失败
}
});

取消发布

当需要取消发布直播流时,可调用 RCRTCLocalUser 中的 unpublishDefaultLiveStreams 来取消发布默认音视频流;也可以调用 unpublishLiveStream 由开发者指定资源进行取消发布。取消发布接口通常跟发布接口配对使用,但如果是用户想要退出房间,则不需要调用取消发布方法,在调用退出房间接口时,SDK 内部会自动进行取消处理。

room.getLocalUser().unpublishDefaultLiveStreams(new IRCRTCResultCallback() {
@Override
public void onSuccess() {
// 取消发布成功
}

@Override
public void onFailed(RTCErrorCode rtcErrorCode) {
// 取消发布失败
}
});

对于仅自己发布,不跟其他人连麦注1PK注2 的情况,并不需要执行订阅逻辑。如果连麦或 PK,则主播的订阅流程与会议模式相同。

提示

注1:连麦 是指在当前直播间内,主播邀请观众上麦,观众切换为主播后,主播们之间互相发布订阅的情况。 注2:PK 是指不同直播间的主播,相互订阅建立连接的情况。

订阅资源

直播房间内有多名主播时,主播之间也需要订阅才能相互看见、听见。需调用 RCRTCLocalUser 中的 subscribeStreamsubscribeStreams 来订阅单个或多个媒体流。

rtcRoom.getLocalUser().subscribeStreams(inputStreams, new IRCRTCResultDataCallback<List<RCRTCInputStream>>() {
@Override
public void onSuccess() {

}

@Override
// 如果 SDK ≧ 5.3.4,您可以使用 IRCRTCResultDataCallback,onFailed 方法会返回订阅失败的流列表和错误码。
// 如果 SDK < 5.3.4,仅支持使用 IRCRTCResultCallback,onFailed 方法仅返回错误码。
public void onFailed(List<RCRTCInputStream> failedStreams, RTCErrorCode errorCode) {

}
});

取消订阅

当需要取消订阅时,可调用 RCRTCLocalUser 中的 unsubscribeStreamunsubscribeStreams 来取消订阅一道流或多道流。取消订阅接口通常跟订阅接口配对使用,但如果是用户想要退出房间,则不需要调用取消订阅方法,在调用退出房间接口时,SDK 内部会自动进行取消处理。

rtcRoom.getLocalUser().unsubscribeStreams(unPublishResource, new IRCRTCResultCallback() {
@Override
public void onSuccess() {
// 取消成功
}

@Override
public void onFailed(RTCErrorCode errorCode) {
// 取消失败
}
});
参数类型说明
streamsList<? extends RCRTCInputStream>要取消订阅的音视频流
callBackIRCRTCResultCallback取消订阅的音视频流的回调