本章节为您介绍了Android端实现老师和学生端的互动模式接入。

老师端

  1. 在加入频道之前设置频道模式为互动模式。
    AliRtcEngine mAliRtcEngine = AliRtcEngine.getInstance(getApplicationContext());
    mAliRtcEngine.setChannelProfile(AliRTCSDK_Channel_Profile.AliRTCSDK_Interactive_live);
  2. 在加入频道之前设置为非自动发布和自动订阅模式。
    mAliRtcEngine.setAutoPublish(false, true);
  3. 设置为互动模式后,切换角色为AliRTCSDK_Interactive(入会前后均可,但是需要在调用publish接口进行推流前)。
    mAliRtcEngine.setClientRole(AliRTCSDK_Client_Role.AliRTCSDK_Interactive);
    说明 此接口暂时不要处理接口返回值。
  4. 加入频道后,切换角色成功后可收到回调。
    /**
         * 当前角色变化通知。当本地用户在加入频道后调用setClientRole切换角色成功时会触发此回调
         *
         * @ param oldRole 切换前的角色
         * @ param newRole 切换后的角色
         * @ return 无
         */
        void onUpdateRoleNotify(ALI_RTC_INTERFACE.AliRTCSDK_Client_Role oldRole, ALI_RTC_INTERFACE.AliRTCSDK_Client_Role newRole);
    说明 如果在加入频道成功前设置,默认初始角色即为设置角色,不会接收到此变更回调,加入频道后成功设置为为不同角色时会回调通知。同时需要业务侧关注一下当前的角色参数值,例如当前是AliRtcClientRoleInteractive角色,再次调用mAliRtcEngine.setClientRole(AliRTCSDK_Client_Role.AliRTCSDK_Interactive); 不会收到回调。建议您将角色切换和推拉流的逻辑区分开。
  5. 调用publish接口开始发布。
    说明 发布前需要确保加入频道已经成功,否则发布会失败。

    AliRTCSDK_Client_Role参数如下:

    • AliRTCSDK_Interactive:参与互动角色,可以推拉流。
    • AliRTCSDK_live:仅观看角色,只能拉流,适用于普通观众。
  6. 远端用户推流、停止推流消息回调(学生端收到远端用户推流消息的回调与此相同)。
    /**
         * 当远端用户的流发生变化时,返回这个消息
         * @param uid 用户ID
         * @param audioTrack 音频
         * @param videoTrack 视频
         * @note 远方用户停止推流,也会发送这个消息
         */
        void onRemoteTrackAvailableNotify(String uid, AliRtcAudioTrack audioTrack, AliRtcVideoTrack videoTrack);
    说明
    • AliRtcAudioTrack=AliRtcAudioTrackNo,并且AliRtcVideoTrack=AliRtcVideoTrackNo 时代表远端用户停止推流。
    • AliRtcAudioTrack或者AliRtcVideoTrack为非No的参数值时代表远端用户对应的推流状态。

学生端

加入频道之前设置频道模式为互动模式。
AliRtcEngine mAliRtcEngine = AliRtcEngine.getInstance(getApplicationContext());
mAliRtcEngine.setChannelProfile(AliRTCSDK_Channel_Profile.AliRTCSDK_Interactive_live);

普通观众:设置为互动模式后,默认角色为只观看角色,也就是只可拉流观看直播,不能推流。此角色适用于普通观众,无需其他操作。

连麦观众操作步骤如下所示。

  1. 开始上麦。
    1. 如果普通观众需要上麦切换为连麦观众的话,需要先切换用户角色。
    2. 切换角色为AliRTCSDK_Interactive(需要在调用publish接口进行推流前)。
      mAliRtcEngine.setClientRole(AliRTCSDK_Client_Role.AliRTCSDK_Interactive);
      切换成功后可收到回调。
      /**
           * 当前角色变化通知。当本地用户在加入频道后调用 setClientRole 切换角色成功时会触发此回调
           *
           * @ param oldRole 切换前的角色
           * @ param newRole 切换后的角色
           * @ return 无
           */
          void onUpdateRoleNotify(ALI_RTC_INTERFACE.AliRTCSDK_Client_Role oldRole, ALI_RTC_INTERFACE.AliRTCSDK_Client_Role newRole);
    3. 收到回调后,调用publish接口开始推流。
      // 配置推送音频流,可根据需要设置开启
      mAliRtcEngine.configLocalAudioPublish(true);
      
      // 配置推送摄像头流,可根据需要开启
      mAliRtcEngine.configLocalCameraPublish(true);
      
      // 配置推送音频流,可根据需要开启
      mAliRtcEngine.configLocalScreenPublish(true);
      
      // 启动推流,publish是异步接口需要收到onPublishResult之后且result为0才能算推流成功,请参考设置setRtcEngineEventListener接口的相应回调
      mAliRtcEngine.publish();
  2. 下麦。

    与上麦逻辑相反,如果连麦观众需要下麦切换为普通观众的话,需要先停止推流,再进行角色切换。

    1. 停止推流。
      // 配置推送音频流,可根据需要设置关闭
      mAliRtcEngine.configLocalAudioPublish(false);
      
      // 配置推送摄像头流,可根据需要关闭
      mAliRtcEngine.configLocalCameraPublish(false);
      
      // 配置推送音频流,可根据需要关闭
      mAliRtcEngine.configLocalScreenPublish(false);
      
      // 启动推流,publish是异步接口需要收到onPublishResult之后且result为0才能算推流成功,请参考设置setRtcEngineEventListener接口的相应回调
      mAliRtcEngine.publish();
    2. 停止推流收到回调之后,即可切换为普通观众模式。
      mAliRtcEngine.setClientRole(AliRTCSDK_Client_Role.AliRTCSDK_live);
    3. 切换成功后可收到onUpdateRoleNotify回调,继续保持拉流观看。