深入探索:使用PHP开发保利威Polyv云点播服务器API对接实践(一)(点播服务器 API、视频加密、跑马灯防录屏、自定义用户)
创始人
2024-11-15 18:39:38
0

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

  • 一、点播服务器 API
    • 1.公用函数
      • post方式
      • get方式
      • md5签名
      • SHA1签名
      • 字符串替换函数
    • 常用变量配置
    • 2.获取视频播放凭证token
    • 3.查询视频信息
    • 4.查询单个视频的观看完成度
    • 5.授权播放和跑马灯验证
  • 二、点播播放器JS SDK

一、点播服务器 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: "",         ts: "",         sign: "",         code: "lockdatav",//跑马灯参数配置         marqueeCheck: true,//跑马灯核检         viewerInfo: {             viewerId: '13506843416', // 观众ID             viewerName: 'lockdatav', // 观众昵称             viewerAvatar: '/zb_users/upload/2024/csdn/avatar.png',// 观众头像URL         }     }); 

@漏刻有时

相关内容

热门资讯

人生低谷来撸C#--021 多... 1、概念线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的...
Python应用—加密、解密文... 1.创作需求日常生活中我们有很多文件想要保密。这个脚本可以方便大家对所有的文件类型进行加密ÿ...
CSS雷达光波效果(前端雷达光... 前言CSS雷达光波效果是一种视觉动画效果,常用于模仿雷达扫描或检测的视觉反馈。这种效果...
前端必知必会-html中inp... 文章目录HTML type的设置输入类型文本输入类型密码输入类型提交输入类型重置输入类型单选按钮输入...
Docker 网络模式 目录一. 默认网络驱动程序a. Bridge 网络b. Host 网络c. Overlay 网络d....
C++ bind复杂回调逻辑分...  回调函数基本知识回顾回调函数是什么函数指针或者函数对象作为参数传递给另一个函数的机制,...
mac清除dns缓存指令 ma... 你是否曾经被要求清理dns缓存并刷新?清理dns缓存一般是由于修改了主机文件ÿ...
63、ELK安装和部署 一、ELK日志系统1.1、ELK平台的定义ELK平台是一套完整的日志集中处理解决方案,...
wifi无线使用adb 要通过Wi-Fi使用ADB连接安卓设备,可以遵循以下步骤进行操作:通过U...
深入分析 Android Br... 文章目录深入分析 Android BroadcastReceiver (八)1. 系统与自定义实现1...