Windows

更新时间:2025-03-17 09:41:55

通过阅读本文,您可以了解实现教师端和学生端互动模式的接入流程。

教师端

  1. 在教师加入频道之前调用SetChannelProfile设置频道模式为互动模式。
    pEngine->setChannelProfile(AliRtcChannelProfileInteractiveLive);
  2. 在教师加入频道之前调用SetClientRole设置角色为互动角色。
    pEngine->setClientRole(AliRtcClientRoleInteractive);
    说明
    加入频道之后也可以设置角色,如果设置前、后的角色类型不同,设置成功后可触发回调OnUpdateRoleNotify
  3. 在教师加入频道之前设置为默认订阅音视频。
    // 配置默认订阅音频流,可根据需要开启
    pEngine->SetDefaultSubscribeAllRemoteAudioStreams(true);
    // 配置默认订阅视频流,可根据需要开启
    pEngine->SetDefaultSubscribeAllRemoteVideoStreams(true);
  4. 调用JoinChannel加入频道。
    pEngine->joinChannel(aliRtcAuthInfo, userName);
  5. 开始推流。
    // 配置推送音频流,可根据需要开启
    pEngine->PublishLocalAudioStream(true);
    // 配置推送摄像头流,可根据需要开启
    pEngine->PublishLocalVideoStream(true);
    // 配置推送屏幕流,可根据需要开启
    pEngine->StartScreenShareByDesktopId(desktopId, config);
    名称类型描述
    desktopIdunsigned int桌面ID(可通过GetScreenShareSourceInfo接口获取)。
    configconst AliEngineScreenShareConfig &屏幕分享配置。
  6. 推流后通过回调判断音频是否发布成功。
    void OnAudioPublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
    名称类型描述
    oldStateAliEnginePublishState之前的推流状态。
    newStateAliEnginePublishState当前的推流状态。
    elapseSinceLastStateint状态变更时间间隔。
    channelconst char *当前频道ID。
  7. 推流后通过回调判断视频是否发布成功。
    void OnVideoPublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
    名称类型描述
    oldStateAliEnginePublishState之前的推流状态。
    newStateAliEnginePublishState当前的推流状态。
    elapseSinceLastStateint状态变更时间间隔。
    channelconst char *当前频道ID。
  8. 推流后通过回调判断屏幕共享是否发布成功。
    void OnScreenSharePublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
    名称类型描述
    oldStateAliEnginePublishState之前的推流状态。
    newStateAliEnginePublishState当前的推流状态。
    elapseSinceLastStateint状态变更时间间隔。
    channelconst char *当前频道ID。
  9. 远端用户推流、停止推流消息回调(学生端收到远端用户推流消息的回调与教师端相同)。
    /**
     * @brief 当远端用户的流发生变化时,返回这个消息
     * @param uid         User ID。从App server分配的唯一标示符
     * @param audioTrack         音频流类型,详见AliRtcAudioTrack
     * @param videoTrack         视频流类型,详见AliRtcVideoTrack
     * @note 远方用户停止推流,也会发送这个消息
     */
    virtual void onRemoteTrackAvailableNotify(const AliRtc::String & uid,
                                              AliRtcAudioTrack audioTrack,
                                              AliRtcVideoTrack videoTrack)
    说明
    • audioTrack取值为AliRtcAudioTrackNo并且videoTrack取值为AliRtcVideoTrackNo时,表示远端用户停止推流;其他情况表示远端用户对应的推流状态。
    • 加入频道之后也可设置角色,设置成功后可收到回调。
        void onUpdateRoleNotify(const AliRtcClientRole old_role, const AliRtcClientRole new_role)
    • 需要业务侧关注一下当前的角色参数值,例如当前是AliRtcClientRoleInteractive角色,再次调用以下接口将不会收到回调。
      pEngine->setClientRole(AliRtcClientRoleInteractive);
    • 建议业务侧将角色切换和推拉流的逻辑区分开。

