belongsTo(MerchantAccount::class,'merchant_id'); } // 直播流信息 public function channel() { return $this->hasOne(MerchantLiveChannels::class, 'live_id', 'id'); } //直播布局 public function layout() { $merchant = $this->merchant; $accid = 1000000+$merchant->id; // 查看网易云账户 $exists = WangYiYunUser::where('accid', $accid)->exists(); if(!$exists){ $data['name'] = $merchant->anchorV2->name; $data['pic'] = $merchant->anchorV2->pic; $data['mobile'] = $merchant->anchorV2->mobile; $data['anchor_id'] = $merchant->anchorV2->id; $data['accid'] = $accid; MerchantAccount::createIMUser($data); } //创建聊天室 // $chat_room = $this->createChatRoom($accid,$this->title); // if (empty($chat_room)) throw new \Exception("创建IM聊天室失败", 1); // $this->chat_room_id = $chat_room['roomid']; $this->save(); } /** * 创建聊天室 * @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']; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 创建直播流地址 * @param [type] $name [description] * @param [type] $type [description] * @return [type] [description] */ public function createLiveChannel($name) { //判断数据是否有对应流 $channel = $this->channel; if (empty($channel)) { $im = new IMService(); $result = $im->channelCreate($name,0); if (empty($result) || $result['code'] != 200) {//失败 } if(!$result || !isset($result['ret'])){ return false; } $ret = $result['ret']; //创建直播流 $channel = new MerchantLiveChannels(); $channel->name = $name; $channel->live_id = $this->id; $channel->push_url = $ret['pushUrl']; $channel->http_pull_url = $ret['httpPullUrl']; $channel->hls_pull_url = $ret['hlsPullUrl']; $channel->rtmp_pull_url = $ret['rtmpPullUrl']; $channel->cid = $ret['cid']; $channel->save(); } return $channel; } /** * [addRtmpTask 增加一个房间推流任务V2] * @param [type] $channelName [description] */ public function addRtmpTask($accid) { try { $live_name = $this->title; $channel = MerchantLiveChannels::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"=>$accid, ]; //增加一个房间推流任务 // $im = new IMService(); // $result = $im->addRtmpTaskV2($live_name, $this->channel_id, $task); // if (empty($result) || $result['code'] != 200) {//失败 // throw new \Exception("增加一个房间推流任务失败", 1); // } return true; } catch (\Exception $e) { $this->getError($e); return false; } } public function channelRoom() { try { if (empty($this->channel_id)) return false; $im = new IMService(); $result = $im->liveRoom($this->channel_id); if (is_array($result) && isset($result['cid'])) { return $result; } return false; } catch (\Exception $e) { $this->getError($e); return false; } } public function addLiveLog() { $LiveLog = new MerchantLiveLog(); $LiveLog->merchant_id = $this->merchant_id; $LiveLog->live_id = $this->id; $LiveLog->start_time = now(); $LiveLog->save(); } public function getPosterAttribute($value) { if ($this->merchant_id == 491) { if ($value) { if (!strpos('local-pictures', $value) && !strpos($value, 'x-oss-process')) { return $value . Config('image.watermark'); } else { return $value; } } else { return $value; } }else{ return $value; } } }