在实时音视频互动中,用户进入 RTC 房间后,如果希望收看其他用户的视频、共享桌面,收听音频,都需要订阅相应的媒体流。根据参与人数和玩法,对订阅关系通常有不同的要求。本文提供了在不同场景下,如何在客户端订阅媒体流。
本文适用于 V3.60 及之后版本 SDK。
subscribeAllStreamsAudio 或 subscribeAllStreamsVideo,修改订阅模式。
在线课堂上,通常不允许自由发言,需要限制用户发言顺序。在此类场景下,你可以通过以下方式进行处理:
joinRoom 加入房间,选择用户可见并设置自动发布和手动订阅模式。// 用户可发布流 boolean userVisibility = true; // 自动发布 boolean isPublishAudio = true; boolean isPublishVideo = true; // 手动订阅音频 boolean isAutoSubscribeAudio = false; // 自动订阅视频 boolean isAutoSubscribeVideo = true; RTCRoomConfig roomConfig = new RTCRoomConfig(ChannelProfile.CHANNEL_PROFILE_CHAT_ROOM, isPublishAudio, isPublishVideo, isAutoSubscribeAudio, isAutoSubscribeVideo); // 加入房间 rtcRoom1.joinRoom(token, userInfo, userVisibility, roomConfig);
rtcRoom1.subscribeStreamAudio(user_id_1, true);
//订阅学生发布的音频流 rtcRoom1.subscribeStreamAudio(user_id_2, true); //发言结束,取消订阅 rtcRoom1.subscribeStreamAudio(user_id_2, false);
在实时音视频通话的过程中,音视频模块可能会被系统电话、第三方应用、或其他系统行为打断,此时你需要关注打断和恢复时远端音视频播放状态,具体参看通话打断和恢复。对于无法自动恢复的打断,你可以通过以下方式进行处理:
pauseAllSubscribedStreamVideo 和/或 pauseAllSubscribedStreamAudio 暂停订阅所有用户的视/音频流。在实时音视频通话过程中,可能需要进行通常场景切换。比如,为增加互动和趣味性,在语聊场景下增加了 K 歌抢唱环节。用户通过点击按钮抢占麦克风成功后,房间中的其他用户,都需要订阅该用户。
joinRoom 加入房间,选择用户可见并设置自动发布和自动订阅模式。用户进房后,自动订阅房间内所有流,进行语聊通话。// 用户可发布流 boolean userVisibility = true; // 自动发布语音 boolean isPublishAudio = true; // 语聊房不需要发布视频 boolean isPublishVideo = false; // 自动订阅语音 boolean isAutoSubscribeAudio = true; // 语聊房不需要订阅视频 boolean isAutoSubscribeVideo = true; RTCRoomConfig roomConfig = new RTCRoomConfig(ChannelProfile.CHANNEL_PROFILE_CHAT_ROOM, isPublishAudio, isPublishVideo, isAutoSubscribeAudio, isAutoSubscribeVideo); // 加入房间 rtcRoom1.joinRoom(token, userInfo, userVisibility, roomConfig);
subscribeAllStreamsAudio 取消订阅房间内所有流,房间内其他用户,调用 subscribeStreamAudio 手动订阅用户 A 的流。subscribeAllStreamsAudio 订阅房间内所有流,继续语聊通话。在某些大型会议、互动娱乐场景下,同一房间内可能会有数千用户需要同时参与音视频互动。当无需指定订阅时,我们推荐你通过控制台选择开启音频选路功能。开启后,房间中用户的音频订阅关系将交由 RTC 智能托管,RTC 将智能向你推送房间中音量较大的部分用户的流。
该场景下,我们仍建议你选择自动订阅模式,以保证能够接收到被选中的流。此外,该模式支持手动取消订阅流,调用后,即使取消订阅的流被选中,你也不会收到此流。
更多音频选路的详细说明参看音频选路。
你可以通过灵活组合使用以下 API,实现更多音视频互动玩法。
Q: 不会。无论是取消订阅媒体流,或通过 pauseAllSubscribedStreamVideo 或 pauseAllSubscribedStreamAudio 暂停订阅媒体流,暂停期间该用户不会产生订阅媒体流的计费。
Q: 暂停(pauseALlSubscribeStreamVideo 或 pauseAllSubscribeStreamAudio,以下简称暂停订阅全部)和取消订阅全部媒体流(subscribeAllStreamsVideo 或 subscribeAllStreamsAudio,以下简称取消订阅全部)都可以实现暂停已订阅的媒体流。
resumeALlSubscribeStreamVideo 或 resumeAllSubscribeStreamAudio,以下简称恢复订阅全部)接口必须成对使用。而订阅全部接口可以单独使用。因此,暂停订阅全部和恢复订阅全部适用于需要在暂停后需要继续订阅的场景,比如 RTC 应用被系统来电打断后恢复音视频互动。你可以通过恢复订阅全部接口直接恢复,无需记录暂停前的订阅关系。
而订阅全部和取消订阅全部接口适用于同一个房间内实现场景切换,比如从自由发言切换到指定用户发言。