学生端

  1. 在学生加入频道之前调用SetChannelProfile设置频道模式为互动模式。
    pEngine->setChannelProfile(AliRtcChannelProfileInteractiveLive);
    说明
    • 普通观众:设置为互动模式后,默认角色类型为“仅观看角色”,即只可拉流观看直播,不能推流。此角色适用于普通观众,无需其他操作。
    • 连麦观众:角色类型为“参与互动角色”,可以推流,操作步骤参考下方上麦。
  2. 调用JoinChannel加入频道。
    pEngine->JoinChannel(aliRtcAuthInfo, userName);
  3. 上麦。(如果普通观众需要上麦切换为连麦观众的话,需要先切换用户角色。)
    1. 切换角色为AliRtcClientRoleInteractive(需要在调用publish接口进行推流前)。
      pEngine->setClientRole(AliRtcClientRoleInteractive);
    2. 切换成功后可收到回调。
      void onUpdateRoleNotify(const AliRtcClientRole old_role, const AliRtcClientRole new_role) {};
    3. 收到回调后,开始推流。
      // 配置推送音频流,可根据需要开启
      pEngine->PublishLocalAudioStream(true);
      // 配置推送摄像头流,可根据需要开启
      pEngine->PublishLocalVideoStream(true);
    4. 推流后通过回调判断音频是否发布成功。
      void OnAudioPublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
      名称类型描述
      oldStateAliEnginePublishState之前的推流状态。
      newStateAliEnginePublishState当前的推流状态。
      elapseSinceLastStateint状态变更时间间隔。
      channelconst char *当前频道ID。
    5. 推流后通过回调判断视频是否发布成功。
      void OnVideoPublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
      名称类型描述
      oldStateAliEnginePublishState之前的推流状态。
      newStateAliEnginePublishState当前的推流状态。
      elapseSinceLastStateint状态变更时间间隔。
      channelconst char *当前频道ID。
    6. 推流后通过回调判断屏幕共享是否发布成功。
      void OnScreenSharePublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
      名称类型描述
      oldStateAliEnginePublishState之前的推流状态。
      newStateAliEnginePublishState当前的推流状态。
      elapseSinceLastStateint状态变更时间间隔。
      channelconst char *当前频道ID。
  4. 下麦。与上麦逻辑相反,如果连麦观众需要下麦切换为普通观众的话,需要先停止推流,再进行角色切换。
    1. 停止推流。
      // 配置取消推送音频流,可根据需要关闭
      pEngine->PublishLocalAudioStream(false);
      // 配置取消推送摄像头流,可根据需要关闭
      pEngine->PublishLocalVideoStream(false);
    2. 停止推流后通过回调判断音频是否取消发布成功。
      void OnAudioPublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
      名称类型描述
      oldStateAliEnginePublishState之前的推流状态。
      newStateAliEnginePublishState当前的推流状态。
      elapseSinceLastStateint状态变更时间间隔。
      channelconst char *当前频道ID。
    3. 停止推流后通过回调判断视频是否取消发布成功。
      void OnVideoPublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
      名称类型描述
      oldStateAliEnginePublishState之前的推流状态。
      newStateAliEnginePublishState当前的推流状态。
      elapseSinceLastStateint状态变更时间间隔。
      channelconst char *当前频道ID。
    4. 停止推流后通过回调判断屏幕共享是否取消发布成功
      void OnScreenSharePublishStateChanged(AliEnginePublishState oldState, AliEnginePublishState newState, int elapseSinceLastState, const char *channel);
      名称类型描述
      oldStateAliEnginePublishState之前的推流状态。
      newStateAliEnginePublishState当前的推流状态。
      elapseSinceLastStateint状态变更时间间隔。
      channelconst char *当前频道ID。
    5. 停止推流之后,即可切换为普通观众角色。
      pEngine->setClientRole(AliRtcClientRoleLive);
    6. 切换成功后可收到回调,继续保持拉流观看。
      void onUpdateRoleNotify(const AliRtcClientRole old_role, const AliRtcClientRole new_role)
  • 本页导读 (0)
  • 教师端
  • 学生端
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等