team_id.'_click_num'; } public function liveLogs() { return $this->hasOne(TeamLiveLog::class, 'live_id', 'id'); } /** * 主播 */ public function anchor() { return $this->belongsTo(User::class, 'user_id'); } /** * 创建聊天室 * @param [type] $creator [description] * @param [type] $name [description] * @param [type] $announcement [description] * @return [type] [description] */ public function createChatRoom($creator, $name, $announcement='', $broadcasturl='', $ext=[], $queuelevel=0) { try { // $im = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); // $result = $im->chatRoomCreate($creator, $name, $announcement, $broadcasturl, $ext, $queuelevel); // if (empty($result) || $result['code'] != 200) {//失败 // throw new \Exception("创建IM聊天室请求失败", 1); // } // return $result['chatroom']; return ''; } catch (\Exception $e) { $this->getError($e); return false; } } public function channel() { return $this->hasOne(TeamLiveChannel::class, 'live_id', 'id'); } /** * 创建直播流地址 * @param [type] $name [description] * @param [type] $type [description] * @return [type] [description] */ public function createLiveChannel($name) { try { //判断数据是否有对应流 $channel = $this->channel; if (empty($channel)) { $im = new IMService(); $result = $im->channelCreate($name,0); if (empty($result) || $result['code'] != 200) {//失败 throw new \Exception("创建直播流失败", 1); } $ret = $result['ret']; //创建直播流 $channel = $this->channel()->create([ 'name'=>$name, 'push_url'=>$ret['pushUrl'], 'http_pull_url'=>$ret['httpPullUrl'], 'hls_pull_url'=>$ret['hlsPullUrl'], 'rtmp_pull_url'=>$ret['rtmpPullUrl'], 'cid'=>$ret['cid'] ]); } return $channel; } catch (\Exception $e) { $this->getError($e); return false; } } /** * [createChannel 创建音视频房间] * @param [type] $type [description] * @param [type] $channelName [description] * @param [type] $accid [description] * @param integer $webrtc [description] * @param array $selfconfig [description] * @param array $roomconfig [description] * @return [type] [description] */ public function createChannelRoom($type, $channelName, $accid=null, $webrtc=0, $selfconfig=[], $roomconfig='', $version=1) { try { $im = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); switch ($version){ case 1: $result = $im->createChannel($type, $channelName, $accid, $webrtc, $selfconfig, $roomconfig); break; case 2: $result = $im->createChannelV2($channelName, $accid); break; default: $result = ''; break; } if (empty($result) || $result['code'] != 200) {//失败 throw new \Exception("创建音视频房间请求失败", 1); } return $result['cid']; } catch (\Exception $e) { $this->getError($e); return false; } } public function channelRoom() { try { if (empty($this->channel_id)) return false; $im = new IMService(); if($this->version == 1){ $result = $im->liveRoom($this->channel_id); }else{ $result = $im->liveRoomV2($this->channel_id); } if (is_array($result) && isset($result['cid'])) { return $result; } return false; } catch (\Exception $e) { $this->getError($e); return false; } } /** * [addRtmpTask 增加一个房间推流任务] * @param [type] $channelName [description] */ public function addRtmpTask($mian_user_id) { try { $live_name = $this->name; $channel = TeamLiveChannel::where('live_id', $this->id)->first(); if (empty($channel)) throw new \Exception("直播频道不存在", 1); //加入直播间 todo $task = [ "taskId"=>$channel->cid, "streamUrl"=>$channel->push_url, "layoutMode"=>"M-0", "record"=>true, "accid"=>$this->user_id, ]; //增加一个房间推流任务 $im = new IMService(); if($this->version == 2){ $result = $im->addRtmpTaskV2($live_name, $this->channel_id, $task); }else{ $task = json_encode($task, JSON_UNESCAPED_UNICODE); $result = $im->addRtmpTask($live_name, 0, $task); } if (empty($result) || $result['code'] != 200) {//失败 throw new \Exception("增加一个房间推流任务失败", 1); } return true; } catch (\Exception $e) { $this->getError($e); return false; } } public function getRtmpTask() { $live_name = $this->name; $channel = $this->channel; if (empty($channel)) return false; try { //查看房间推流 $im = new IMService(); if($this->version == 1){ $result = $im->getRtmpTask($live_name, $type=0, $channel->cid); }else{ $result = $im->getRtmpTaskV2($live_name, $this->channel_id, $channel->cid); } if (empty($result) || $result['code'] == 404) {//失败 return false; }elseif (empty($result) || ($result['code'] != 200 && $result['code'] != 404)) { throw new \Exception("查看单个房间推流任务失败", 1); } return $result['rtmpTask']; } catch (\Exception $e) { $this->getError($e); return false; } } }