顺手写的
GitHub
用于阿里云VOD回调的云函数,可在腾讯云函数进行集成响应部署
目前仍在开发中……
我知道阿里云视频点播的回调放在腾讯云云函数很生草,但是我真的不会搞阿里云ServerLess那个API网关
欢迎好心人做阿里云ServerLess适配,我会去点个Star的!
目前bug
不论如何腾讯云云函数都会返回403,我实在不知道咋搞那个傻逼集成响应,求大佬PR!
Wikis
腾讯云云函数 API网关设置
- 请求方法:POST 或 ANY
更推荐POST,因为限定了更安全
- 发布环境:发布
这个不多解释
- 鉴权方式:免鉴权
阿里云不会适配腾讯云SCF的鉴权规则的
- 集成响应:启用
请务必启用!
- 启用Base64编码:未启用
- 异步响应:启用
建议启用,异步没坏处
代码配置
不动的话请不要碰functions.php
和index.php
!
请前往src/config.php
修改相关配置信息
Server酱SendKey请前往 https://sct.ftqq.com/sendkey 获取
阿里云配置
回调请前往 https://vod.console.aliyun.com/#/settings/callback 设置
主体代码
function main_handler($event, $context) {
$body = $event->body;
$body = json_decode($body,1);
$Ali_EventType = $body['EventType'];
$Ali_EventTime = $body['EventTime'];
$title = "";
$describe = "";
if(isset($Ali_EventType)){
echo '检索到$Ali_EventType的值为'.$Ali_EventType."\n";
}
switch($Ali_EventType) {
case "FileUploadComplete":
$title = "[Aliyun视频点播]视频上传完成";
$describe = "# 详细信息\n- 完成时间: ".str_replace(array('T','Z'),' ',$Ali_EventTime)."\n- 视频ID: ".$body['VideoId']."\n- 视频大小: ".getFileSize($body['Size']);
break;
case "TranscodeComplete":
$title = "[Aliyun视频点播]视频转码完成";
$describe = "# 详细信息\n";
$describe .= "视频ID: ".$body['VideoId']."\n\n---\n";
foreach($body['StreamInfos'] as $k) {
$describe .= "### 转码ID: ".$k['JobId']."\n";
$describe .= "- 转码时间:".((float)$k['Duration']/3600)."小时\n";
$describe .= "- 画质: ".AliDuration[$k['Definition']]."\n";
$describe .= "\n转码".($k['Status']=="success"?"成功":"失败")."\n";
if($k['Status']!="success") {
$describe .= "- 错误码: ".$k['ErrorCode']."\n";
$describe .= "- 错误信息: ".$k['ErrorMessage']."\n";
}
$describe .= "\n---\n";
}
break;
case "StreamTranscodeComplete":
$title = "[Aliyun视频点播]单一清晰度视频转码完成";
$describe = "# 详细信息\n";
$describe .= "视频ID: ".$body['VideoId']." \n";
$describe .= "转码ID: ".$body['JobId']." \n";
$describe .= "- 转码时间:".((float)$body['Duration']/3600)."小时 \n";
$describe .= "- 画质: ".AliDuration[$body['Definition']]." \n";
$describe .= "\n转码".($body['Status']=="success"?"成功":"失败")." \n";
if($body['Status']!="success") {
$describe .= "- 错误码: ".$body['ErrorCode']." \n";
$describe .= "- 错误信息: ".$body['ErrorMessage']." \n";
}
break;
}
$request = json_decode(sct_send($title,$describe));
if($request->data->error !== "SUCCESS"){
return [
'isBase64Encoded' => false,
'statusCode' => 400,
'headers' => [
"content-type" => "application/json",
"access-control-allow-origin" => "*"
],
'body' => [
"state" => "Error",
"code" => $request->code,
"message" => $request->message
]
];
} else {
return [
'isBase64Encoded' => false,
'statusCode' => 200,
'headers' => [
"content-type" => "application/json",
"access-control-allow-origin" => "*"
],
'body' => $request
];
}
}