视频订阅

本章节介绍视频订阅相关的功能,主要有以下内容。

1. 多流(beta )

2. 自动发布视频

3. 手动发布视频

4. 自动订阅音视频

5. 手动订阅音视频

6. 订阅/发布相关的回调

说明:视频订阅给了用户极大的自主权来决定什么时候发布视频(及发布什么类型的视频)、订阅视频(及订阅什么类型的视频),这对性能、体验、资费有较大的帮助,因此推荐用户使用手动模式。

注意:视频订阅相关的功能只在会议模式下可用,点对点模式下所有相关的接口调用都是是无效的,并且也不会收到订阅相关的回调

多流(beta )

无论是自动发布,还是手动发布,目前SDK默认单流 ( 大流 ) , 如果需要发布多流 (大流+小流 ),可自行设置相应的模式,小流的分辨率固定为180p , 目前多流功能处于beta 版阶段。

参数 说明
mode 流模式

AVChatManager.getInstance().setLocalVideoSimulcastModel(NRtcConstants.Subscribe.PUBLISH_MODEL_SINGLE_STREAM);

自动发布视频

自动发布是默认的模式,在自动发布模式下,SDK 会自动发布本端的视频流。

手动发布视频

如果需要手动发布视频,首先需要在初始化SDK (enableRtc())后,发起/接受通话前关闭自动发布,开启手动发布。

开启手动发布后,可以在需要发布视频的时候调用以下API来发布视频:

 /**
     * 手动发布视频流
     *
     * @return 0 :操作成功,但是否发布成功还得看回调结果{@link AVChatStateObserver#onPublishVideoResult(int)} <br/>
     * {@link RtcCode.Subscribe#VIDEO_IS_MUTED_ERR }:当前视频是mute 的  <br/>
     * {@link RtcCode.Subscribe#IS_AUDIENCE_ERR} :当前是观众 <br/>
     * {@link RtcCode.Subscribe#IS_AUDIO_MODE_ERR}:当前是音频模式 <br/>
     * {@link RtcCode.Subscribe#ACTION_DUPLICATE_ERR}:当前有正在进行中的操作 <br/>
     * {@link RtcCode.Subscribe#MODE_CONFLICT_ERR}:模式冲突,当前是自动模式<br/>
     * {@link RtcCode.Subscribe#FORBID_ACTION}:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持<br/>
     * -1 :其它失败 <br/>
     */
    public abstract int publishVideo();

在发布操作成功后(既结果返回0) , 之后会有相关的回调通知AVChatStateObserver#onPublishVideoResult(int),详情参考下文关于回调的描述。

如果需要取消发布视频,参考如下API:

/**
 * 手动取消发布视频流
 * @return 0 :操作成功,但是否取消发布成功还得看回调结果{@link AVChatStateObserver#onUnpublishVideoResult(int)} <br/>
 * {@link RtcCode.Subscribe#VIDEO_IS_MUTED_ERR }:当前视频是mute 的  <br/>
 * {@link RtcCode.Subscribe#IS_AUDIENCE_ERR} :当前是观众 <br/>
 * {@link RtcCode.Subscribe#IS_AUDIO_MODE_ERR}:当前是音频模式 <br/>
 * {@link RtcCode.Subscribe#ACTION_DUPLICATE_ERR}:当前有正在进行中的操作 <br/>
 * {@link RtcCode.Subscribe#MODE_CONFLICT_ERR}:模式冲突,当前是自动模式<br/>
 * {@link RtcCode.Subscribe#FORBID_ACTION}:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持<br/>
 * -1 :其它失败 <br/>
 */
public abstract int unpublishVideo();

在取消发布操作成功后(既结果返回0) , 之后会有相关的回调通知AVChatStateObserver#onUnpublishVideoResult(int),详情参考下文关于回调的描述。

自动订阅音视频

自动订阅是默认的模式,在自动订阅模式下,SDK 会自动订阅会议中所有其他参与者的发布的视频及音频。

手动订阅音视频

如果需要手动订阅,首先需要在初始化SDK (enableRtc())后,发起/接受通话前关闭自动订阅,开启手动订阅。

    /**
     * 手动订阅视频流
     *
     * @param account   要订阅的account
     * @param videoType 要订阅的流类型,参考:<br/>
     *                  {@link NRtcConstants.Subscribe#VIDEO_TYPE_HIGH_RES}: 大流<br/>
     *                  {@link NRtcConstants.Subscribe#VIDEO_TYPE_LOW_RES}: 小流<br/>
     * @return 0:操作成功 ,但是否订阅成功还得看回调结果{@link AVChatStateObserver#onSubscribeVideoResult(String, int, int)} <br/>
     * {@link RtcCode.Subscribe#ACTION_DUPLICATE_ERR}:当前有正在进行中的操作 <br/>
     * {@link RtcCode.Subscribe#MODE_CONFLICT_ERR}:模式冲突,当前是自动模式<br/>
     * {@link RtcCode.Subscribe#FORBID_ACTION}:非法操作 , 订阅相关的操作只在会议模式下有效 ,点对点不支持<br/>
     * {@link RtcCode.Subscribe#TYPE_CONFLICT_ERR}:视频类型冲突,需要取消之前订阅的流<br/>
     * -1 :其它失败 <br/>
     */
    public abstract int subscribeVideo(String account, int videoType);

在手动订阅视频流操作成功后(既结果返回0) , 之后会有相关的回调通知AVChatStateObserver#onSubscribeVideoResult(String, int , int ),详情参考下文关于回调的描述。

订阅/发布相关的回调

在会议模式下,用户会收到订阅相关的回调,主要有以下两大类:

1. 本端发布(取消)、订阅(取消)操作相关的回调

2. 远端用户发布(取消)的回调

     /**
     * 订阅视频流回调
     *
     * @param account   用户account
     * @param videoType 订阅的流类型,参考:<br/>
     *                  {@link NRtcConstants.Subscribe#VIDEO_TYPE_HIGH_RES}: 大流<br/>
     *                  {@link NRtcConstants.Subscribe#VIDEO_TYPE_LOW_RES}: 小流<br/>
     * @param result    0表示订阅成功,非0表示失败
     */
    void onSubscribeVideoResult(String account, int videoType, int result);

说明:只有在某个用户发布了视频的时候,才能成功订阅对方的视频,建议本地可以记录已经发布视频的用户列表

说明:当某个用户取消发布视频时,建议删除本地对应用户的发布记录

查询功能

SDK提供了查询当前订阅、发布状态的接口,具体如下:

1. 查询当前是否为自动发布模式

2. 查询当前视频是否为自动订阅模式

3. 查询当前音频是否为自动订阅模式

AVChatManager.getInstance().isAutoPublishVideo()

AVChatManager.getInstance().isAutoSubscribeVideo()

AVChatManager.getInstance().isAutoSubscribeAudio()