阅读量: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 } });
@漏刻有时