getvod.php_php腾讯云点播视频加密

php腾讯云点播视频加密,ProcessFile(案例为laravel)

路由:

//视频详情

Route::get('video/info/{id}','Api\ProcessFileController@getVideoInfo');

//视频加密接口

Route::get('encrypt/{id}','Api\ProcessFileController@encryptVideo');

//视频播放获取秘钥

Route::get('keyurl','Api\ProcessFileController@getVideoKey');

//视频加密回调

Route::any('back','Api\ProcessFileController@backSend');

//视频解密

Route::get('drm','Api\ProcessFileController@getVideoDrm');

类:<?php

/**

* Created by PhpStorm.

* User: Shu_Q_Gang

* Date: 2019/3/25

* Time: 17:11

*/

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;

use App\Http\Model\Resources;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Log;

class ProcessFileController extends Controller

{

private $txUrl = 'https://vod.api.qcloud.com/v2/index.php?';

private $SecretId = '腾讯secretId';

private $SecretKey = '腾讯secretKey';

private $signStr = 'GETvod.api.qcloud.com/v2/index.php?';

/**

* 视频详细信息

*/

public function getVideoInfo($fileId)

{

$data['Action'] = 'GetVideoInfo';

$data['fileId'] = (string)$fileId; //视频媒体id

$data['Nonce'] = rand(1000,9999);

$data['SecretId'] = $this->SecretId;

$data['Timestamp'] = time();

//签名

$data['Signature'] = $this->sign($data);

$str = '';

foreach ($data as $k=>$row){

$str.=$k.'='.urlencode($row).'&';

}

$str = substr($str, 0, -1);

$url = $this->txUrl.$str;

$arrContextOptions = array(

"ssl" => array(

"verify_peer" => false,

"verify_peer_name" => false,

),

);

$result = file_get_contents($url,false, stream_context_create($arrContextOptions));

dd(json_decode($result));

}

/**

* 视频加密

*/

public function encryptVideo($fileId)

{

$data['Action'] = 'ProcessFile';

$data['fileId'] = (string)$fileId; //视频媒体id

$data['Nonce'] = rand(1000000,9999999);

$data['SecretId'] = $this->SecretId;

$data['Timestamp'] = (int)time();

//加密模板210流畅 220 标清 230 高清 240 全高清

$data['transcode.definition.0'] = 210;

$data['transcode.definition.1'] = 220;

//$data['transcode.definition.3'] = 230;

//$data['transcode.definition.4'] = 240;

$data['notifyMode'] = 'Finish';

$data['transcode.drm.definition'] = 10;

//签名

$data['Signature'] = $this->sign($data);

$str = '';

foreach ($data as $k=>$row){

$str.=$k.'='.urlencode($row).'&';

}

$str = substr($str, 0, -1);

$url = $this->txUrl.$str;

$arrContextOptions = array(

"ssl" => array(

"verify_peer" => false,

"verify_peer_name" => false,

),

);

$result = file_get_contents($url,false, stream_context_create($arrContextOptions));

$resObj = json_decode($result);

if($resObj->code == 0){

//加密成功

$obj = Resources::where('file_id',$fileId)->first();

if($obj){

$obj->process = '是';

$obj->save();

}

}

Log::info("加密回调:".$result);

}

/**

* 视频解密获取dk

*/

public function getVideoDrm($edkList)

{

//Log::info('解密edk:'.$edkList);

$data['Action'] = 'DescribeDrmDataKey';

$data['edkList.n'] = (string)$edkList;

$data['Nonce'] = rand(1000,9999);

$data['Timestamp'] = time();

$data['SecretId'] = $this->SecretId;

//签名

$data['Signature'] = $this->sign($data);

$str = '';

foreach ($data as $k=>$row){

$str.=$k.'='.urlencode($row).'&';

}

$str = substr($str, 0, -1);

$url = $this->txUrl.$str;

$arrContextOptions = array(

"ssl" => array(

"verify_peer"=>false,

"verify_peer_name"=>false,

),

);

$result = file_get_contents($url,false, stream_context_create($arrContextOptions));

$data = json_decode($result);

if($data->code == 0){

$dk = (($data->data)->keyList)[0];

$dkstr = $dk->dk;

return $dkstr;

}else{

return '';

}

}

/**

* @param $param

* @return string

* 签名

*/

public function sign($param)

{

// 参数排序

ksort($param);

// 生成待签名字符串

$signStr = $this->signStr;

foreach ( $param as $key => $value ) {

$signStr = $signStr . $key . "=" . $value . "&";

}

$signStr = substr($signStr, 0, -1);

// 生成签名

$signature = base64_encode(hash_hmac("sha1", $signStr, $this->SecretKey, true));

return $signature;

}

/**

*  获取秘钥

*/

public function getVideoKey(Request $request)

{

$fileId = $request->input('fileId');

$edk = $request->input('edk');

$obj = Resources::where('file_id',$fileId)->first();

if($obj){

if($obj->dk){

$dk = $obj->dk;

}else{

$dk = $this->getVideoDrm($edk);

//修改数据库

$obj = Resources::where('file_id',$fileId)->first();

if($obj){

$obj->edk = $edk;

$obj->dk = $dk;

$obj->save();

}

}

return base64_decode($dk);

}else{

return "fail";

}

}

/**

* 加密回调

*/

public function backSend(Request $request)

{

$res = $request->input('data');

//Log::info(json_encode($res));

if( $res['errCode'] == 0 )

{

$drm = $res['drm'];

$edk = $drm['edkList'][0];

$dk = $this->getVideoDrm($edk);

//修改数据库

$obj = Resources::where('file_id',$res['fileId'])->first();

if($obj){

$obj->edk = $edk;

$obj->dk = $dk;

$obj->save();

}

Log::info("dk:".$dk);

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值