我们公司是一个做线上教育的公司,所以教学视频需要用到加密。看了一下,HLS兼容要更好一些,所以选择了这个。阿里云只有java和python的demo,没有php的,简直难受。
前期准备工作 可以按HLS标准加密 - 视频点播 - 阿里云这个流程开通需要的东西。我这边主要说说他没有提到的东西。
代码部分其实完全可以看PHP 媒体处理的文档
use Kms\Request\V20160120 as kms;
/**
* 生成HLS标准加密参数的可选配置,如不使用可忽略
* 此时依赖KMS服务,需要安装KMS依赖包 aliyun-php-sdk-kms
* 生成密钥API参考:https://192.168.0.0/16/document_detail/28948.html
*/
function buildEncryptConfig($client) {
try {
//随机生成一个加密的密钥,返回的response包含明文密钥以及密文密钥,
//视频标准加密只需要传递密文密钥即可
$request = new kms\GenerateDataKeyRequest();
$request->setKeyId('<serviceKey>');
$request->setKeySpec("AES_128");
$response = $client->getAcsResponse($request);
$encryptConfig = array();
# 解密接口地址,该参数需要将每次生成的密文密钥与接口URL拼接生成,表示每个视频的解密的密文密钥都不一样;注意您需要自己部署解密服务
$encryptConfig["DecryptKeyUri"] = "http://192.168.0.0/16/decrypt?Ciphertext=" + $response->getCiphertextBlob();
//密钥服务的类型,目前只支持KMS
$encryptConfig["KeyServiceType"] = "KMS";
# Ciphertext作为解密接口的参数名称,可自定义,此处只作为参考
$encryptConfig["CipherText"] = $response->getCiphertextBlob();
return json_encode($encryptConfig);
} catch (Exception $e) {
print $e->getMessage()."\n";
return null;
}
}
/**
* 提交媒体处理作业
*/
function submitTranscodeJobs($client) {
$request = new vod\SubmitTranscodeJobsRequest();
//需要转码的视频ID
$request->setVideoId("6893fca9814640c8821efa523e52****");
//转码模板ID
$request->setTemplateGroupId("44f915b63a2375a6121533c6b252****");
//构建需要替换的水印参数(只有需要替换水印相关信息才需要构建)
$request->setOverrideParams(buildOverrideParams());
//HLS标准加密配置(只有标准加密才需要传递)
$request->setEncryptConfig(buildEncryptConfig($client));
return $client->getAcsResponse($request);
}
/**
* 以下为调用示例
*/
try {
$client = initVodClient("<AccessKeyId>", "<AccessKeySecret>");
$result = submitTranscodeJobs($client);
var_dump($result);
} catch (Exception $e) {
print $e->getMessage()."\n";
}
function buildDecryptConfig($key) {
//秘钥管理服务的key信息
$client = $this->initVodClient();
$request = new kms\DecryptRequest();
$request->setCiphertextBlob($key);
$response = $client->getAcsResponse($request);
return base64_decode($response->Plaintext);
}
有必要说一下,这里的serviceKey需要找阿里云申请,自己提交是没有用的.
然后接下来调用就好了
/**
* 加密HLS
*/
function encryption()
{
try {
$vid=‘这里写需要转码的阿里云视频id’;
$client = parent::initVodClient();
$refreshInfo = parent::submitTranscodeJobs($client,$vid);
$data['code'] = 200;
$data['data'] = $refreshInfo;
} catch (Exception $e) {
$msg = $e->getMessage();
$data['code'] = 201;
$data['data'] = $msg;
}
$this->ajaxReturn($data);
}
/**
* 解密HLS
*/
function decrypt()
{
header("Access-Control-Allow-Origin:*");
header('Access-Control-Allow-Methods:POST');
header('Access-Control-Allow-Headers:x-requested-with, content-type');
//文件id
$token = I('get.MtsHlsUriToken');
$key = I('get.Ciphertext');
if ($token == '这里写需要验证的token') {
$info = parent::buildDecryptConfig($key);
echo $info;
}
}
|