当前位置:   article > 正文

保利威(polyv)加密视频的使用详解---python(基于drf/vue)

polyv

0. 注册账号,新人会免费用7天

polyv官网地址icon-default.png?t=M0H8http://www.polyv.net/vod/

一. 根据图片步骤,创建视频分类并上传测试视频

a. 

  b.

 c.

 d. 

 二. 参数介绍

官方文档icon-default.png?t=M0H8https://dev.polyv.net/2019/videoproduct/v-api/v-api-play/create-playsafe-token/

1. 默认生成的参数,我们客户端视频加密播放需要的

 

2. 请求token携带的参数

3. 视频的vid 我们需要传送到后端必填参数之一

 

4. 响应数据(我们只要token即可)

  1. {
  2. "code": 200,
  3. "status": "success",
  4. "message": "",
  5. "data": {
  6. "token": "973d7731803940a1b14fdc93941f493c",
  7. "userId": "e6b23c6f51",
  8. "videoId": "e6b23c6f51c4b1cb9f0302a92ed42440_e",
  9. "viewerIp": "127.0.0.1",
  10. "viewerId": "abcd1234",
  11. "viewerName": null,
  12. "extraParams": null,
  13. "ttl": 600000,
  14. "createdTime": 1552446282044,
  15. "expiredTime": 1552446882044,
  16. "iswxa": 0,
  17. "disposable": false
  18. }
  19. }

三. web视频加密播放

1. 后端

a. 创建一个utils.py

  1. # -*- coding:utf-8 -*-
  2. import time
  3. import requests
  4. # pip install requests
  5. import hashlib
  6. class PolyvPlayer(object):
  7. def __init__(self, userId, secretkey, tokenUrl):
  8. """初始化,提供用户id和秘钥"""
  9. self.userId = userId
  10. self.secretKey = secretkey
  11. self.tokenUrl = tokenUrl
  12. def tomd5(self, value):
  13. """取md5值"""
  14. return hashlib.md5(value.encode('utf-8')).hexdigest()
  15. # 获取视频数据的token
  16. def get_video_token(self, videoId, viewerIp, viewerId=None, viewerName='', extraParams='HTML5'):
  17. """
  18. :param videoId: 视频id
  19. :param viewerId: 看视频用户id
  20. :param viewerIp: 看视频用户ip
  21. :param viewerName: 看视频用户昵称
  22. :param extraParams: 扩展参数
  23. :param sign: 加密的sign
  24. :return: 返回点播的视频的token
  25. """
  26. ts = int(time.time() * 1000) # 时间戳
  27. plain = {
  28. "userId": self.userId,
  29. 'videoId': videoId,
  30. 'ts': ts,
  31. 'viewerId': viewerId,
  32. 'viewerIp': viewerIp,
  33. 'viewerName': viewerName,
  34. 'extraParams': extraParams
  35. }
  36. # 按照ASCKII升序 key + value + key + value... + value 拼接
  37. plain_sorted = {}
  38. key_temp = sorted(plain)
  39. for key in key_temp:
  40. plain_sorted[key] = plain[key]
  41. print(plain_sorted)
  42. plain_string = ''
  43. for k, v in plain_sorted.items():
  44. plain_string += str(k) + str(v)
  45. print(plain_string)
  46. # 首尾拼接上秘钥
  47. sign_data = self.secretKey + plain_string + self.secretKey
  48. # 取sign_data的md5的大写
  49. sign = self.tomd5(sign_data).upper()
  50. # 新的带有sign的字典
  51. plain.update({'sign': sign})
  52. # python 提供的发送http请求的模块
  53. result = requests.post(
  54. url=self.tokenUrl,
  55. headers={"Content-type": "application/x-www-form-urlencoded"},
  56. data=plain
  57. ).json()
  58. token = {} if isinstance(result, str) else result.get("data", {})
  59. return token

b. url.py

    path('play/video/', views.PlayVideoView.as_view()),

c. settings的配置(配上自己的参数即可)

  1. # 保利威视频加密服务
  2. POLYV_CONFIG = {
  3. "userId": "xxx",
  4. "secretkey": "xxx",
  5. "tokenUrl": "https://hls.videocc.net/service/v1/token",
  6. }

d. view(直接用即可,封装好了)

  1. from rest_framework.views import APIView
  2. from django.conf import settings
  3. from lyapi.libs.paly.paly_token import PolyvPlayer
  4. from rest_framework.response import Response
  5. class PlayVideoView(APIView):
  6. permission_classes = [IsAuthenticated, ]
  7. def get(self, request):
  8. userId = settings.POLYV_CONFIG.get('userId')
  9. secretkey = settings.POLYV_CONFIG.get('secretkey')
  10. tokenUrl = settings.POLYV_CONFIG.get('tokenUrl')
  11. polyv_player_obj = PolyvPlayer(userId=userId, secretkey=secretkey, tokenUrl=tokenUrl)
  12. videoId = request.GET.get('vid') # '8ef6c2d3be1402950288a4d3798644d3_8'
  13. print(videoId)
  14. viewerIp = request.META.get('REMOTE_ADDR')
  15. viewerId = request.user.id
  16. viewerName = request.user.username
  17. token_data = polyv_player_obj.get_video_token(videoId, viewerIp, viewerId, viewerName)
  18. token = token_data.get('token')
  19. # print(token)
  20. return Response({'token_data': token})

2. 前端

a. 在index.html中导入js

  1. <!-- 1 -->
  2. <script src="//player.polyv.net/script/player.js"></script>

b. 创建一个PlayVideo.vue

  1. <template>
  2. <!-- 2 -->
  3. <div class="player">
  4. <div id="player"></div>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name: "PlayVideo",
  10. data() {
  11. return {}
  12. },
  13. methods: {},
  14. // created 初始化,放置的是ajax等操作/获取数据的代码,不涉及操作页面
  15. // mounted 初始化,放置的是关于操作页面的初始化js代码
  16. mounted() {
  17. // 1. 到数据库中查询用户购买的课程,是否有当前章节
  18. // 2. 到数据库中查询当前用户购买的课程是否在有效期内
  19. // 3. 播放页面显示课程章节和课时的播放列表
  20. // 4. 通过vid播放不同的课时视频
  21. // 以上4个功能自行完成
  22. let vid = this.$route.params.vid; // this.$route.params.vid; 路由参数传递过来 "8ef6c2d3be1402950288a4d3798644d3_8"
  23. let self = this;
  24. var player = polyvPlayer({
  25. wrap: '#player',
  26. width: document.documentElement.clientWidth - 260, // 页面宽度
  27. height: document.documentElement.clientHeight, // 页面高度
  28. forceH5: true,
  29. vid: vid,
  30. // 视频加密播放的配置
  31. playsafe: function (vid, next) { // 向后端发送请求获取加密的token
  32. // 配置获取自己token的路径
  33. self.$axios.get(`${self.$settings.host}/order/play/video/`, {
  34. params: {
  35. vid: vid,
  36. },
  37. })
  38. .then(function (response) {
  39. // 获取播放视频的token令牌
  40. next(response.data.token_data);
  41. })
  42. }
  43. });
  44. },
  45. computed: {}
  46. }
  47. </script>
  48. <style scoped>
  49. </style>

c. index.js中配置路由

  1. {
  2. path: '/play/video/:vid/', // 通过$route.params.vid获取参数
  3. name: 'PlayVideo',
  4. component: PlayVideo
  5. },

d. 生成一个播放按钮

  1. <button class="try">
  2. <router-link :to="'/play/video/' + '自己的vid' + '/' ">立即试学</router-link>
  3. </button>

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

闽ICP备14008679号