深入探索:使用PHP开发保利威Polyv云点播服务器API对接实践(一)(点播服务器 API、视频加密、跑马灯防录屏、自定义用户)

avatar
作者
筋斗云
阅读量:0

深入探索:使用PHP开发保利威Polyv云点播服务器API对接实践(一)

一、点播服务器 API

1.公用函数

保利威接口请求方式,包含post和get两种方式,因此,需要做好两种请求方式的封装函数。

post方式

/**  * 保利威POST爬虫规则  * 通过cURL发起POST请求获取数据  * @param string $url 请求的URL地址  * @param array $data 提交的POST数据  * @return string 返回爬取的数据  */ function postPolyvAPI($url, $data) {     $ch = curl_init();     curl_setopt($ch, CURLOPT_URL, $url);     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);     curl_setopt($ch, CURLOPT_POST, 1);     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);     $output = curl_exec($ch);     curl_close($ch);     return $output; } 

get方式

/**  * 使用CURL获取Polyv API数据  * 本函数通过CURL库发送HTTP请求到指定的URL,以获取Polyv API返回的数据它主要用于与Polyv平台的交互,  * 获取视频相关信息或其他服务提供的数据  * @param string $url 请求的URL地址,必须是有效的Polyv API接口地址  * @return string 返回API的响应数据,通常是JSON格式字符串  */ function getPolyvAPI($url) {     $ch = curl_init();     curl_setopt($ch, CURLOPT_URL, $url);     if (1 == strpos("$" . $url, "https://")) {         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);     }     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     $resp = curl_exec($ch);     curl_close($ch);     return $resp; } 

md5签名

