AlipayDisposeService.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace service;
  12. use think\Log;
  13. use think\Request;
  14. use think\Url;
  15. use behavior\wechat\PaymentBehavior;
  16. use service\HookService;
  17. use service\SystemConfigService;
  18. use OSS\OssClient;
  19. use OSS\Core\OssException;
  20. use OSS\Model\RefererConfig;
  21. use OSS\Model\CorsConfig;
  22. use OSS\Model\CorsRule;
  23. use AlibabaCloud\Client\AlibabaCloud;
  24. use AlibabaCloud\Client\Exception\ClientException;
  25. use AlibabaCloud\Client\Exception\ServerException;
  26. class AlipayDisposeService
  27. {
  28. protected static $AccessKeyId = ''; //阿里云AccessKeyId
  29. protected static $accessKeySecret = ''; //阿里云AccessKeySecret
  30. /**
  31. * 初始化
  32. */
  33. final static function init()
  34. {
  35. self::$AccessKeyId = SystemConfigService::get('accessKeyId');//阿里云AccessKeyId
  36. self::$accessKeySecret = SystemConfigService::get('accessKeySecret');//阿里云AccessKeySecret
  37. if (self::$AccessKeyId == '' || self::$accessKeySecret == '') return exception('阿里云AccessKeyId或阿里云AccessKeySecret没有配置');
  38. }
  39. //对象存储OSS
  40. /**
  41. * 创建存储空间
  42. * @param string $endpoint
  43. * @param string $bucket
  44. * @param int $jurisdiction 1:私有 2:公共读 3:公共读写
  45. * @param int $type 1:标准储存 2:低频访问储存 3:归档储存
  46. */
  47. public static function ossDispose($endpoint = '', $bucket = '', $jurisdiction = 1, $type = 1)
  48. {
  49. self::init();
  50. try {
  51. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  52. //检测存储空间是否存在
  53. $res = $ossClient->doesBucketExist($bucket);
  54. if ($res) return false;
  55. switch ($type) {
  56. case 1:
  57. $storage = OssClient::OSS_STORAGE_STANDARD;
  58. break;
  59. case 2:
  60. $storage = OssClient::OSS_STORAGE_IA;
  61. break;
  62. case 3:
  63. $storage = OssClient::OSS_STORAGE_ARCHIVE;
  64. break;
  65. }
  66. // 设置存储空间的存储类型为低频访问类型,默认是标准类型。
  67. $options = array(
  68. OssClient::OSS_STORAGE => $storage
  69. );
  70. switch ($jurisdiction) {
  71. case 1:
  72. $jurisdictions = OssClient::OSS_ACL_TYPE_PRIVATE;
  73. break;
  74. case 2:
  75. $jurisdictions = OssClient::OSS_ACL_TYPE_PUBLIC_READ;
  76. break;
  77. case 3:
  78. $jurisdictions = OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE;
  79. break;
  80. }
  81. // 设置存储空间的权限为公共读,默认是私有读写。
  82. $res = $ossClient->createBucket($bucket, $jurisdictions, $options);
  83. } catch (OssException $e) {
  84. return $e->getMessage();
  85. }
  86. return $res;
  87. }
  88. /**
  89. * 列举存储空间
  90. * @param string $endpoint
  91. */
  92. public static function ossBucketList($endpoint)
  93. {
  94. self::init();
  95. try {
  96. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  97. $bucketListInfo = $ossClient->listBuckets();
  98. } catch (OssException $e) {
  99. return $e->getMessage();
  100. }
  101. $bucketList = $bucketListInfo->getBucketList();
  102. return $bucketList;
  103. }
  104. /**
  105. * 删除存储空间
  106. * @param string $endpoint
  107. * @param string $bucket
  108. */
  109. public static function deleteBucket($endpoint = '', $bucket = '')
  110. {
  111. self::init();
  112. try {
  113. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  114. $res = $ossClient->deleteBucket($bucket);
  115. } catch (OssException $e) {
  116. return $e->getMessage();
  117. }
  118. return $res;
  119. }
  120. /**
  121. *判断存储空间是否存在
  122. * @param string $endpoint
  123. * @param string $bucket
  124. */
  125. public static function doesBucketExist($endpoint = '', $bucket = '')
  126. {
  127. self::init();
  128. try {
  129. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  130. $res = $ossClient->doesBucketExist($bucket);
  131. } catch (OssException $e) {
  132. return $e->getMessage();
  133. }
  134. return $res;
  135. }
  136. /**
  137. * 设置防盗链
  138. * @param string $endpoint
  139. * @param string $bucket
  140. */
  141. public static function bucketReferer($endpoint = '', $bucket = '')
  142. {
  143. self::init();
  144. $refererConfig = new RefererConfig();
  145. // 设置允许空Referer。
  146. $refererConfig->setAllowEmptyReferer(true);
  147. // 添加Referer白名单。Referer参数支持通配符星号(*)和问号(?)。
  148. //$refererConfig->addReferer("www.aliiyun.com");
  149. //$refererConfig->addReferer("www.aliiyuncs.com");
  150. try {
  151. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  152. $res = $ossClient->putBucketReferer($bucket, $refererConfig);
  153. } catch (OssException $e) {
  154. return $e->getMessage();
  155. }
  156. return $res;
  157. }
  158. /**跨域规则设置
  159. * @throws OssException
  160. * @param string $endpoint
  161. * @param string $bucket
  162. */
  163. public static function putBucketCors($endpoint = '', $bucket = '')
  164. {
  165. $corsConfig = new CorsConfig();
  166. $rule = new CorsRule();
  167. // AllowedHeaders和ExposeHeaders不支持通配符。
  168. $rule->addAllowedHeader("*");
  169. // AllowedOlowedMethods最多支持一个星号(*)通配符。星号(*)表示允许所有的域来源或者操作。
  170. $rule->addAllowedOrigin("*");
  171. $rule->addAllowedMethod("GET");
  172. $rule->addAllowedMethod("POST");
  173. $rule->addAllowedMethod("PUT");
  174. $rule->addAllowedMethod("DELETE");
  175. $rule->addAllowedMethod("HEAD");
  176. $rule->setMaxAgeSeconds(600);
  177. // 每个存储空间最多允许10条规则。
  178. $corsConfig->addRule($rule);
  179. self::init();
  180. try {
  181. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  182. // 已存在的规则将被覆盖。
  183. $res = $ossClient->putBucketCors($bucket, $corsConfig);
  184. } catch (OssException $e) {
  185. return $e->getMessage();
  186. }
  187. return $res;
  188. }
  189. /**获取跨域规则
  190. * @throws OssException
  191. * @param string $endpoint
  192. * @param string $bucket
  193. */
  194. public static function getCrossDomainRules($endpoint = '', $bucket = '')
  195. {
  196. self::init();
  197. $corsConfig = null;
  198. try {
  199. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  200. $corsConfig = $ossClient->getBucketCors($bucket);
  201. } catch (OssException $e) {
  202. printf(__FUNCTION__ . ": FAILED\n");
  203. printf($e->getMessage() . "\n");
  204. return;
  205. }
  206. print(__FUNCTION__ . ": OK" . "\n");
  207. print($corsConfig->serializeToXml() . "\n");
  208. }
  209. /**
  210. * 获取存储空间的地域
  211. * @param string $endpoint
  212. * @param string $bucket
  213. */
  214. public static function ossRegion($endpoint = '', $bucket = '')
  215. {
  216. self::init();
  217. try {
  218. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  219. $Regions = $ossClient->getBucketLocation($bucket);
  220. } catch (OssException $e) {
  221. return $e->getMessage();
  222. }
  223. return $Regions;
  224. }
  225. /**
  226. * 获取存储空间元信息
  227. * @param string $endpoint
  228. * @param string $bucket
  229. */
  230. public static function ossMetas($endpoint = '', $bucket = '')
  231. {
  232. self::init();
  233. try {
  234. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  235. $Metas = $ossClient->getBucketMeta($bucket);
  236. } catch (OssException $e) {
  237. return $e->getMessage();
  238. }
  239. return $Metas['oss-requestheaders'];
  240. }
  241. /**获取文件元信息
  242. * @param string $endpoint
  243. * @param string $bucket
  244. * @param string $ObjectName
  245. */
  246. public static function getFileMetaInformation($endpoint = '', $bucket = '', $ObjectName = '')
  247. {
  248. self::init();
  249. try {
  250. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  251. // 获取文件的全部元信息。
  252. $objectMeta = $ossClient->getObjectMeta($bucket, $ObjectName);
  253. return $objectMeta;
  254. } catch (OssException $e) {
  255. return $e->getMessage();
  256. }
  257. }
  258. //视频直播配置
  259. /**
  260. * 添加直播域名
  261. * @param string $domainName
  262. * @param string $type
  263. */
  264. public static function addLiveDomain($data)
  265. {
  266. self::init();
  267. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  268. ->regionId($data['region'])
  269. ->asDefaultClient();
  270. try {
  271. $result = AlibabaCloud::rpc()
  272. ->product('live')
  273. ->version('2016-11-01')
  274. ->action('AddLiveDomain')
  275. ->method('POST')
  276. ->host('live.aliyuncs.com')
  277. ->options([
  278. 'query' => [
  279. 'RegionId' => $data['region'],
  280. 'LiveDomainType' => $data['live_domain_type'],
  281. 'DomainName' => $data['domain_name'],
  282. 'Region' => $data['region'],
  283. 'Scope' => $data['scope'],
  284. ],
  285. ])
  286. ->request();
  287. return $result->toArray();
  288. } catch (ClientException $e) {
  289. return $e->getErrorMessage() . PHP_EOL;
  290. } catch (ServerException $e) {
  291. return $e->getErrorMessage() . PHP_EOL;
  292. }
  293. }
  294. /**删除已添加的直播域名
  295. * @param $domainName
  296. */
  297. public static function deleteLiveDomains($domainName = '', $regionId = '')
  298. {
  299. self::init();
  300. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  301. ->regionId($regionId)
  302. ->asDefaultClient();
  303. try {
  304. $result = AlibabaCloud::rpc()
  305. ->product('live')
  306. ->version('2016-11-01')
  307. ->action('DeleteLiveDomain')
  308. ->method('POST')
  309. ->host('live.aliyuncs.com')
  310. ->options([
  311. 'query' => [
  312. 'RegionId' => $regionId,
  313. 'DomainName' => $domainName,
  314. ],
  315. ])
  316. ->request();
  317. return $result->toArray();
  318. } catch (ClientException $e) {
  319. return $e->getErrorMessage() . PHP_EOL;
  320. } catch (ServerException $e) {
  321. return $e->getErrorMessage() . PHP_EOL;
  322. }
  323. }
  324. /**查询直播域名配置信息
  325. * @param string $domainName
  326. * @param string $regionId
  327. */
  328. public static function describeLiveDomainDetails($domainName = '', $regionId = '')
  329. {
  330. self::init();
  331. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  332. ->regionId($regionId)
  333. ->asDefaultClient();
  334. try {
  335. $result = AlibabaCloud::rpc()
  336. ->product('live')
  337. ->version('2016-11-01')
  338. ->action('DescribeLiveDomainDetail')
  339. ->method('POST')
  340. ->host('live.aliyuncs.com')
  341. ->options([
  342. 'query' => [
  343. 'RegionId' => $regionId,
  344. 'DomainName' => $domainName,
  345. ],
  346. ])
  347. ->request();
  348. return $result->toArray();
  349. } catch (ClientException $e) {
  350. return $e->getErrorMessage() . PHP_EOL;
  351. } catch (ServerException $e) {
  352. return $e->getErrorMessage() . PHP_EOL;
  353. }
  354. }
  355. /**域名停用
  356. * @param string $domainName
  357. * @param string $regionId
  358. */
  359. public static function stopLiveDomains($domainName = '', $regionId = '')
  360. {
  361. self::init();
  362. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  363. ->regionId($regionId)
  364. ->asDefaultClient();
  365. try {
  366. $result = AlibabaCloud::rpc()
  367. ->product('live')
  368. ->version('2016-11-01')
  369. ->action('StopLiveDomain')
  370. ->method('POST')
  371. ->host('live.aliyuncs.com')
  372. ->options([
  373. 'query' => [
  374. 'RegionId' => $regionId,
  375. 'DomainName' => $domainName,
  376. ],
  377. ])
  378. ->request();
  379. return $result->toArray();
  380. } catch (ClientException $e) {
  381. return $e->getErrorMessage() . PHP_EOL;
  382. } catch (ServerException $e) {
  383. return $e->getErrorMessage() . PHP_EOL;
  384. }
  385. }
  386. /**域名启用
  387. * @param string $domainName
  388. * @param string $regionId
  389. */
  390. public static function startLiveDomains($domainName = '', $regionId = '')
  391. {
  392. self::init();
  393. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  394. ->regionId($regionId)
  395. ->asDefaultClient();
  396. try {
  397. $result = AlibabaCloud::rpc()
  398. ->product('live')
  399. ->version('2016-11-01')
  400. ->action('StartLiveDomain')
  401. ->method('POST')
  402. ->host('live.aliyuncs.com')
  403. ->options([
  404. 'query' => [
  405. 'RegionId' => $regionId,
  406. 'DomainName' => $domainName,
  407. ],
  408. ])
  409. ->request();
  410. return $result->toArray();
  411. } catch (ClientException $e) {
  412. return $e->getErrorMessage() . PHP_EOL;
  413. } catch (ServerException $e) {
  414. return $e->getErrorMessage() . PHP_EOL;
  415. }
  416. }
  417. /**添加直播域名播流域名和推流域名的映射关系配置
  418. * @param string $PullDomain 播流域名
  419. * @param string $PushDomain 推流域名
  420. * @param string $regionId
  421. */
  422. public static function addLiveDomainMappings($PullDomain = '', $PushDomain = '', $regionId = '')
  423. {
  424. self::init();
  425. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  426. ->regionId($regionId)
  427. ->asDefaultClient();
  428. try {
  429. $result = AlibabaCloud::rpc()
  430. ->product('live')
  431. ->version('2016-11-01')
  432. ->action('AddLiveDomainMapping')
  433. ->method('POST')
  434. ->host('live.aliyuncs.com')
  435. ->options([
  436. 'query' => [
  437. 'RegionId' => $regionId,
  438. 'PullDomain' => $PullDomain,
  439. 'PushDomain' => $PushDomain,
  440. ],
  441. ])
  442. ->request();
  443. return $result->toArray();
  444. } catch (ClientException $e) {
  445. return $e->getErrorMessage() . PHP_EOL;
  446. } catch (ServerException $e) {
  447. return $e->getErrorMessage() . PHP_EOL;
  448. }
  449. }
  450. /**删除直播域名播流域名和推流域名的映射关系配置
  451. * @param string $PullDomain 播流域名
  452. * @param string $PushDomain 推流域名
  453. * @param string $regionId
  454. */
  455. public static function deleteLiveDomainMappings($PullDomain = '', $PushDomain = '', $regionId = '')
  456. {
  457. self::init();
  458. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  459. ->regionId($regionId)
  460. ->asDefaultClient();
  461. try {
  462. $result = AlibabaCloud::rpc()
  463. ->product('live')
  464. ->version('2016-11-01')
  465. ->action('DeleteLiveDomainMapping')
  466. ->method('POST')
  467. ->host('live.aliyuncs.com')
  468. ->options([
  469. 'query' => [
  470. 'RegionId' => $regionId,
  471. 'PullDomain' => $PullDomain,
  472. 'PushDomain' => $PushDomain,
  473. ],
  474. ])
  475. ->request();
  476. return $result->toArray();
  477. } catch (ClientException $e) {
  478. return $e->getErrorMessage() . PHP_EOL;
  479. } catch (ServerException $e) {
  480. return $e->getErrorMessage() . PHP_EOL;
  481. }
  482. }
  483. /**设置推流回调配置
  484. * @param string $domainName
  485. * @param string $regionId
  486. * @param string $NotifyUrl
  487. */
  488. public static function setLiveStreamsNotifyUrlConfigs($domainName = '', $regionId = '')
  489. {
  490. self::init();
  491. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  492. ->regionId($regionId)
  493. ->asDefaultClient();
  494. $site_url = SystemConfigService::get('site_url');
  495. try {
  496. $result = AlibabaCloud::rpc()
  497. ->product('live')
  498. ->version('2016-11-01')
  499. ->action('SetLiveStreamsNotifyUrlConfig')
  500. ->method('POST')
  501. ->host('live.aliyuncs.com')
  502. ->options([
  503. 'query' => [
  504. 'RegionId' => $regionId,
  505. 'DomainName' => $domainName,
  506. 'NotifyUrl' => $site_url . '/live/index/serve',
  507. ],
  508. ])
  509. ->request();
  510. return $result->toArray();
  511. } catch (ClientException $e) {
  512. return $e->getErrorMessage() . PHP_EOL;
  513. } catch (ServerException $e) {
  514. return $e->getErrorMessage() . PHP_EOL;
  515. }
  516. }
  517. /**查看推流回调配置
  518. * @param string $domainName
  519. * @param string $regionId
  520. * @param string $NotifyUrl
  521. */
  522. public static function describeLiveStreamsNotifyUrlConfig($domainName = '', $regionId = '')
  523. {
  524. self::init();
  525. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  526. ->regionId($regionId)
  527. ->asDefaultClient();
  528. try {
  529. $result = AlibabaCloud::rpc()
  530. ->product('live')
  531. ->version('2016-11-01')
  532. ->action('DescribeLiveStreamsNotifyUrlConfig')
  533. ->method('POST')
  534. ->host('live.aliyuncs.com')
  535. ->options([
  536. 'query' => [
  537. 'RegionId' => $regionId,
  538. 'DomainName' => $domainName,
  539. ],
  540. ])
  541. ->request();
  542. return $result->toArray();
  543. } catch (ClientException $e) {
  544. return $e->getErrorMessage() . PHP_EOL;
  545. } catch (ServerException $e) {
  546. return $e->getErrorMessage() . PHP_EOL;
  547. }
  548. }
  549. /**删除推流回调配置
  550. * @param string $domainName
  551. * @param string $regionId
  552. */
  553. public static function deleteLiveStreamsNotifyUrlConfigs($domainName = '', $regionId = '')
  554. {
  555. self::init();
  556. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  557. ->regionId($regionId)
  558. ->asDefaultClient();
  559. try {
  560. $result = AlibabaCloud::rpc()
  561. ->product('live')
  562. ->version('2016-11-01')
  563. ->action('DeleteLiveStreamsNotifyUrlConfig')
  564. ->method('POST')
  565. ->host('live.aliyuncs.com')
  566. ->options([
  567. 'query' => [
  568. 'RegionId' => $regionId,
  569. 'DomainName' => $domainName,
  570. ],
  571. ])
  572. ->request();
  573. return $result->toArray();
  574. } catch (ClientException $e) {
  575. return $e->getErrorMessage() . PHP_EOL;
  576. } catch (ServerException $e) {
  577. return $e->getErrorMessage() . PHP_EOL;
  578. }
  579. }
  580. /**调用AddLiveAppRecordConfig配置APP录制,输出内容保存到OSS中
  581. * @param string $domainName
  582. * @param string $regionId
  583. * @param string $StreamName
  584. * @param string $AppName
  585. * @param string $OssBucket
  586. * @param string $OssEndpoint
  587. * @param string $format 视频格式
  588. * @param string $duration 录制时长
  589. */
  590. public static function addLiveAppRecordConfigs($domainName = '', $regionId = '', $AppName = '', $StreamName = '', $OssBucket = '', $OssEndpoint = '', $format = '', $duration = '')
  591. {
  592. self::init();
  593. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  594. ->regionId($regionId)
  595. ->asDefaultClient();
  596. if ($format == 'm3u8') {
  597. $query = [
  598. 'RegionId' => $regionId,
  599. 'StreamName' => $StreamName,
  600. 'AppName' => $AppName,
  601. 'DomainName' => $domainName,
  602. 'OssBucket' => $OssBucket,
  603. 'OssEndpoint' => $OssEndpoint,
  604. 'RecordFormat.1.Format' => "m3u8",
  605. 'RecordFormat.1.OssObjectPrefix' => "record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}",
  606. 'RecordFormat.1.SliceOssObjectPrefix' => "record/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}",
  607. 'RecordFormat.1.CycleDuration' => bcmul($duration, 60, 0),
  608. ];
  609. } else if ($format == 'mp4') {
  610. $query = [
  611. 'RegionId' => $regionId,
  612. 'StreamName' => $StreamName,
  613. 'AppName' => $AppName,
  614. 'DomainName' => $domainName,
  615. 'OssBucket' => $OssBucket,
  616. 'OssEndpoint' => $OssEndpoint,
  617. 'RecordFormat.1.Format' => "mp4",
  618. 'RecordFormat.1.OssObjectPrefix' => "record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}",
  619. 'RecordFormat.1.CycleDuration' => bcmul($duration, 60, 0),
  620. ];
  621. } else {
  622. $query = [
  623. 'RegionId' => $regionId,
  624. 'StreamName' => $StreamName,
  625. 'AppName' => $AppName,
  626. 'DomainName' => $domainName,
  627. 'OssBucket' => $OssBucket,
  628. 'OssEndpoint' => $OssEndpoint,
  629. 'RecordFormat.1.Format' => "flv",
  630. 'RecordFormat.1.OssObjectPrefix' => "record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}",
  631. 'RecordFormat.1.CycleDuration' => bcmul($duration, 60, 0),
  632. ];
  633. }
  634. try {
  635. $result = AlibabaCloud::rpc()
  636. ->product('live')
  637. ->version('2016-11-01')
  638. ->action('AddLiveAppRecordConfig')
  639. ->method('POST')
  640. ->host('live.aliyuncs.com')
  641. ->options([
  642. 'query' => $query,
  643. ])
  644. ->request();
  645. return $result->toArray();
  646. } catch (ClientException $e) {
  647. return $e->getErrorMessage() . PHP_EOL;
  648. } catch (ServerException $e) {
  649. return $e->getErrorMessage() . PHP_EOL;
  650. }
  651. }
  652. /**解除录制配置
  653. * @param string $domainName
  654. * @param string $regionId
  655. * @param string $AppName
  656. * @param string $StreamName
  657. */
  658. public static function deleteLiveAppRecordConfigs($domainName = '', $regionId = '', $AppName = '', $StreamName = '')
  659. {
  660. self::init();
  661. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  662. ->regionId($regionId)
  663. ->asDefaultClient();
  664. try {
  665. $result = AlibabaCloud::rpc()
  666. ->product('live')
  667. ->version('2016-11-01')
  668. ->action('DeleteLiveAppRecordConfig')
  669. ->method('POST')
  670. ->host('live.aliyuncs.com')
  671. ->options([
  672. 'query' => [
  673. 'RegionId' => $regionId,
  674. 'AppName' => $AppName,
  675. 'DomainName' => $domainName,
  676. 'StreamName' => $StreamName,
  677. ],
  678. ])
  679. ->request();
  680. return $result->toArray();
  681. } catch (ClientException $e) {
  682. return $e->getErrorMessage() . PHP_EOL;
  683. } catch (ServerException $e) {
  684. return $e->getErrorMessage() . PHP_EOL;
  685. }
  686. }
  687. /**配置域名
  688. * @param string $domainName
  689. * @param string $regionId
  690. */
  691. public static function batchSetLiveDomainConfigs($domainName = '', $regionId = '')
  692. {
  693. self::init();
  694. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  695. ->regionId($regionId)
  696. ->asDefaultClient();
  697. $site_url = SystemConfigService::get('site_url');
  698. $url = parse_url($site_url)['host'];
  699. try {
  700. $result = AlibabaCloud::rpc()
  701. ->product('live')
  702. ->version('2016-11-01')
  703. ->action('BatchSetLiveDomainConfigs')
  704. ->method('POST')
  705. ->host('live.aliyuncs.com')
  706. ->options([
  707. 'query' => [
  708. 'RegionId' => $regionId,
  709. 'DomainNames' => $domainName,
  710. 'Functions' => "[{'functionArgs':[{'argName':'key','argValue':'Access-Control-Allow-Origin'},{'argName':'value','argValue':'*'}],'functionName':'set_resp_header'},
  711. {'functionArgs':[{'argName':'refer_domain_allow_list','argValue':'$url'},{'argName':'allow_empty','argValue':'on'}],'functionName':'referer_white_list_set'}
  712. ]",
  713. ],
  714. ])
  715. ->request();
  716. return $result->toArray();
  717. } catch (ClientException $e) {
  718. return $e->getErrorMessage() . PHP_EOL;
  719. } catch (ServerException $e) {
  720. return $e->getErrorMessage() . PHP_EOL;
  721. }
  722. }
  723. /**查询直播域名配置key
  724. * @param string $domainName
  725. * @param string $regionId
  726. */
  727. public static function describeLiveDomainConfigs($domainName = '', $regionId = '')
  728. {
  729. self::init();
  730. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  731. ->regionId($regionId)
  732. ->asDefaultClient();
  733. try {
  734. $result = AlibabaCloud::rpc()
  735. ->product('live')
  736. ->version('2016-11-01')
  737. ->action('DescribeLiveDomainConfigs')
  738. ->method('POST')
  739. ->host('live.aliyuncs.com')
  740. ->options([
  741. 'query' => [
  742. 'RegionId' => $regionId,
  743. 'DomainName' => $domainName,
  744. 'FunctionNames' => 'aliauth'
  745. ],
  746. ])
  747. ->request();
  748. return $result->toArray();
  749. } catch (ClientException $e) {
  750. return $e->getErrorMessage() . PHP_EOL;
  751. } catch (ServerException $e) {
  752. return $e->getErrorMessage() . PHP_EOL;
  753. }
  754. }
  755. }