初始化项目:添加后端代码、ThinkPHP框架、前端资源
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
|
||||
namespace app\common\library\live;
|
||||
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
|
||||
use AlibabaCloud\SDK\Live\V20161101\Models\AddLiveAppRecordConfigRequest\transcodeRecordFormat;
|
||||
use AlibabaCloud\SDK\Live\V20161101\Models\AddLiveAppRecordConfigRequest\recordFormat;
|
||||
use AlibabaCloud\SDK\Live\V20161101\Models\AddLiveAppRecordConfigRequest;
|
||||
|
||||
|
||||
use AlibabaCloud\SDK\Live\V20161101\Models\AddLiveRecordVodConfigRequest;
|
||||
|
||||
|
||||
use AlibabaCloud\SDK\Live\V20161101\Models\DeleteLiveAppRecordConfigRequest;
|
||||
|
||||
use AlibabaCloud\Client\AlibabaCloud;
|
||||
use AlibabaCloud\Live\Live;
|
||||
/**
|
||||
* 直播录制
|
||||
*/
|
||||
class Record
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @param $appName 视频的应用名称
|
||||
* @param $streamName 存储至OSS支持流级别的录制
|
||||
* @param $cycleDuration 录制周期 录制周期范围为15分钟~360分钟,最大支持6小时录制 单位s
|
||||
* @return bool|string
|
||||
*/
|
||||
public static function createRecordConfig($appName,$streamName,$cycleDuration = 60 * 15,$roomConfig=[])
|
||||
{
|
||||
|
||||
$minRecordTime = (60 * 15);
|
||||
$maxRecordTime = (60 * 60 * 6);
|
||||
|
||||
$cycleDuration = $cycleDuration < $minRecordTime ? $minRecordTime : ($cycleDuration > $maxRecordTime ? $maxRecordTime : $cycleDuration);
|
||||
$aliLiveConfig = \app\common\model\config\System::getConfig('ali_live');
|
||||
$liveConfig = \app\common\model\app\Config::getConfig('live');
|
||||
|
||||
if($roomConfig){
|
||||
$liveConfig = array_merge($liveConfig,$roomConfig);
|
||||
}
|
||||
|
||||
if(isset($liveConfig['play_back_save_type']) && $liveConfig['play_back_save_type'] == 'oss'){
|
||||
$ossConfig = \app\common\model\config\System::getConfig('alioss');
|
||||
if(!$ossConfig || $ossConfig['status'] != 'open'){
|
||||
return false;
|
||||
}
|
||||
|
||||
try{
|
||||
$client = \app\common\library\live\AliLiveClient::createClient();
|
||||
//源流配置
|
||||
$recordFormat0 = new recordFormat([
|
||||
// String, 可选, OSS存储的录制文件名。 - 文件名小于256字节,支持变量匹配,包含 {AppName}、{StreamName}、{Sequence}、{StartTime}、{EndTime}、{EscapedStartTime}、{EscapedEndTime}。 - 参数值必须要有{StartTime}或{EscapedStartTime}和{EndTime}或{EscapedEndTime}。
|
||||
"ossObjectPrefix" => "record/{AppName}/{StreamName}/{Sequence}{EscapedStartTime}{EscapedEndTime}",
|
||||
// String, 可选, 格式。目前支持M3U8、FLV、MP4。取值: ><notice>RecordFormat和TranscodeRecordFormat两者至少需要设置一个。 ></notice> - m3u8。如果选择m3u8格式,必须同时设置请求参数RecordFormat.N.SliceOssObjectPrefix和RecordFormat.N.SliceDuration。 - flv。 - mp4。
|
||||
"format" => "mp4",
|
||||
"cycleDuration"=>$cycleDuration
|
||||
]);
|
||||
$addLiveAppRecordConfigRequest = new AddLiveAppRecordConfigRequest([
|
||||
"domainName" => $aliLiveConfig['play_domain'],
|
||||
"appName" => $appName,
|
||||
"ossEndpoint" => $ossConfig['endpoint'],
|
||||
"streamName" => $streamName,
|
||||
"ossBucket" => $ossConfig['bucket'],
|
||||
// Array, 可选
|
||||
"recordFormat" => [
|
||||
$recordFormat0
|
||||
],
|
||||
]);
|
||||
|
||||
$runtime = new RuntimeOptions([]);
|
||||
$client->addLiveAppRecordConfigWithOptions($addLiveAppRecordConfigRequest, $runtime);
|
||||
return true;
|
||||
}catch (\Exception $e){
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($liveConfig['play_back_save_type']) && $liveConfig['play_back_save_type'] == 'vod'){
|
||||
|
||||
$vodConfig = \app\common\model\config\System::getConfig('alivod');
|
||||
if(!$vodConfig || $vodConfig['status'] != 'open'){
|
||||
return false;
|
||||
}
|
||||
try{
|
||||
AlibabaCloud::accessKeyClient($aliLiveConfig['access_key_id'], $aliLiveConfig['access_key_secret'])
|
||||
->regionId($vodConfig['region_id'])
|
||||
->asDefaultClient()
|
||||
->options([]);
|
||||
$request = Live::v20161101()->addLiveRecordVodConfig();
|
||||
|
||||
$request
|
||||
->withAppName($appName)
|
||||
->withVodTranscodeGroupId($vodConfig['template_group_id'])
|
||||
->withDomainName($aliLiveConfig['play_domain'])
|
||||
->withStreamName($streamName)
|
||||
->request();
|
||||
return true;
|
||||
}catch (\Exception $e){
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 解除直播录制配置
|
||||
* @return void
|
||||
*/
|
||||
public static function delRecordConfig($appName,$streamName = '',$roomConfig=[]){
|
||||
|
||||
$aliLiveConfig = \app\common\model\config\System::getConfig('ali_live');
|
||||
|
||||
$liveConfig = \app\common\model\app\Config::getConfig('live');
|
||||
|
||||
if($roomConfig){
|
||||
$liveConfig = array_merge($liveConfig,$roomConfig);
|
||||
}
|
||||
|
||||
if(isset($liveConfig['play_back_save_type']) && $liveConfig['play_back_save_type'] == 'oss'){
|
||||
|
||||
try {
|
||||
|
||||
$client = \app\common\library\live\AliLiveClient::createClient();
|
||||
|
||||
$params = [
|
||||
"domainName" => $aliLiveConfig['play_domain'],
|
||||
"appName" => $appName
|
||||
];
|
||||
|
||||
if($streamName){
|
||||
$params['streamName'] = $streamName;
|
||||
}
|
||||
|
||||
$deleteLiveAppRecordConfigRequest = new DeleteLiveAppRecordConfigRequest($params);
|
||||
|
||||
$runtime = new RuntimeOptions([]);
|
||||
// 复制代码运行请自行打印 API 的返回值
|
||||
$client->deleteLiveAppRecordConfigWithOptions($deleteLiveAppRecordConfigRequest, $runtime);
|
||||
|
||||
return true;
|
||||
}catch (\Exception $error) {
|
||||
return $error->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($liveConfig['play_back_save_type']) && $liveConfig['play_back_save_type'] == 'vod'){
|
||||
$vodConfig = \app\common\model\config\System::getConfig('alivod');
|
||||
|
||||
if(!$vodConfig || $vodConfig['status'] != 'open'){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
AlibabaCloud::accessKeyClient($aliLiveConfig['access_key_id'], $aliLiveConfig['access_key_secret'])
|
||||
->regionId($vodConfig['region_id'])
|
||||
->asDefaultClient()
|
||||
->options([]);
|
||||
$request = Live::v20161101()->deleteLiveRecordVodConfig();
|
||||
$request
|
||||
->withAppName($appName)
|
||||
->withDomainName($aliLiveConfig['play_domain'])
|
||||
->withStreamName($streamName)
|
||||
->request();
|
||||
}catch (\Exception $error) {
|
||||
return $error->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user