# 移动端web的授权播放功能与原理

随着移动端视频技术的发展，用户对移动端观看视频的需求日益增加，教育行业对移动端的视频版权保护意识的日益加强，保利威视推出了移动端web的授权播放功能，以保护用户的移动端视频观看的版权。

实现移动端web的授权播放功能，首先需要在POLYV后台进行如下设置：

[![12](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-57174d10d5a3f6a31d11be8b63e10f3e85554569%2F12.jpg?alt=media)](https://git.polyv.net/help-center/document-center/-/blob/master/docs/unclassified-img/2015/07/12.jpg)

保存好以上设置之后，还需要在页面代码中添加ts和sign参数。当手机浏览器请求m3u8地址时，会将ts和sign参数传递给m3u8地址，m3u8的key授权服务器收到参数后进行校验。如果ts和sign参数正确，保利威视的key授权服务器会返回正确的key文件给播放器。如果ts或sign参数错误，则会返回400错误。

以下以PHP为示例代码，其中ts参数为当前时间戳乘以1000，sign为secretkey、vid、ts按顺序拼凑起来的字符串进行MD5计算得到的结果。

```
<?php
$vid = "e2e84a738354402a52ce81aeab4e3067_e";
$secretKey= "7UagtQOq2A";
$ts=time()*1000;
  
$hash = md5($secretKey.$vid.$ts);
?>
 
<script src='http://static.polyv.net/file/polyvplayer_v2.0.min.js'></script>
<div id='plv_e2e84a738354402a52ce81aeab4e3067_e'></div>
<script>
var player = polyvObject('#plv_e2e84a738354402a52ce81aeab4e3067_e').videoPlayer({
    'width':'600',
    'height':'485',
    'vid' : 'e2e84a738354402a52ce81aeab4e3067_e',
    'ts':'<?php echo $ts; ?>',
    'sign':'<?php echo $hash; ?>'
});
</script>
```

整个移动端web的授权播放功能实现过程，如下图所示：

![绘图2](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-4e8e0807024e2c2d17e3e9edf84d3a35226d9958%2F%E7%BB%98%E5%9B%BE2.png?alt=media)

那么，保利威视是如何重视并保护移动端访问的m3u8文件呢？

首先，我们来看一下m3u8文件里面的具体内容。

![image001](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-85ade702764ac0b176fb5d24f283b46b28389a97%2Fimage001.png?alt=media)

其中，m3u8文件在播放过程中需要用来解密播放ts文件的key，如下图所示:

![image003](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-23f7bd7f216b80dd046b49b3314c2252a9c67f5b%2Fimage003.png?alt=media)

接下来，在“开放授权”（在“POLYV后台”——“视频设置”——“移动端加密设置”里面设置）的情况下，直接访问key文件 <http://hls.videocc.net/e2e84a7383/7/e2e84a738354402a52ce81aeab4e3067\\_1.key> ，访问正常，返回200。如下图所示：

![image005](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-ba4c5ae7a9ac1c262e402a50dd4f28dc7521ae40%2Fimage005.png?alt=media)

如果在“web授权”的情况下，直接访问key文件<http://hls.videocc.net/e2e84a7383/7/e2e84a738354402a52ce81aeab4e3067\\_1.key> ，则访问异常，返回400错误。如下图所示：

![image007](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-df6951cd5b2fb1db3580d13e5b2727e194258757%2Fimage007.png?alt=media)

那在“web授权”的情况下，使用保利威视移动端web的授权播放功能，如何合法正确地请求m3u8文件，从而获取到合法的key文件呢？

首先，获取用户页面代码中的ts（时间戳）和sign参数，将这两个参数拼接到原来的m3u8地址中，得到合法的m3u8地址 <http://hls.videocc.net/e2e84a7383/7/e2e84a738354402a52ce81aeab4e3067\\_1.m3u8?ts=1437043087000\\&sign=7318672c72cc6a1991cf3817537900e3> ，访问请求到合法的m3u8文件。如下图所示：

![image009](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-7b5ded726f92b8370ae7820b945480c29cf3c973%2Fimage009.png?alt=media)

接下来，从合法的m3u8文件中获取到合法的key地址 <http://hls.videocc.net/e2e84a7383/7/e2e84a738354402a52ce81aeab4e3067\\_1.key?ts=1437043087000\\&sign=9cc24d16d03623e74041e3a757dffa65> ，访问请求到合法的key文件，返回200。如下图所示：

![image011](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-c10f63022fb3cca8052a01cf793f96bff03a0cfb%2Fimage011.png?alt=media)

由于在“web授权”的情况下，key文件的生存时间为5分钟。5分钟过后，则之前的key文件失效，访问原来的key文件则会返回400错误。如下图所示：

![image013](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-0941111cb6f765280ee45b31c05b67d956453bdd%2Fimage013.png?alt=media)
