WokerTask/app/api/controller/ZhiboController.php

188 lines
6.1 KiB
PHP
Raw Normal View History

2023-12-27 14:06:33 +08:00
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\api\controller;
use think\facade\Db;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Exception\GuzzleException;
use Guzzle\Http\Exception\RequestException;
use Darabonba\OpenApi\OpenApiClient;
use AlibabaCloud\OpenApiUtil\OpenApiUtilClient;
use Darabonba\OpenApi\Models\Config;
use Darabonba\OpenApi\Models\Params;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\OpenApiRequest;
/**
* 阿里云直播
* Class ZhiboController
*/
class ZhiboController extends BaseApiController
{
public array $notNeedLogin = ['createPushUrl', 'getPullUrl', 'forbidLiveStream', 'resumeLiveStream', 'test'];
private $access_key_id = 'LTAI5t7mhH3ij2cNWs1zhPmv';
private $access_key_secret = 'gqo2wMpvi8h5bDBmCpMje6BaiXvcPu';
// 推流host
private $push_host = 'rtmp://push-live.lihaink.cn';
// 拉流host
private $pull_host = 'rtmp://live.lihaink.cn';
// URL推流鉴权key
private $push_auth_key = '5WRlJV0QxK731AJe';
// URL拉流鉴权key
private $pull_auth_key = '59YEMIXP9260MZBe';
public function createPushUrl()
{
$uri = $this->push_host . '/app/ceshi';
$key = $this->push_auth_key;
$exp = time() + 3600;
$authurl = $this->authKey($uri, $key, $exp);
return $this->data(['push_url'=>$authurl]);
}
public function getPullUrl()
{
$uri = $this->pull_host . '/app/ceshi';
$key = $this->pull_auth_key;
$exp = time() + 3600;
$authurl = $this->authKey($uri, $key, $exp);
return $this->data(['push_url'=>$authurl]);
}
private function authKey($uri, $key, $exp)
{
preg_match("/^(rtmp:\/\/)?([^\/?]+)?(\/[^?]*)?(\\?.*)?$/", $uri, $matches);
$scheme = $matches[1] ?? '';
$host = $matches[2] ?? '';
$path = $matches[3] ?? '';
if (empty($scheme)) {
$scheme ="rtmp://";
}
if (empty($path)) {
$path ="/";
}
$uid = $rand = "0";
$string = sprintf("%s-%u-%s-%s-%s", $path, $exp, $rand, $uid, $key);
$hashvalue = md5($string);
$auth_key = sprintf("%u-%s-%s-%s", $exp, $rand, $uid, $hashvalue);
return sprintf("%s%s%s?auth_key=%s", $scheme, $host, $path, $auth_key);
}
public function forbidLiveStream()
{
$config = new Config([
"accessKeyId" => $this->access_key_id,
"accessKeySecret" => $this->access_key_secret
]);
$config->endpoint = "live.aliyuncs.com";
$client = new OpenApiClient($config);
$params = new Params([
"action" => "ForbidLiveStream",
"version" => "2016-11-01",
"protocol" => "HTTP",
"method" => "POST",
"authType" => "AK",
"style" => "RPC",
"pathname" => "/",
"reqBodyType" => "json",
"bodyType" => "json"
]);
$queries = [];
$queries["DomainName"] = "push-live.lihaink.cn";
$queries["AppName"] = "app";
$queries["StreamName"] = "ceshi";
$queries["LiveStreamType"] = "publisher";
$runtime = new RuntimeOptions([]);
$request = new OpenApiRequest([
"query" => OpenApiUtilClient::query($queries)
]);
$res = $client->callApi($params, $request, $runtime);
halt($res);
}
public function resumeLiveStream()
{
$config = new Config([
"accessKeyId" => $this->access_key_id,
"accessKeySecret" => $this->access_key_secret
]);
$config->endpoint = "live.aliyuncs.com";
$client = new OpenApiClient($config);
$params = new Params([
"action" => "ResumeLiveStream",
"version" => "2016-11-01",
"protocol" => "HTTP",
"method" => "POST",
"authType" => "AK",
"style" => "RPC",
"pathname" => "/",
"reqBodyType" => "json",
"bodyType" => "json"
]);
$queries = [];
$queries["DomainName"] = "push-live.lihaink.cn";
$queries["LiveStreamType"] = "publisher";
$queries["AppName"] = "app";
$queries["StreamName"] = "ceshi";
$runtime = new RuntimeOptions([]);
$request = new OpenApiRequest([
"query" => OpenApiUtilClient::query($queries)
]);
$res = $client->callApi($params, $request, $runtime);
halt($res);
}
public function test() {
$config = new Config([
"accessKeyId" => $this->access_key_id,
"accessKeySecret" => $this->access_key_secret
]);
$config->endpoint = "live.aliyuncs.com";
$client = new OpenApiClient($config);
$params = new Params([
"action" => "DescribeLiveStreamsOnlineList",
"version" => "2016-11-01",
"protocol" => "HTTP",
"method" => "POST",
"authType" => "AK",
"style" => "RPC",
"pathname" => "/",
"reqBodyType" => "json",
"bodyType" => "json"
]);
$queries = [];
$queries["DomainName"] = "live.lihaink.cn";
$runtime = new RuntimeOptions([]);
$request = new OpenApiRequest([
"query" => OpenApiUtilClient::query($queries)
]);
$res = $client->callApi($params, $request, $runtime);
halt($res);
}
}