仅实现视频认证,视频跑马灯不在考虑范围,请自行阅读官方文档:保利威官方文档。
登录云点播管理后台,点击 【设置】 → 【视频设置】,进入视频设置页面。
在授权播放和防录屏跑马灯接口设置栏中,填写认证接口路由。
从官网直接拷这段代码,vid是上传的视频的id,刷新网页就会将这些数据发到咱们自己后端的认证接口。
<script src='https://player.polyv.net/script/player.js'></script>
<div id='player'></div>
<script>
var player = polyvPlayer({
wrap: '#player',
width: 800,
height: 533,
vid: '88083abbf5bcf1356e05d39666be527a_8',
code: 'myCodeValue' // 用户可自定义参数值,也可以不设置此参数,那么在请求接口时该参数值为空。参数值为中文时需要做base64URLSafe。
});
</script>
@app.route('/video/verfy/')
def auth():
query_params = request.args
t = query_params.get('t')
vid = query_params.get('vid')
code = query_params.get('code')
callback = query_params.get('callback')
返回数据
{
"status":1, // status为1则认证通过,为0则认证不通过
"username":"elvis", //username为你的业务的用户,可以随便写一个
"sign":"2c2bfb00314da7d768d50a7d1e93bd9f" //认证值
}
sign的生成
sign的计算规则为:拼接vid、secretkey、username、code、status、t参数做MD5计算:
sign = str(md5(f"vid={vid}&secretkey={secretkey}&username=general_zy&code={code}&status={1}&t={t}".encode(
'utf-8')).hexdigest())
Flash播放器的跨域配置
配置方式为:添加crossdomain.xml文件到播放域名的根目录下。
<cross-domain-policy>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
cross-domain-policy>
只需要把这段内容返回就行:
@app.route('/crossdomain.xml&')
def crossdomain():
return render_template('crossdomain.xml')
callback的用途
以上操作之后,视频并不能播放,而callback参数也一直没有使用:
加上callback参数:
res = {
'status': 1,
'username': 'general_zy',
'sign': sign
}
if callback:
data = f'{callback}({dumps(res)})'
return data
else:
return jsonify(res)
{
"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"
}
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
status | Integer | 是 | / | 是否允许播放:1 允许 2 禁止 |
username | String | 是 | / | 观众名称,也会用于跑马灯显示的文字内容。如果是中文需要做URLEncode |
sign | String | 是 | / | 接口签名,用于校验返回内容是否被篡改 |
show | String | 是 | off | 当参数值为“on”时表示显示跑马灯,默认不显示 |
setting | Integer | 是 | 1 | 跑马灯滚动的样式:1 从右到左滚动 2 随机位置闪烁 3 从右到左闪烁滚动 |
speed | Integer | 是 | 200 | 跑马灯文字从右侧移至左侧所需时间,单位:1/10秒 |
lifeTime | Integer | 是 | 3 | 跑马灯文字显示时间,单位:秒 |
interval | Integer | 是 | 5 | 跑马灯文字隐藏间隔时间,单位:秒 |
tweenTime | Integer | 是 | 1 | 跑马灯文字渐隐渐现时间,单位:秒 |
fontSize | Integer | 是 | 30 | 跑马灯文字的字体大小 |
fontColor | String | 是 | 0x000000 | 跑马灯文字颜色,使用十六进制颜色值表示,如0xFF0000,默认为黑色 |
alpha | Float | 是 | 1 | 跑马灯文字透明度,取值范围0.01~1,参数值不能小于0.01 |
filter | String | 是 | off | 跑马灯文字是否描边,on 描边 off 不描边 |
filterAlpha | Float | 是 | 1 | 文字描边透明度,取值范围0~1 |
filterColor | String | 是 | 0x000000 | 文字描边颜色,使用十六进制颜色值表示,如0xFF0000,默认为黑色 |
strength | Integer | 是 | 4 | 描边强度,取值范围0~255 |
blurX | Integer | 是 | 2 | 描边水平模糊量,取值范围0~255 |
blurY | Integer | 是 | 2 | 描边垂直模糊量,取值范围0~255 |
msg | String | 是 | / | 自定义错误提示信息 |
传参时,code参数是自定义的,可以写当前用户的id,这样后台就可以基于id做判断,如果当前用户付费了就可以观看。
以下为模拟代码:
@app.route('/video/verfy/')
def auth():
query_params = request.args
t = query_params.get('t')
vid = query_params.get('vid')
code = query_params.get('code')
callback = query_params.get('callback')
secretkey = '请填写你的secretkey'
sign = str(md5(f"vid={vid}&secretkey={secretkey}&username=general_zy&code={code}&status={1}&t={t}".encode(
'utf-8')).hexdigest())
# 模仿查验不通过
allow = False
if allow:
res = {
'status': 1,
'username': 'general_zy',
'sign': sign
}
if callback:
data = f'{callback}({dumps(res)})'
return data
else:
return jsonify(res)
else:
# status改为2则无权播放
res = {
'status': 2,
'username': 'general_zy',
'sign': sign,
}
if callback:
data = f'{callback}({dumps(res)})'
return data
else:
return jsonify(res)