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);

}

}

}

getvod.php_php腾讯云点播视频加密相关推荐

  1. 腾讯云点播 - 视频防盗加密 - 使用总结

    最近项目在搞视频播放,使用的是腾讯云点播,这里做一个使用总结~ 背景 项目中涉及到上传视频,播放视频,以及视频安全等,云点播这几个功能都有,接入起来也是比较顺滑~ 上传视频 项目第一步,当然是要上传视 ...

  2. 腾讯云点播视频存储(Web端视频上传)

    官方文档 前言 所谓视频上传,是指开发者或其用户将视频文件上传到点播的视频存储中,以便进行视频处理.分发等. 一.简介 腾讯云点播支持如下几种视频上传方式: 控制台上传:在点播控制台上进行操作,将本地 ...

  3. qq视频转码失败怎么办_腾讯云点播视频转码需要注意的问题

    上传视频是否可以选择不转码? 老版腾讯云点播在控制台上传是必须选择转码模版的,但使用api上传的时候可以选择不转码,在申请媒资的时候, 指定mode参数为 no_transcoding就不会进行转码, ...

  4. 云点播视频-DRM-方案调研

    前段时间,朋友的一个公司网站视频点播接口被疯狂遍历请求,同时网上还出现了很多的针对这个网站视频的自动化视频下载工具.虽说是都是公开视频,但内容本身就是这个网站最大的价值,如果都通过工具下载视频观看,网 ...

  5. web利用腾讯云点播上传视频

    web利用腾讯云点播上传视频到云服务器 第一步导入 <script src="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader. ...

  6. phpcms视频库第三方托管-接入腾讯云点播

    phpcms视频库KU6改为优酷简单上传 phpcms已经不再更新,酷6网也已经相当于废了,想使用phpcms原本的视频功能,只能进行二次开发.本人在开发了优酷云视频的托管的基础上,继续开发了腾讯云点 ...

  7. 用Python实现腾讯云点播VOD

    腾讯云点播VOD主要用于视频资源的上传和在线播放,腾讯云官方文档也有许多相关操作的介绍,但是关于Python的文档相对较少,这里我想分享一下在Python方面自己对腾讯云VOD的研究(记得看注释). ...

  8. 腾讯云点播简介和使用流程

    目录 一,腾讯云点播简介 二,准备工作 1,点击:申请腾讯云账号 2,实名 3,购买点播存储包和流量包 三,使用腾讯云自带点播控制台管理点播视频 1,创建应用 2,使用控制台可对视频进行上传,删除,转 ...

  9. 【新知实验室】手把手实现腾讯云音视频应用

    腾讯云音视频是什么? 腾讯云音视频(TRTC)提供一站式视频解决方案,包括点播直播.实时视频通话.短视频等视频服务,广泛应用于在线视频.电商.游戏直播.在线教育等场景.实时音视频基于腾讯21年来在网络 ...

最新文章

  1. Intel汇编程序设计-整数算术指令(下)
  2. mysql5.7.21源码安装
  3. js reduce实现中间件_js数组高阶方法reduce经典用法代码分享
  4. PHP如何在微信中聊天_迷你微信私有聊天系统PHP源码支持PC、移动APP
  5. 带有书签的Android WebView
  6. pymysql ︱mysql的基本操作与dbutils+PooledDB使用
  7. github和git的简单使用
  8. linux ubuntu 安装 SSH
  9. 获取汉字首字母,拼音,可实现拼音字母搜索----npm js-pinyin
  10. 「首席看点」也许敏捷就是问题所在
  11. CB推荐的AP统计学课程在线学习资源网站汇总
  12. 乘法鉴相器的matlab仿真,种用MATLAB仿真锁相环方法.PDF
  13. mysql创建软连接_18.4.2 建立MySQL的软链接
  14. 音视频 — 视频编码原理
  15. java 创建新的图片,底色自己设定
  16. Sql链接数据库基本语法
  17. 推荐算法(2):基于内容的推荐
  18. Ubuntu系统从机械硬盘迁移到SSD
  19. 【9】核心易中期刊推荐——图像视觉与图形可视化
  20. 20221210英语学习

热门文章

  1. go设置后端启动_开源一个go的H5游戏服务端开发框架
  2. python opengl_从Python开始,学习OpenGL(一)
  3. 软件工程导论 01章软件工程学概述
  4. LeetCode:64. 最小路径和(python、c++)
  5. MABN论文的译读笔记
  6. 【less-7】sqli-labs靶场第七关(类似less-5)
  7. 开源10轴IMU PCB,基于MEMS传感器MPU6500-HMC5983-AK8975-BMP280-MS5611设计,适用于多轴无人机、平衡车、惯导入门
  8. 红皮书--SQL语句
  9. 数据库备份、还原的处理
  10. html实现返回上一页的几种方法(javaScript:history.go(-1);)