创建 Playsafe Token (v2)

接口URL

https://hls.videocc.net/service/v2/token/create-child

接口说明

  1. 用于创建 Playsafe Token,这个 token 即是加密视频的播放凭证
  2. 如果一个token尚未过期,此时使用相同的 videoId、viewerId、viewerIp、iswxa 参数值请求该接口,则会复用原来的token,并延长原token的有效期。
  3. 该接口目前仅支持子账号。如果要为主帐户创建 token ,可参考 创建 Playsafe Token

支持格式

JSON

请求方式

POST

请求数限制

TRUE

请求参数

参数名 必选 类型 说明
appId string 子账号 appId
videoId string 视频ID,例如 e6b23c6f519c5906e54a13b8200d7bb0_e
ts long 当前13位毫秒级时间戳,10分钟内有效
viewerId string 观看者ID,要求不同的观看者使用不同的ID
viewerIp string 观看者IP,如果为空,会自动获取调用该接口时的IP
viewerName string 观看者名称
expires long token 有效时长,单位为秒。为空时默认为10分钟。
disposable boolean true 表示 token 仅一次有效(验证一次后,token 就失效了)。
false 则表示在有效期内可以多次验证。默认为 false。
iswxa int 是否微信小程序播放,1为是,0为否。默认为0。
extraParams string 自定义的其它参数
sign string 签名,为32位大写的MD5值,详细的签名规则见下文

响应成功JSON示例:

{
    "code": 200,
    "status": "success",
    "message": "",
    "data": {
        "token": "d8835d53-71f5-40a2-a367-ddb8f8c7f16e-bsbcocx_bk",
        "userId": "e6b23c6f51",
        "appId": "asRocmWigR",
        "videoId": "e6b23c6f51c4b1cb9f0302a92ed42440_e",
        "viewerIp": "127.0.0.1",
        "viewerId": "abcd1234",
        "viewerName": null,
        "extraParams": null,
        "ttl": 600000,
        "createdTime": 1552446282044,
        "expiredTime": 1552446882044,
        "iswxa": 0,
        "disposable": false
    }
}

响应失败JSON示例:

appId 错误

{
    "code": 400,
    "status": "error",
    "message": "user_not_found",
    "data": "user secretKey not found."
}

子账号角色错误(目前仅支持“内容分发”角色)

{
    "code": 400,
    "status": "error",
    "message": "user_children_level_error",
    "data": "user children level error."
}

子账号已过期

{
    "code": 400,
    "status": "error",
    "message": "user_children_expired",
    "data": "user children expired."
}

ts 过期

{
    "code": 403,
    "status": "error",
    "message": "ts_expired",
    "data": "ts parameter is expired."
}

签名错误

{
    "code": 403,
    "status": "error",
    "message": "sign_invalid",
    "data": "sign parameter invalid."
}

响应字段说明

参数名 说明
code 响应代码,200为成功,403为ts过期或签名错误,400为参数错误(例如缺少 userId 或 videoId)
status 成功为success,失败为error
message 成功时为空错误时为错误提示消息
data 成功时为token相关数据,失败时为具体的错误提示
userId 用户ID
appId 子账号ID
videoId 视频ID,例如 e6b23c6f519c5906e54a13b8200d7bb0_e
viewerIp 观看者IP,如果为空,或自动获取调用该接口时的IP
viewerId 观看者ID,要求不同的观看者使用不同的ID
viewerName 观看者名称
extraParams 自定义的其它参数
ttl token 有效时长,单位为毫秒
createdTime token 创建时间
expiredTime token 过期时间
iswxa 是否微信小程序播放,1为是,0为否。
disposable true 表示 token 仅一次有效(验证一次后,token 就失效了)。false 则表示在有效期内可以多次验证。

签名规则

  1. 将除了 sign 之外的全部 非空 请求参数(也就是说,参数值为空的参数,将排除掉,不参与签名的计算),按字典序升序排列,按“参数名1参数值1参数名2参数值2……”的格式拼接起来,例如:ts1552447784505userIde6b23c6f51videoIde6b23c6f51c4b1cb9f0302a92ed42440_eviewerIdabcd1234viewerIp127.0.0.1
  2. 在上述字符串的头、尾分别加上 secretKey。以上述字符串、secretKey为abc为例,得到:abcts1552447784505userIde6b23c6f51videoIde6b23c6f51c4b1cb9f0302a92ed42440_eviewerIdabcd1234viewerIp127.0.0.1abc
  3. 计算上述字符串的MD5值,并转为大写,得到:166D45560D37DDBF0F05081D975231B5

php请求示例

// php
function get_client_ip() {
  if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
  } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
      $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } else {
      $ipaddress = $_SERVER['REMOTE_ADDR'];
  }
    return $ipaddress;
}

$appId = 'your appId';       // polyv 提供的 appId
$secretkey = 'your secretkey';     // polyv 提供的接口调用签名访问的key
$videoId = '65956867df8c717eb79136e05394122c_6';  // 视频对应vid
$ts = time() * 1000;      // 时间戳
$viewerIp = get_client_ip();  // 用户 ip
$viewerId = get_viewer_id();      // 自定义用户 id
$viewerName = get_viewer_name();  // 用户昵称, 若值为中文需要urlencode('张三'),可为空
$extraParams = get_extra_params();  // 自定义参数,可为空

/* 将参数 $appId、$secretkey、$videoId、$ts、$viewerIp、$viewerIp、$viewerId、$viewerName、$extraParams
    按照ASCKII升序 key + value + key + value ... +value 拼接
*/
$concated =  'appId'.$appId.'extraParams'.$extraParams.'ts'.$ts.'videoId'.$videoId.'viewerId'.$viewerId.'viewerIp'.$viewerIp.'viewerName'.$viewerName;

// 再首尾加上 secretkey
$plain = $secretkey.$concated.$secretkey;

// 取大写MD5
$sign = strtoupper(md5($plain));



// 然后将下列参数用post请求  https://hls.videocc.net/service/v2/token/create-child 获取 token
$url = 'https://hls.videocc.net/service/v2/token/create-child';
$data = array('appId' => $appId, 'videoId' => $videoId, 'ts' => $ts, 'viewerIp' => $viewerIp, 'viewerName' => $viewerName, 'extraParams' => $extraParams, 'viewerId' => $viewerId, 'sign' => $sign);


$result=post($url, http_build_query($data));

// 获取返回结果的 token, 再传入 playsafe 中播放加密视频
// $token = json_decode($result)->data->token;
$token = json_decode($result)->data->token;
echo $token;

function post($url, $post_data = '', $timeout = 5){
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, 1);
    if($post_data != ''){
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    }

    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    $file_contents = curl_exec($ch);
    curl_close($ch);
    return $file_contents;
}
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...