在用户网站中,除了可以通过session、cookie判断学员是否有权限访问网站上的某些视频页面之外,还可以通过POLYV播放器去实现学员权限验证播放的功能,从而实现了对学员权限的双重验证。首先需要开发者开发一个能输出以下示例中json参数的http协议接口(如,http://www.mywebsite.com/validate.php),然后把接口URL配置到POLYV后台(如下图)。

自动补全
接口URL的配置适配以下几种情况:
1. 直接请求URL,例如:http://mywebsite.com/interface/validate.php。
2. 自动补全协议,例如://mywebsite.com/interface/validate.php 调用时会补全当前页面的请求协议,实际请求的地址是http://mywebsite.com/interface/validate.php 或 https://mywebsite.com/interface/validate.php。
3. 补全协议和HOST,例如:/interface/validate.php或者interface/validate.php,调用时会补全当前页面的请求协议和HOST,所以实际请求的地址是http://mywebsite.com/interface/validate.php。
授权
如果只实现授权播放功能,则只需输出status、username、sign这3个参数给POLYV验证即可,以下为用户接口的返回示例:
PC端flash播放器请求用户接口时的返回示例:
{
"status":1,
"username":"elvis",
"sign":"2c2bfb00314da7d768d50a7d1e93bd9f"
}
移动端js请求用户接口时的返回示例(POLYV请求接口时,会提交callback参数):
polyvObject16208229674372271079_1478765178186({
"status":1,
"username":"elvis",
"sign":"1cca74bd55c6076091ed84807065e5b7"
})
此时sign的计算规则为:将以下参数的值拼凑起来的字符串做MD5计算。
Plain ="vid=" + vid + "&secretkey=" + secretKey + "&username=" + username + "&code=" + code + "&status=" +status + "&t=" + t
sign = MD5.hash(Plain);
授权跑马灯
除了授权播放功能,还需要实现跑马灯功能的,则输出示例中其他跑马灯相关的参数,PC端flash播放器请求用户接口时的返回示例:
{
"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"
}
此时sign的计算规则为:将以下参数的值拼凑起来的字符串做MD5计算。
如果需使用跑马灯功能,则必须用这种签名方式,否则会存在跑马灯被篡改的风险。
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
参数解释:
序号 | 参数名 | 代表意义 | 参数可选 | 参数类型 | 是否必需项 | 默认值 |
---|---|---|---|---|---|---|
1 | status | 是否播放 | 1:正常播放2:禁止播放 | 整型 | 是 | |
2 | username | 用户名,可以是学员的id,也可以是任意定义的值,也可以为空 | String | 是 | ||
3 | sign | 通过MD5加密算法计算得到32位小写的值 | String | 是 | ||
4 | msg | 自定义播放错误提示信息 | String | 是 | ||
5 | fontSize | 跑马灯文字字体大小 | 整型 | 是 | 30 | |
6 | fontColor | 跑马灯文字字体颜色 | 包含三个 8 位 RGB 颜色成分的数字;例如,0x000000 为黑色 | String | 是 | 0x000000 黑色 |
7 | speed | 跑马灯文字移动指定像素所需时间 | 整型 单位:(秒/10) | 是 | 200 | |
8 | filter | 是否描边 | “on” :描边 “off”:不描边 | String | 是 | off |
9 | setting | 跑马灯样式 | 1:自屏幕右方至左方一直滚动2:屏幕内随机位置闪烁3:自屏幕右方至左方一直滚动,渐隐渐现 | 整型 | 是 | 1 |
10 | alpha | 跑马灯文本透明度 | 范围:0~1 | float | 是 | 1 |
11 | filterAlpha | 跑马灯描边透明度 | 范围:0~1 | float | 是 | 1 |
12 | filterColor | 跑马灯描边颜色 | 包含三个 8 位 RGB 颜色成分的数字;例如,0x000000 为黑色 | String | 是 | 0x000000 黑色 |
13 | blurX | 跑马灯描边水平模糊量 | 范围:0~255 | 整型 | 是 | 2 |
14 | blurY | 跑马灯描边垂直模糊量 | 范围:0~255 | 整型 | 是 | 2 |
15 | interval | 跑马灯文本隐藏间隔时间 | 整型 (单位:秒) | 是 | 5 | |
16 | lifeTime | 跑马灯文本显示时间 | 整型 (单位:秒) | 是 | 3 | |
17 | tweenTime | 跑马灯文本渐隐渐现时间 | 整型 (单位:秒) | 是 | 1 | |
18 | strength | 跑马灯描边强度 | 范围:0~255 | 整型 | 是 | 4 |
19 | show | 是否显示跑马灯,默认为否 | String | 是 | off |
当网页调用POLYV播放器播放视频时,在PC端中,POLYV通过GET请求用户的http协议接口并提交vid、code、t这3个参数(如,http://www.mywebsite.com/validate.php?vid=e8888b74d19fe43983170b7cf804444d_e&code=abc&t=143020010115550947);而在移动端中,由于js通过ajax方式去请求用户的接口,需要跨域请求,因此需要加多一个callback参数,POLYV通过GET请求用户接口并提交vid、code、t、callback这4个参数(如,http://www.mywebsite.com/validate.php?vid=e2e84a73837363106d8d257f60e55c4c_e&code=&t=1457938821973&
callback=polyvObject16209048491895664483_1457938783908&_=1457938784101)
其中code为播放代码中的参数,值为自定义(如下所示,可以不在播放代码中添加此参数,则该参数的值默认为空);t为播放器产生的随机数。需要用最新的js链接:https://player.polyv.net/script/polyvplayer.min.js,以前旧版的js不支持。
示例代码:
<script src='https://player.polyv.net/script/polyvplayer.min.js'></script>
<div id='player'></div>
<script>
var player = polyvObject('#player').videoPlayer({
'width':'600',
'height':'373',
'vid' : 'e8888b74d19fe43983170b7cf804444d_e',
'code' : 'myRandomCodeValue'
});
</script>
同时,为了让PC端的Flash能够跨域请求用户接口,还需要用户在自己的网站域名根目录下增加crossdomain.xml文件。
<cross-domain-policy>
<allow-access-from domain="*.polyv.net"/>
</cross-domain-policy>
最后POLYV播放器就能接收用户的http协议接口返回的json数据,从而根据参数的值去进行相应的播放操作。
授权播放功能接口主要的播放操作是:授权播放,即判断是否允许播放。
当status参数的值为1时,POLYV播放器会主动验证sign的合法性。若合法,则允许播放;若不合法,则禁止播放。当视频允许播放时,show的值为on表示显示跑马灯,off表示不显示跑马灯。
当status参数的值为2时,POLYV播放器直接禁止播放视频。
用户的http协议接口(如,http://www.mywebsite.com/validate.php)代码示例:
<?php
$username = "elvis";
$secretkey = "tIQp4ATe9Z";
$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 = '';
}
if($callback!=''){
$sign=md5("vid=$vid&secretkey=$secretkey&username=$username&code=$code&status=$status&t=$t");
$array=Array("status"=>$status,"username"=>$username,"sign"=>$sign);
//跑马灯加强版加密方式
//$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");
//若需要在PC端h5播放器中显示跑马灯,则$array改为:
//$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);
echo $callback."(".$Json.")";
} else{
$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);
echo $Json;
}
?>
注:
1.接口返回的数据,请确保是UTF-8编码的;注意json数据中的status参数是整型的,不能是字符串!
用户开发的接口地址的相应域名下需有crossdomain.xml,需至少包含:
<allow-access-from domain="*.polyv.net">
建议设为:<allow-access-from domain="*">
目前跑马灯需要通过PC端flash或H5播放器来实现,移动端网页暂不支持。
2.若需要在PC端h5播放器中显示跑马灯,则移动端的$array改为(callback不为空时):
$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,);
3.移动端常见错误码
错误码 | 错误提示 | 处理方案 |
---|---|---|
013.02 | 授权接口请求失败 | 刷新页面重新请求或者检查授权播放和跑马灯接口路径是否可访问(例如:是否是相对路径) |
013.03 | 校验sign接口请求失败 | 刷新页面重新加载,或联系保利威技术支持 |
013.04 | 校验sign接口返回并没有sign值 | 联系保利威技术支持 |
013.05 | sign错误 | 检查sign的生成是否按文档要求拼接和加密,以及播放器code参数值是中文的话,要做base64UrlSafe后再传入授权播放和跑马灯接口。 |
013.06 | 授权播放和跑马灯接口返回status值不是1,不允许观看 | 检查接口的status值 |