阿酷TONY 2021-2-26 整理

视频安全之授权播放和防录屏跑马灯

先上效果图(视频播放时,显示学员名称和学员手机号):

屏幕录像是最难防范的一种视频盗版方式,保利威播放器提供的防录屏跑马灯功能,通过设定文字内容(一般是观众的身份ID信息)在视频上不规则滚动,以此来警示盗版者,达到视频版权保护的效果。

另外在用户网站中,除了通过登录信息(cookies)验证观众是否有权限访问视频播放页面外,还可以通过保利威播放器验证观众是否有播放某一个视频的权限,从而实现对观众权限的双重验证。

实现流程

实现步骤

一、管理后台设置

登录云点播管理后台,点击 【设置】 → 【视频设置】,进入视频设置页面。

在授权播放和防录屏跑马灯接口设置栏中,填写业务方的接口服务URL。

播放器在请求授权接口时,会自动适配以下情况:

当填写的是完整的URL时,播放器会直接请求,例如:http://mywebsite.com/interface/validate。当填写的是不带协议头的接口地址时,播放器会根据当前页面的请求协议自动补全。例如填写的是://mywebsite.com/interface/validate,当前页面使用https协议访问,那么实际请求的是:https://mywebsite.com/interface/validate。当填写的是不带协议头和HOST的接口地址时,播放器会根据当前页面的请求协议和HOST自动补全。例如填写的是:/interface/validate 或 interface/validate,当前页面的域名是mywebsite2.com,且页面使用http协议访问,那么实际请求的是:http://mywebsite2.com/interface/validate。

二、业务方服务端实现

1、播放器端请求

当管理后台设置授权播放和跑马灯接口后,Polyv播放器在播放视频时会首先请求后台设置的接口,请求的方式为GET,并且会附带vid、code、t、callback这四个参数,例如:https://www.mywebsite.com/validate?vid=e2e84a73837363106d8d257f60e55c4c_e&code=&t=1457938821973&callback=polyvObject16209048491895664483_1457938783908&_=1457938784101。

其中code为播放器嵌入代码中的参数,值可以自定义;t为播放器产生的随机数。播放器示例代码如下:

由于H5播放器通过Ajax方式请求用户接口,需要跨域请求,因此需要callback参数。而Flash播放器是通过跨域文件实现跨域,所以不需要callback参数,请求接口时只会提交vid、code和t三个参数。Flash播放器实现跨域请参考跨域访问设置。

2、服务端接口实现

业务方服务端接口如果只需实现授权验证的功能,只需返回 status、username、sign三个参数给播放器验证即可。

服务端实现的PHP示例如下:

// validate.php

$username = "elvis"; // 用户昵称, 若值为中文需要urlencode('张三'),可从session获取

$secretkey = "secretkey"; // 登录保利威管理后台,点击 【设置】 → 【API接口】获取

$vid=$_GET["vid"];

$t = $_GET["t"];

$code = $_GET["code"];

if($username=="elvis"){

$status = 1; // 业务方可自定义授权验证逻辑

}else {

$status = 2;

}

if(!empty($_GET["callback"])){

$callback = $_GET["callback"];

}else{

$callback = '';

}

$sign=md5("vid=$vid&secretkey=$secretkey&username=$username&code=$code&status=$status&t=$t");

$array=Array("status"=>$status,"username"=>$username,"sign"=>$sign);

$Json = json_encode($array);

if($callback!=''){ //PC H5播放器会提交callback参数

echo $callback."(".$Json.")";

} else{ //Flash播放器不提交callback参数

echo "(".$Json.")";

}

?>

其中,sign的计算规则为:拼接vid、secretkey、username、code、status、t参数做MD5计算:

Plain ="vid=" + vid + "&secretkey=" + secretKey + "&username=" + username + "&code=" + code + "&status=" +status + "&t=" + t

sign = MD5.hash(Plain);

以下为接口返回示例:

polyvObject16208229674372271079_1478765178186({

"status":1,

"username":"elvis",

"sign":"1cca74bd55c6076091ed84807065e5b7"

})

// 不提交callback参数时

{

"status":1,

"username":"elvis",

"sign":"2c2bfb00314da7d768d50a7d1e93bd9f"

}

如果除了授权验证,还需实现跑马灯功能,则接口需要返回跑马灯相关的参数。

服务端实现的PHP示例如下:

// validate.php

$username = "elvis"; // 用户昵称, 若值为中文需要urlencode('张三'),可从session获取

$secretkey = "secretkey"; // 登录保利威管理后台,点击 【设置】 → 【API接口】获取

$vid=$_GET["vid"];

$t = $_GET["t"];

$code = $_GET["code"];

$fontSize="40";

$fontColor="0xFFE900";

$speed="200";

$filter="on";

$setting="3";

$alpha="1";

$filterAlpha="1";

$filterColor="0x3914AF";

$blurX="2";

$blurY="2";

$tweenTime="1";

$interval="5";

$lifeTime="3";

$strength="4";

$show="on";

$msg="Errormessage!";

if($username=="elvis"){ // 业务方可自定义授权验证逻辑

$status = 1;

}else {

$status = 2;

}

if(!empty($_GET["callback"])){

$callback = $_GET["callback"];

}else{

$callback = '';

}

