当前位置:   article > 正文

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

深入探索:使用PHP开发保利威Polyv云点播服务器API对接实践(一)(点播服务器 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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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签名
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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签名
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

字符串替换函数

/**
 * 替换字符串中的特殊字符
 * 该函数用于将输入字符串中的特定特殊字符(= 和 &)替换为指定的字符
 * 主要用于处理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);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

常用变量配置

$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分钟内有效;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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'];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

配置步骤:

  • 管理后台设置
  • 登录云点播管理后台,点击 【设置】 → 【视频设置】,进入视频设置页面。
  • 在授权播放和防录屏跑马灯接口设置栏中,填写业务方的接口服务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: 'https://my.domain.com/user/avatar.png',// 观众头像URL
        }
    });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

@漏刻有时

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/942531
推荐阅读
相关标签
  

闽ICP备14008679号