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);
}
}
}
getvod.php_php腾讯云点播视频加密相关推荐
- 腾讯云点播 - 视频防盗加密 - 使用总结
最近项目在搞视频播放,使用的是腾讯云点播,这里做一个使用总结~ 背景 项目中涉及到上传视频,播放视频,以及视频安全等,云点播这几个功能都有,接入起来也是比较顺滑~ 上传视频 项目第一步,当然是要上传视 ...
- 腾讯云点播视频存储(Web端视频上传)
官方文档 前言 所谓视频上传,是指开发者或其用户将视频文件上传到点播的视频存储中,以便进行视频处理.分发等. 一.简介 腾讯云点播支持如下几种视频上传方式: 控制台上传:在点播控制台上进行操作,将本地 ...
- qq视频转码失败怎么办_腾讯云点播视频转码需要注意的问题
上传视频是否可以选择不转码? 老版腾讯云点播在控制台上传是必须选择转码模版的,但使用api上传的时候可以选择不转码,在申请媒资的时候, 指定mode参数为 no_transcoding就不会进行转码, ...
- 云点播视频-DRM-方案调研
前段时间,朋友的一个公司网站视频点播接口被疯狂遍历请求,同时网上还出现了很多的针对这个网站视频的自动化视频下载工具.虽说是都是公开视频,但内容本身就是这个网站最大的价值,如果都通过工具下载视频观看,网 ...
- web利用腾讯云点播上传视频
web利用腾讯云点播上传视频到云服务器 第一步导入 <script src="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader. ...
- phpcms视频库第三方托管-接入腾讯云点播
phpcms视频库KU6改为优酷简单上传 phpcms已经不再更新,酷6网也已经相当于废了,想使用phpcms原本的视频功能,只能进行二次开发.本人在开发了优酷云视频的托管的基础上,继续开发了腾讯云点 ...
- 用Python实现腾讯云点播VOD
腾讯云点播VOD主要用于视频资源的上传和在线播放,腾讯云官方文档也有许多相关操作的介绍,但是关于Python的文档相对较少,这里我想分享一下在Python方面自己对腾讯云VOD的研究(记得看注释). ...
- 腾讯云点播简介和使用流程
目录 一,腾讯云点播简介 二,准备工作 1,点击:申请腾讯云账号 2,实名 3,购买点播存储包和流量包 三,使用腾讯云自带点播控制台管理点播视频 1,创建应用 2,使用控制台可对视频进行上传,删除,转 ...
- 【新知实验室】手把手实现腾讯云音视频应用
腾讯云音视频是什么? 腾讯云音视频(TRTC)提供一站式视频解决方案,包括点播直播.实时视频通话.短视频等视频服务,广泛应用于在线视频.电商.游戏直播.在线教育等场景.实时音视频基于腾讯21年来在网络 ...
最新文章
- Intel汇编程序设计-整数算术指令(下)
- mysql5.7.21源码安装
- js reduce实现中间件_js数组高阶方法reduce经典用法代码分享
- PHP如何在微信中聊天_迷你微信私有聊天系统PHP源码支持PC、移动APP
- 带有书签的Android WebView
- pymysql ︱mysql的基本操作与dbutils+PooledDB使用
- github和git的简单使用
- linux ubuntu 安装 SSH
- 获取汉字首字母,拼音,可实现拼音字母搜索----npm js-pinyin
- 「首席看点」也许敏捷就是问题所在
- CB推荐的AP统计学课程在线学习资源网站汇总
- 乘法鉴相器的matlab仿真,种用MATLAB仿真锁相环方法.PDF
- mysql创建软连接_18.4.2 建立MySQL的软链接
- 音视频 — 视频编码原理
- java 创建新的图片,底色自己设定
- Sql链接数据库基本语法
- 推荐算法(2):基于内容的推荐
- Ubuntu系统从机械硬盘迁移到SSD
- 【9】核心易中期刊推荐——图像视觉与图形可视化
- 20221210英语学习
热门文章
- go设置后端启动_开源一个go的H5游戏服务端开发框架
- python opengl_从Python开始,学习OpenGL(一)
- 软件工程导论 01章软件工程学概述
- LeetCode:64. 最小路径和(python、c++)
- MABN论文的译读笔记
- 【less-7】sqli-labs靶场第七关(类似less-5)
- 开源10轴IMU PCB,基于MEMS传感器MPU6500-HMC5983-AK8975-BMP280-MS5611设计,适用于多轴无人机、平衡车、惯导入门
- 红皮书--SQL语句
- 数据库备份、还原的处理
- html实现返回上一页的几种方法(javaScript:history.go(-1);)