RTC 提供了进房自动订阅的默认选项。此时,RTC SDK 会自动帮助你处理房间内音视频流的订阅关系。我们强烈推荐你使用此配置。
如果你希望自行实现进房订阅音视频流的逻辑,参考本文,完成设置。
在使用 RTC 的订阅功能时,你可能会用到以下 API:
方法 | 简述 |
---|---|
| 房间参数配置
|
subscribeStream | 订阅房间内指定的通过摄像头/麦克风采集的媒体流 |
subscribeAllStreams | 订阅房间内所有通过摄像头/麦克风采集的媒体流 |
unsubscribeStream | 停止订阅房间内指定的通过摄像头/麦克风采集的媒体流 |
unsubscribeAllStreams | 停止订阅房间内所有通过摄像头/麦克风采集的媒体流 |
pauseAllSubscribedStream | 暂停订阅来自远端的媒体流 |
resumeAllSubscribedStream | 恢复订阅来自远端的媒体流 |
对于媒体流的订阅,RTC 提供自动和手动两种订阅模式,大多数场景下,你都可以使用自动订阅模式进行通话
自动订阅为 SDK 的默认设置,加入房间后 SDK 会自动帮你订阅房间内其他用户的流,视频流数没有上限,音频流数上限为 30 路,超过 30 路时,我们推荐你开启音频选路功能,具体参看场景二:音频选路。
若你希望单独控制音频或视频流的自动订阅,则可以在 joinRoom
时对 RTCRoomConfig
进行如下设置:
设置 isAutoSubscribeAudio=false
,isAutoSubscribeVideo=true
,则进房后仅自动订阅视频;
设置 isAutoSubscribeVideo=false
,isAutoSubscribeAudio=true
,则进房后仅自动订阅音频。
通话过程中,你可能需要切换通话场景(如纯音频通话切换至视频通话),或者更换订阅的远端用户,此时你需要调用相应 API 对之前的订阅设置进行修改。
Step 1: 调用 joinRoom
进房时,使用自动订阅模式
Step 2: 进房后当需要切换时调用 pauseAllSubscribedStream(RTC_PAUSE_RESUME_CONTROL_VIDEO)
停止订阅全部远端视频,仅接收音频
Step 1: 调用 joinRoom
进房时,使用自动订阅模式
Step 2: 进房后立刻调用 pauseAllSubscribedStream(RTC_PAUSE_RESUME_CONTROL_VIDEO)
暂停订阅全部远端视频,仅接收音频
Step 3: 当需要切换时,调用 resumeAllSubscribedStream(RTC_PAUSE_RESUME_CONTROL_VIDEO)
恢复订阅全部远端视频
自动订阅模式下,修改订阅用户参看暂停/恢复订阅媒体流
当通话人数较多,或者你希望仅接收需要的音频/视频流时,我们推荐你使用手动订阅模式。手动订阅模式下,你可以指定某个/某些远端用户的音频/视频流进行订阅,SDK 仅会向你推送你订阅的流。
Step 1: 调用 joinRoom
加入房间,将 RTCRoomConfig
中的 isAutoSubscribeAudio
设为 false
Step 2: 通过 onUserPublishStream
回调中的 uid 判断当前房间内有哪些用户发布了音频流
Step 3: 调用 subscribeStream(uid, RTC_MEDIA_STREAM_TYPE_AUDIO)
订阅你需要的音频流
Step 1: 调用 joinRoom
加入房间,将 RTCRoomConfig
中的 isAutoSubscribeVideo
设为 false
Step 2: 通过 onUserPublishStream
回调中的 uid 判断当前房间内有哪些用户发布了视频流
Step 3: 调用 subscribeStream(uid, RTC_PAUSE_RESUME_CONTROL_VIDEO)
订阅你需要的视频流
注意:屏幕视频流始终为自动订阅,若不需要,你可以在进房后调用
unsubscribeStream
停止订阅
Step 1: 调用 joinRoom
加入房间,将 RTCRoomConfig
中的 isAutoSubscribeAudio
和 isAutoSubscribeVideo
均设为 false
Step 2: 通过 onUserPublishStream
回调中的 uid 判断当前房间内有哪些用户发布了音视频流
Step 3: 调用 subscribeStream(uid, RTC_MEDIA_STREAM_TYPE_BOTH)
订阅你需要的音视频流
Step 1: 参考手动订阅中同时订阅音视频的步骤开始视频通话
Step 2: 当需要切换时调用 unsubscribeStream(uid, RTC_PAUSE_RESUME_CONTROL_VIDEO)
停止订阅视频
Step 1: 调用 joinRoom
加入房间,将 RTCRoomConfig
中的 isAutoSubscribeAudio
和isAutoSubscribeVideo
均设为 false
Step 2: 通过 onUserPublishStream
回调中的 uid 判断当前房间内有哪些用户发布了音频流
Step 3: 调用 subscribeStream(uid, RTC_MEDIA_STREAM_TYPE_AUDIO)
订阅你需要的音频流
Step 4: 当需要切换时,通过 onUserPublishStream
判断该用户是否发布视频
Step 5: 调用 subscribeStream(uid, RTC_PAUSE_RESUME_CONTROL_VIDEO)
订阅视频
以视频通话场景为例,由订阅 A 用户切换到订阅 B 用户的操作如下:
Step 1: 参考手动订阅中同时订阅音视频的步骤开始视频通话
Step 2: 调用 unsubscribeStream(A, RTC_MEDIA_STREAM_TYPE_BOTH)
停止订阅 A 用户的流
Step 3: 通过 onUserPublishStream
回调中的 uid 判断 B 用户是否发布了音视频流
Step 4: 调用 subscribeStream(B, RTC_MEDIA_STREAM_TYPE_BOTH)
订阅 B 用户的流
通话过程中,你可能会不再需要接收远端用户的音/视频流,或者恢复之前暂停订阅的流,无论当前是手动订阅还是自动订阅模式,你都可以调用 API 实现上述功能:
进房后调用 unsubscribeStream
可停止订阅指定远端用户;若想恢复订阅该用户的流,需调用 subscribeStream
输入相同的 uid 即可。
注意:恢复订阅前,若收到带有该用户 uid 的
onUserUnpublishStream
回调,则表示该用户已取消发布流,此时需监听该用户的onUserPublishStream
回调,等待流重新发布后,方可调用subscribeStream
进行订阅。
进房后调用 pauseAllSubscribedStream
可在暂停订阅全部远端用户的流;调用 resumeAllSubscribedStream
则恢复之前订阅的流。
注意:在手动订阅模式下,调用
resumeAllSubscribedStream
后,依旧只会收到pauseAllSubscribedStream
前订阅的流。
当你在进行实时音视频通话的过程中,可能会被系统电话、第三方应用、或其他系统行为打断,此时你需要关注打断和恢复时远端音视频播放状态,并修改订阅相关设置,具体参看通话打断和恢复。
在某些大型会议、互动娱乐场景下,同一房间内可能会有数千用户需要同时参与音视频互动。当无需指定订阅时,我们推荐你通过控制台选择开启音频选路功能。开启后,房间中用户的音频订阅关系将交由 RTC 智能托管,RTC 将智能向你推送房间中音量较大的部分用户的流。
该场景下,我们仍建议你选择自动订阅模式,以保证能够接收到被选中的流。此外,该模式支持调用 unsubscribeStream
取消订阅流,调用后,即使取消订阅的流被选中,你也不会收到此流。
更多音频选路的详细说明参看音频选路。