131 lines
4.6 KiB
PHP
131 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Server\App;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Live\Anchor;
|
|
use App\Models\Server\MerchantLive;
|
|
use App\Models\Server\MerchantLiveBanLog;
|
|
use App\Models\Server\MerchantLiveLog;
|
|
use App\Models\User;
|
|
use App\Models\WangYiYunUser;
|
|
use App\Services\IMService;
|
|
use Illuminate\Support\Facades\Redis;
|
|
|
|
class LiveController extends Controller
|
|
{
|
|
|
|
//直播列表
|
|
public function liveList(Request $request)
|
|
{
|
|
$merchant_id = $request->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');
|
|
|
|
}
|
|
}
|