modal = new \app\api\model\live\Message; $this->playbackModal = new \app\api\model\live\Playback; } /** * 获取直播间详情 * @return void */ public function getRoomDetail(){ $courseId = input("course_id"); //判断是否已订阅 if(!\app\common\model\user\Subscription::getSubscriptionAuth($this->auth->id,$courseId)){ $this->error("暂未订阅该课程"); } $data = (new \app\common\model\live\Room)->courseGetRoom($courseId); if(!$data){ $this->error("获取直播间信息异常,请刷新重试"); } try{ $data['status'] = (new \app\common\model\live\Room)->getRoomStatus($courseId); }catch (\Exception $e){ $data['status'] = 'offline'; } $data['status_text'] = __($data['status']); $data['message_pubkey'] = \app\common\model\config\System::getConfig('aodianyun')['pubkey']; // 直播间使用的消息服务商统一由全局配置决定,历史直播间也随全局切换生效 $data['message_provider'] = \app\common\library\live\message\Manager::getGlobalProviderName(); // 消息服务是否已开启(管理员可在后台关闭) $data['message_enabled'] = \app\common\library\live\message\Manager::isMessageEnabled() ? 1 : 0; // 阿里云模式下,额外返回客户端 SDK 所需的 AppId 与 AppSign if ($data['message_provider'] === 'aliyun') { $aliyunMessageConfig = \app\common\model\config\System::getConfig('aliyun_message'); $data['aliyun_app_id'] = (is_array($aliyunMessageConfig) && isset($aliyunMessageConfig['app_id'])) ? $aliyunMessageConfig['app_id'] : ''; $data['aliyun_app_sign'] = (is_array($aliyunMessageConfig) && isset($aliyunMessageConfig['app_sign'])) ? $aliyunMessageConfig['app_sign'] : ''; } $data['user_count'] = (new \app\common\model\user\Study)->where([ 'course_id'=>$courseId ])->group('user_id')->count(); return $this->success("操作成功",$data); } /** * 获取回放视频 * @return void */ public function getPlaybackList(){ $courseId = input("course_id"); //判断是否已订阅 if(!\app\common\model\user\Subscription::getSubscriptionAuth($this->auth->id,$courseId)){ $this->error("暂未订阅该课程"); } $data = $this->playbackModal->getVideoList($courseId); return $this->success("获取成功",$data); } /** * 获取直播间状态 * @return void */ public function getRoomStatus(){ $courseId = input("course_id"); //判断是否已订阅 if(!\app\common\model\user\Subscription::getSubscriptionAuth($this->auth->id,$courseId)){ $this->error("暂未订阅该课程"); } $data = (new \app\common\model\live\Room)->getRoomStatus($courseId); return $this->success("获取成功",$data); } /** * 获取在线观看人数 * 数据来源为消息服务(奥点云/阿里云)的在线用户数 * 前端在开启"观看人数"且消息服务已开启时轮询此接口 * @return void */ public function getOnlineUserNum(){ $courseId = input("course_id"); //判断是否已订阅 if(!\app\common\model\user\Subscription::getSubscriptionAuth($this->auth->id,$courseId)){ $this->error("暂未订阅该课程"); } // 消息服务未开启时直接返回 0 if(!\app\common\library\live\message\Manager::isMessageEnabled()){ return $this->success("获取成功", 0); } $roomData = (new \app\common\model\live\Room)->courseGetRoom($courseId); if(!$roomData || !$roomData['message_topic']){ return $this->success("获取成功", 0); } $provider = \app\common\library\live\message\Manager::getGlobalProviderName(); $onlineData = \app\common\library\live\Message::getOnlineUserByProvider($provider, $roomData['message_topic']); if($onlineData && isset($onlineData['total'])){ return $this->success("获取成功", $onlineData['total']); } // 阿里云超级大群等场景无法获取具体数量时返回 0,保持接口可用 if($provider === 'aliyun'){ return $this->success("获取成功", 0); } return $this->success("获取成功", 0); } }