getUser(); $value = SettingModel::getItem('live'); $appId = $value['app_id']; $appCertificate = $value['key']; $userSign = TokenService::getRtcToken($user['user_id'], $channel, $appId, $appCertificate, $isCaster); //累计观看人数 (new RoomModel())->where('room_id', '=', $room_id)->inc('view_num')->update(); $room = RoomModel::detail($room_id); $user_gift_model = UserGiftModel::detail($room_id, $user['user_id']); if (!$user_gift_model) { // 插入用户礼物表 (new UserGiftModel())->save([ 'room_id' => $room_id, 'user_id' => $user['user_id'], 'app_id' => $room['app_id'] ]); } return $this->renderSuccess('', compact('userSign', 'user', 'appId')); } /** * rtm授权 */ public function rtmToken() { $user = $this->getUser(); $value = SettingModel::getItem('live'); $appId = $value['app_id']; $appCertificate = $value['key']; $userSign = TokenService::getRtmToken($user['user_id'] . "", $appId, $appCertificate); return $this->renderSuccess('', compact('userSign')); } /** * 请求录制 */ public function record_acquire($room_id) { $settings = SettingModel::getItem('live'); if($settings['is_record'] == 0){ return $this->renderSuccess(''); } $room = RoomModel::detail($room_id); if($room['record_resource_id'] != ''){ return $this->renderSuccess(''); } $curl = curl_init(); $header = [ 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode($settings['username'] . ':' . $settings['password']) ]; $data = "{ \"cname\": \"{$room['room_name']}\", \"uid\": \"{$room['record_uid']}\", \"clientRequest\":{ } }"; curl_setopt($curl, CURLOPT_URL, "https://api.agora.io/v1/apps/{$settings['app_id']}/cloud_recording/acquire"); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $response = json_decode(curl_exec($curl), true); curl_close($curl); $resourceId = $response['resourceId']; $room->save([ 'record_resource_id' => $resourceId ]); return $this->renderSuccess(''); } /** * 开始录制 * { * "resourceId": "nUwUbQf9Zg6tsgtLslGnDg0lk8RYaUE09pqOuSIgwfx_RCWYj4P3oDfpUoGbm4kTO6pcgOOsoogy0zqHVMN-Xt-D_pSRZoGKePV1i5mt-MWp-wsSGHFVRYqVnNYhiNE4VhDf33vBNJw4FReRsORLxajYLaR0TeQJL5M_V8mGvkZeg9KQ_9TmOtlyWxpavS7ynAsMQuDEk_V7Pbl1HLC5_dxFLTcCc4rH9mBZ7gUCjELwKyf-uoxgMAuOjtZHibf1ba-ZW_zijbsf8fxHYSGK84ud3iSi5Z-UH9DZWZbnMN1KJ1zA1pnU1-i2kTb_9TSV", * "sid": "661086d50844a5a9b680f6808a4b668c" * } */ public function record_start($room_id) { $settings = SettingModel::getItem('live'); if($settings['is_record'] == 0){ return $this->renderSuccess(''); } $room = RoomModel::detail($room_id); if($room['record_sid'] != ''){ return $this->renderSuccess(''); } $curl = curl_init(); $header = [ 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode($settings['username'] . ':' . $settings['password']) ]; $userSign = TokenService::getRtcToken($room['record_uid'], $room['room_name'], $settings['app_id'], $settings['key'], false); $data = "{ \"cname\":\"{$room['room_name']}\", \"uid\":\"{$room['record_uid']}\", \"clientRequest\":{ \"token\":\"{$userSign}\", \"recordingConfig\":{ \"maxIdleTime\":300, \"streamTypes\":2, \"audioProfile\":1, \"channelType\":1, \"videoStreamType\":0 }, \"storageConfig\":{ \"vendor\":{$settings['vendor']}, \"region\": {$settings['region']}, \"bucket\":\"{$settings['bucket']}\", \"accessKey\":\"{$settings['accessKey']}\", \"secretKey\":\"{$settings['secretKey']}\" } } }"; //\"fileNamePrefix\":{$settings['fileNamePrefix']} curl_setopt($curl, CURLOPT_URL, "https://api.agora.io/v1/apps/{$settings['app_id']}/cloud_recording/resourceid/{$room['record_resource_id']}/mode/mix/start"); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $response = json_decode(curl_exec($curl), true); curl_close($curl); $sid = ''; if($response['sid']){ $sid = $response['sid']; $room->save([ 'record_sid' => $sid ]); } return $this->renderSuccess('', compact('sid')); } /** * 请求录制 */ public function record_query($room_id) { $settings = SettingModel::getItem('live'); if($settings['is_record'] == 0){ return $this->renderSuccess(''); } $room = RoomModel::detail($room_id); if($room['record_sid'] == ''){ return $this->renderSuccess(''); } $curl = curl_init(); $header = [ 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode($settings['username'] . ':' . $settings['password']) ]; $url = "https://api.agora.io/v1/apps/{$settings['app_id']}/cloud_recording/resourceid/{$room['record_resource_id']}/sid/{$room['record_sid']}/mode/mix/query"; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $response = json_decode(curl_exec($curl), true); curl_close($curl); $record_url = $response['serverResponse']['fileList']; if($record_url != ''){ $room->save([ 'record_url' => $settings['domain']. '/'.$record_url ]); } return $this->renderSuccess('', compact('record_url')); } /** * 停止录制 */ public function record_stop($room_id) { $settings = SettingModel::getItem('live'); $room = RoomModel::detail($room_id); if($room['record_sid'] == ''){ return $this->renderSuccess(''); } $curl = curl_init(); $header = [ 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode($settings['username'] . ':' . $settings['password']) ]; $data = "{ \"cname\": \"{$room['room_name']}\", \"uid\": \"{$room['record_uid']}\", \"clientRequest\":{ } }"; curl_setopt($curl, CURLOPT_URL, "https://api.agora.io/v1/apps/{$settings['app_id']}/cloud_recording/resourceid/{$room['record_resource_id']}/sid/{$room['record_sid']}/mode/mix/stop"); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $response = json_decode(curl_exec($curl), true); curl_close($curl); return $this->renderSuccess(''); } }