初始化项目:添加后端代码、ThinkPHP框架、前端资源
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\controller\live;
|
||||
|
||||
use app\common\controller\Api;
|
||||
|
||||
/**
|
||||
* 直播间
|
||||
*/
|
||||
class Room extends Api
|
||||
{
|
||||
// 无需登录的接口,*表示全部
|
||||
protected $noNeedLogin = [];
|
||||
protected $noNeedRight = '*';
|
||||
|
||||
|
||||
protected $modal;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user