188 lines
6.1 KiB
PHP
188 lines
6.1 KiB
PHP
|
<?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);
|
|||
|
}
|
|||
|
|
|||
|
}
|