/**  * 生成Polyv SHA1签名  * 该函数用于根据给定的数据和密钥,生成一个SHA1签名  * 主要用于安全校验,确保数据的完整性和防篡改  * @param array $data 待签名的数据,通常是一个关联数组  * @param string $secretkey 秘钥,用于签名计算的密钥  * @return string 签名结果,返回一个大写的MD5字符串  */ function polyv_md5_sign($data, $secretkey) {     $data = http_build_query($data);     $md5_str = $secretkey . replaceSpecialChars($data, '', '') . $secretkey;     return strtoupper(md5($md5_str)); //计算MD5签名 } 

SHA1签名

/**  * 生成Polyv SHA1签名  * 该函数用于根据给定的数据和密钥,生成一个SHA1签名  * 主要用于安全校验,确保数据的完整性和防篡改  * @param array $data 待签名的数据,通常是一个关联数组  * @param string $secretkey 秘钥,用于签名计算的密钥  * @return string 签名结果,返回一个大写的MD5字符串  */ function polyv_sha1_sign($data, $secretkey) {     $data = http_build_query($data, '', '&', PHP_QUERY_RFC3986);     return strtoupper(sha1($data . $secretkey)); //计算SHA1签名 } 

字符串替换函数

/**  * 替换字符串中的特殊字符  * 该函数用于将输入字符串中的特定特殊字符(= 和 &)替换为指定的字符  * 主要用于处理URL参数等场景,以避免特殊字符导致的解析错误或安全问题  * @param string $input 需要进行替换的原始字符串  * @param string $replaceEqual 替换等于号(=)的字符,默认为下划线(_)  * @param string $replaceAmpersand 替换与号(&)的字符,默认为连字符(-)  * @return string 替换后的字符串  */ function replaceSpecialChars($input, $replaceEqual = '_', $replaceAmpersand = '-') {     //使用str_replace替换=和&     return str_replace(['=', '&'], [$replaceEqual, $replaceAmpersand], $input); }  

常用变量配置

$userId = '2ec3**';//保利威点播账户id,可以参考【获取密钥】获取,获取路径:官网->登录->点播(API接口 $secretkey = 'tM0rt**';//secretkey密钥用于生成签名,作为通信数据安全的关键信息,严禁保存在客户端直接使用,所有API都必须通过客户自己服务器中转调用POLYV服务器获取响应数据 $videoId = "2ec3e5dba0a5e48f2af011b208f6f00c_2";//视频vid $vid = "2ec3e5dba0a5e48f2af011b208f6f00c_2";//视频vid $viewerId = '135068***';//自定义用户id $ts = time() * 1000;//当前13位毫秒级时间戳,10分钟内有效; $ptime = time() * 1000;//当前13位毫秒级时间戳,10分钟内有效; 

2.获取视频播放凭证token

  • 获取Playsafe Token(播放凭证),用于播放加密视频
  • 如果一个token尚未过期,此时使用相同的videoId、viewerId、viewerIp、iswxa参数值请求该接口,则会复用原来的token,并延长原token的有效期
  • 接口支持https协议
/*获取SHA1签名参数数组*/ $data_sign = [     'ts' => $ts,     'userId' => $userId,     'videoId' => $videoId,     'viewerId' => $viewerId ]; $sign = polyv_md5_sign($data_sign, $secretkey);  /*获取API数组*/ $data = [     'sign' => $sign,     'ts' => $ts,     'userId' => $userId,     'videoId' => $videoId,     'viewerId' => $viewerId  ]; $sign2 = md5($secretkey . $videoId . $ts); $url = "http://hls.videocc.net/service/v1/token"; $obj = json_decode(postPolyvAPI($url, $data), true); $token = $obj['data']['token']; 

3.查询视频信息

  • 通过视频id查询视频信息
  • 接口URL中的{userId}为点播账号userId
  • 接口支持https协议
//参数数组 $data = [     'filters' => 'metaData',     'ptime' => $ptime,     'title' => $vid,     'userid' => $userid,     'viewerId' => $viewerId ]; $sign = polyv_sha1_sign($data, $secretkey); $url = "http://api.polyv.net/v2/video/search-videos?sign=" . $sign . "&" . http_build_query($data); die(getPolyvAPI($url)); 

4.查询单个视频的观看完成度

  • 查询观众累计观看单个视频的完成度情况
  • 数据的查询需要间隔一天,该接口需联系客服开通后才能使用
  • 观看完成度=用户观看有效时长/视频时长,例如:视频A时长为50分钟,用户使用PC H5观看了第0-20分钟,又使用APP观看了第10~30分钟,此时用户有效观看时长为30分钟,则完成度为 30/50=60
  • 接口URL中的{userid}为点播账号userid,具体参考
  • 接口支持https协议
/参数数组 $data = [     'ptime' => $ptime,     'userid' => $userid,     'vid' => $vid,     'viewerId' => $viewerId ]; $sign = polyv_sha1_sign($data, $secretkey); $url = "http://api.polyv.net/v2/video/engagement/" . $userid . "/get?sign=" . $sign . "&" . http_build_query($data); die(getPolyvAPI($url)); 

5.授权播放和跑马灯验证

屏幕录像是最难防范的一种视频盗版方式,保利威播放器提供的防录屏跑马灯功能,通过设定文字内容(一般是观众的身份ID信息)在视频上不规则滚动,以此来警示盗版者,达到视频版权保护的效果。另外在用户网站中,除了通过登录信息(cookies)验证观众是否有权限访问视频播放页面外,还可以通过保利威播放器验证观众是否有播放某一个视频的权限,从而实现对观众权限的双重验证。

$username = '保哥后院'; $secretkey = 'tM0rtpiR0u'; $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 = "ok";  if ($username != "") { // 业务方可自定义授权验证逻辑     $status = 1; } else {     $status = 2; }  $callback = $_GET["callback"]; if (!empty($_GET["callback"])) {     $callback = $_GET["callback"]; } else {     $callback = 'polv110'; } $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; }  

配置步骤:

  • 管理后台设置
  • 登录云点播管理后台,点击 【设置】 → 【视频设置】,进入视频设置页面。
  • 在授权播放和防录屏跑马灯接口设置栏中,填写业务方的接口服务URL。

二、点播播放器JS SDK

  • 禁止拖拽进度条
  • 支持视频加密
  • 支持跑马灯防止录屏功能
  • 支持自定义用户信息
var player = polyvPlayer({         wrap: '#player',         width: '100%',         height: 0,         vid: '2ec3e5dba0a5e48f2af011b208f6f00c_2',         ban_seek: 'on',//是否禁止拖拽进度条         playsafe: "<?php echo $token; ?>",         ts: "<?php echo $ts; ?>",         sign: "<?php echo $sign2; ?>",         code: "lockdatav",//跑马灯参数配置         marqueeCheck: true,//跑马灯核检         viewerInfo: {             viewerId: '13506843416', // 观众ID             viewerName: 'lockdatav', // 观众昵称             viewerAvatar: '/zb_users/upload/2024/csdn/avatar.png',// 观众头像URL         }     }); 

@漏刻有时

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!