| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- <?php
- namespace app\api\controller\plus\live\agora;
- use app\api\controller\Controller;
- use app\api\model\plus\live\Room as RoomModel;
- use app\common\library\agora\token\TokenService;
- use app\common\model\plus\live\UserGift as UserGiftModel;
- use app\common\model\settings\Setting as SettingModel;
- /**
- * 声网api
- */
- class Api extends Controller
- {
- /**
- * 登录房间
- */
- public function login($room_id, $channel, $isCaster = false)
- {
- $user = $this->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('');
- }
- }
|