account_id; $status = $request->status; $lives = MerchantLive::where('merchant_id', $merchant_id) ->where('is_show',1) ->wherein('status',$status) ->orderBy('is_top','desc') ->orderBy('top_time','desc') ->orderBy('id','desc') ->paginate(); foreach ($lives as $key => $value) { $value->channel; } return $this->success('ok',$lives); } // 开始直播 public function live(Request $request,$id) { $merchant_id = $request->account_id; $accid = 1000000+$merchant_id; $live = MerchantLive::where('id',$id)->first(); if(!$live) return $this->failure('直播不存在'); //创建主播直播流 $channel_name = env('APP_ENV').'_bussiness_live_id_'.$live->id; $channel = $live->createLiveChannel($channel_name); if (empty($channel)) return $this->failure('创建直播流失败。'); //创建互动直播 $room = $live->channelRoom(); $im = new IMService(); if (empty($room) || !in_array($room['stats'] , [1,2,3])) { $result = $im->createChannelV2($live->title, $accid); if(!isset($result['cid'])) return $this->failure('创建音视频房间失败'); $live->channel_id = $result['cid']; $live->save(); // 增加房间推流任务 $result = $live->addRtmpTask($accid); if (empty($result)) return $this->failure('房间推流失败。'); } $live->status = 1; $live->save(); $live->addLiveLog(); $anchor = Anchor::select('name','pic')->where('m_id',$live->merchant->id)->first(); $live->pic = $anchor->pic??User::DefaultAvatar; $live->name = $anchor->name??'匿名用户'; $live->pv = Redis::zscore('merchantLive',$id)??0; $live->uid = 1000000+$merchant_id; $url = urlencode(env('APP_URL').'/pu/#/ordinaryWatchLive/'.$id); $live->share_url = env('APP_URL').'/api/official/live/wechat/FamilyAuth?from_openid='.$anchor->openid.'&merchant_id='.$merchant_id.'&url='.$url; unset($live->merchant); unset( $live->channel); $live->channel = $channel; $live->chat_token = WangYiYunUser::where('accid',$accid)->value('token'); $data = ['channel_name'=>$live->title,'uid'=>$live->uid]; $curl_result = $im->getTokenV2($data); if($curl_result['code'] == 200 && !empty($curl_result['token'])){ $live->live_token = $curl_result['token']; } return $this->success('ok',$live); } // 直播详情 public function liveDetail(Request $request,$id) { $live = MerchantLive::select('id','title')->where('id',$id)->first(); $live['pv'] = Redis::zscore('merchantLive',$id)?:0; return $this->success('ok',$live); } // 结束直播 public function offLive(Request $request,$id) { $live = MerchantLive::where('id',$id)->first(); if(!$live) return $this->failure('直播不存在'); $live->status =2; $live->save(); MerchantLiveLog::where('live_id',$id)->update(['end_time'=>now()]); return $this->success('ok'); } /**获取聊天室的地址 */ public function getChatroomAddress(Request $request){ $merchant_id = $request->account_id; $accid = 1000000+$merchant_id; $im = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $url = $im->getChatroomAddress($request->roomid,$accid,$request->clienttype); return $this->success('ok', ['chatroomAddress'=>$url]); } // 禁言 public function mute(Request $request) { # code... $mute = new MerchantLiveBanLog(); $mute->merchant_id = $request->merchant_id; $mute->m_user_id = $request->m_user_id; $mute->start_time = $request->start_time; $mute->end_time = $request->end_time; $mute->live_id = $request->live_id; $mute->Operator = $request->Operator; $mute->reason = $request->reason; $mute->save(); return $this->success('ok'); } }