订阅与取消
直播模式中主播发布的音视频资源,会在服务端另行合并生成一道音频合流和一道视频合流。
观众既可以直接订阅原始音视频资源(简称 分流)也可订阅 合流。下面将分别介绍这两种订阅方式的区别和适用场景。
观众被定义为只能订阅不能发布,如需发布必须先转为主播身份,再进行资源的发布。
设置合流事件回调监听
设置合流资源发布监听
方法
RCRTCEngine.onRemoteLiveMixPublished
返回值
| 参数 | 描述 |
|---|---|
| type | 合流资源的类型 |
示例代码
engine.onRemoteLiveMixPublished = (RCRTCMediaType type) {
// type 合流资源的类型
print('合流资源 $type 已发布');
// 可以开始订阅合流资源
engine.subscribeLiveMix(type);
};
设置合流资源取消发布监听
方法
RCRTCEngine.onRemoteLiveMixUnpublished
返回值
| 参数 | 描述 |
|---|---|
| type | 合流资源的类型 |
示例代码
engine.onRemoteLiveMixUnpublished = (RCRTCMediaType type) {
// type 合流资源的类型
print('合流资源 $type 已取消发布');
};
订阅分流
分流订阅跟会议模式的订阅一样,适合小众玩法灵活的直播业务场景。比如观众被分成多种角色,需要选择性观看或收听部分主播发布的资源;又或者不同观众的展示布局并不相同,甚至可以随时切换布局的情况,SDK 提供视频展示 View 的创建和与流绑定接口,开发者自行编写展示逻辑。
观众的订阅需要在收到主播刚刚发布资源的通知,即 onRemotePublished 时订阅。可调用 RCRTCEngine 中的 subscribe 来订阅某个主播的音视频资源,如果主播发布的视频资源开启了大小流功能,可以通过 subscribe 的 tiny 参数,来选择订阅大流或小流(默认)。
方法
RCRTCEngine.subscribe();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userId | String | 是 | 主播用户 ID |
| type | RCRTCMediaType | 是 | 资源类型 |
| tiny | bool | 否 | 是否订阅小流,默认 false(订阅大流) |
示例代码
订阅主播音视频资源
engine.subscribe(userId, RCRTCMediaType.audio_video);
订阅主播纯音频资源
engine.subscribe(userId, RCRTCMediaType.audio);
订阅主播纯视频资源
engine.subscribe(userId, RCRTCMediaType.video);
订阅主播小流视频资源
engine.subscribe(userId, RCRTCMediaType.video, tiny: true);
取消订阅分流
当需要取消订阅分流时,可调用 RCRTCEngine 中的 unsubscribe 方法来取消订阅指定的主播资源。
方法
RCRTCEngine.unsubscribe();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userId | String | 是 | 主播用户 ID |
| type | RCRTCMediaType | 是 | 资源类型 |
示例代码
取消订阅主播音视频资源
engine.unsubscribe(userId, RCRTCMediaType.audio_video);
取消订阅主播纯音频资源
engine.unsubscribe(userId, RCRTCMediaType.audio);
取消订阅主播纯视频资源
engine.unsubscribe(userId, RCRTCMediaType.video);
订阅合流
大部分直播场景,观众数量比较庞大,且所有观众看到和听到的内容完全一致。当 有多个主播时,观众采用分流订阅的方式会造成大量带宽资源的浪费,客户成本也会较高。合流就是用来解决资源浪费问题的,它是由融云服务将所有主播发布的音视频资源,按客户提前指定的人选、布局方式和编码参数进行合并生成的一道音频和一道视频合流(纯音频模式仅有一道音频合流)。观众都去订阅这两道合流,则不管有多少名主播连麦/PK,观众都能用很少的资源得到一致的观看效果,从而为客户节省大量成本。
方法
RCRTCEngine.subscribeLiveMix();
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | RCRTCMediaType | 是 | 合流资源类型 |
| tiny | bool | 否 | 是否订阅小流,默认 false(订阅大流) |
示例代码
订阅音视频合流
engine.subscribeLiveMix(RCRTCMediaType.audio_video);
订阅纯音频合流
engine.subscribeLiveMix(RCRTCMediaType.audio);
订阅纯视频合流
engine.subscribeLiveMix(RCRTCMediaType.video);
订阅小流视频合流
engine.subscribeLiveMix(RCRTCMediaType.video, tiny: true);
取消订阅合流
当需要取消订阅合流时,可调用 RCRTCEngine 中的 unsubscribeLiveMix 方法来取消订阅指定的合流资源。
方法
RCRTCEngine.unsubscribeLiveMix();