$sign=md5("vid=$vid&secretkey=$secretkey&username=$username&code=$code&status=$status&t=$t&msg=$msg&fontSize=$fontSize&fontColor=$fontColor&speed=$speed&filter=$filter&setting=$setting&alpha=$alpha&filterAlpha=$filterAlpha&filterColor=$filterColor&blurX=$blurX&blurY=$blurY&interval=$interval&lifeTime=$lifeTime&tweenTime=$tweenTime&strength=$strength&show=$show");

$array = Array("status"=>$status,"username"=>$username,"sign"=>$sign,"msg"=>$msg,"fontSize"=>$fontSize,"fontColor"=>$fontColor,"speed"=>$speed,"filter"=>$filter,"setting"=>$setting,"alpha"=>$alpha,"filterAlpha"=>$filterAlpha,"filterColor"=>$filterColor,"blurX"=>$blurX,"blurY"=>$blurY,"tweenTime"=>$tweenTime,"interval"=>$interval,"lifeTime"=>$lifeTime,"strength"=>$strength,"show"=>$show,);

$Json = json_encode($array);

if($callback!=''){

echo $callback."(".$Json.")";

} else{

echo $Json;

}

?>

其中,sign的计算规则为(参数必须按照示例中的顺序拼接):

Plain = "vid=" + vid + "&secretkey=" + secretKey + "&username=" + username + "&code=" + code + "&status=" + status + "&t=" + t +

"&msg=" + msg + "&fontSize=" + fontSize + "&fontColor=" + fontColor + "&speed=" + speed +"&filter=" +filter + "&setting=" + setting +

"&alpha=" + alpha + "&filterAlpha=" + filterAlpha + "&filterColor=" + filterColor + "&blurX=" + blurX + "&blurY=" + blurY +

"&interval=" + interval + "&lifeTime=" + lifeTime + "&tweenTime=" + tweenTime + "&strength=" + strength + "&show=" +show;

sign = MD5.hash(Plain);

例如:当vid="8f8482aaab11dd5f45f183a9192a04c5_8",secretkey="AiDQw1mAmi",username="suki",code="abc",status="1",t="143020010115550947",msg="Errormessage!",fontSize="40",fontColor="0xFFE900",speed="200",filter="on",setting="3",alpha="1",filterAlpha="1",filterColor="0x3914AF",blurX="2",blurY="2",interval="5",lifeTime="3",tweenTime="1",strength="4",show="on"时,

拼凑起来去MD5计算的字符串为:

vid=8f8482aaab11dd5f45f183a9192a04c5_8&secretkey=AiDQw1mAmi&username=suki&code=abc&status=1&t=143020010115550947&msg=Errormessage!&fontSize=40&fontColor=0xFFE900&speed=200&filter=on&setting=3&alpha=1&filterAlpha=1&filterColor=0x3914AF&blurX=2&blurY=2&interval=5&lifeTime=3&tweenTime=1&strength=4&show=on

则sign为MD5计算后32位小写的值:3b07f56f29b7fd728bf20020442338e7

以下为接口返回示例:

{

"status":1,

"username":"elvis",

"sign":"6ab63590797e513d1b6c46b407413478",

"msg":"Errormessage!",

"fontSize":"40",

"fontColor":"0xFFE900",

"speed":"200",

"filter":"on",

"setting":"3",

"alpha":"1",

"filterAlpha":"1",

"filterColor":"0x3914AF",

"blurX":"2",

"blurY":"2",

"tweenTime":"1",

"interval":"5",

"lifeTime":"3",

"strength":"4",

"show":"on"

}

三、接口返回参数说明

参数名类型必填默认值说明statusInteger是/是否允许播放:1 允许 2 禁止usernameString是/观众名称,也会用于跑马灯显示的文字内容。如果是中文需要做URLEncodesignString是/接口签名,用于校验返回内容是否被篡改showString是off当参数值为“on”时表示显示跑马灯,默认不显示settingInteger是1跑马灯滚动的样式:1 从右到左滚动 2 随机位置闪烁 3 从右到左闪烁滚动speedInteger是200跑马灯文字从右侧移至左侧所需时间,单位:1/10秒lifeTimeInteger是3跑马灯文字显示时间,单位:秒intervalInteger是5跑马灯文字隐藏间隔时间,单位:秒tweenTimeInteger是1跑马灯文字渐隐渐现时间,单位:秒fontSizeInteger是30跑马灯文字的字体大小fontColorString是0x000000跑马灯文字颜色,使用十六进制颜色值表示,如0xFF0000,默认为黑色alphaFloat是1跑马灯文字透明度,取值范围0.01~1,参数值不能小于0.01filterString是off跑马灯文字是否描边,on 描边 off 不描边filterAlphaFloat是1文字描边透明度,取值范围0~1filterColorString是0x000000文字描边颜色,使用十六进制颜色值表示,如0xFF0000,默认为黑色strengthInteger是4描边强度,取值范围0~255blurXInteger是2描边水平模糊量,取值范围0~255blurYInteger是2描边垂直模糊量,取值范围0~255msgString是/自定义错误提示信息

当接口只做授权验证用途时,只需返回 status、username和sign三个参数,跑马灯相关参数可不返回。请确保接口返回数据是utf-8编码,注意 status参数是整型,不能是字符串类型。目前跑马灯功能不支持在移动端H5播放器上使用。请尽量不要对播放器样式或\标签进行修改

自己动手加空调氟利昂教程
dnf升级哪个粉卡