生成播放签名
This commit is contained in:
parent
e08ffe580e
commit
531a44daa1
|
@ -8,6 +8,11 @@ class VideoSerializer(serializers.ModelSerializer):
|
|||
model = Video
|
||||
fields = '__all__'
|
||||
|
||||
class VideoListDetailSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Video
|
||||
exclude = ['mediaurl']
|
||||
|
||||
class VideoSimpleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Video
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import base
|
||||
from django.urls import path, include
|
||||
from .views import ClassView, SignatureAPIView, VideoView, VideoViewSet, VRecordViewSet, MyViewRecordAPIView
|
||||
from .views import ClassView, PlayCodeAPIView, SignatureAPIView, VideoView, VideoViewSet, VRecordViewSet, MyViewRecordAPIView
|
||||
from rest_framework import routers
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
|
@ -10,4 +10,5 @@ urlpatterns = [
|
|||
path('', include(router.urls)),
|
||||
path('video/<int:id>/myview/', MyViewRecordAPIView.as_view()),
|
||||
path('signature/', SignatureAPIView.as_view()),
|
||||
path('playcode/<str:fileId>/', PlayCodeAPIView.as_view())
|
||||
]
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
from datetime import timedelta
|
||||
from time import timezone
|
||||
from rest_framework.mixins import ListModelMixin
|
||||
from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoSerializer
|
||||
from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoListDetailSerializer, VideoSerializer
|
||||
from apps.vod.models import Video, ViewRecord
|
||||
from django.shortcuts import render
|
||||
from .vodclient import getAllClass, searchMedia, getSignature
|
||||
from .vodclient import getAllClass, getPlayCode, searchMedia, getSignature
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||
|
@ -14,6 +14,7 @@ from rest_framework.decorators import action, permission_classes
|
|||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.status import HTTP_400_BAD_REQUEST
|
||||
from django.utils import timezone
|
||||
from rest_framework.exceptions import ParseError
|
||||
# Create your views here.
|
||||
|
||||
class ClassView(APIView):
|
||||
|
@ -47,6 +48,10 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
|
|||
serializer_class = VideoSerializer
|
||||
ordering = ['-views', '-create_time']
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action in ['list', 'retrieve']:
|
||||
return VideoListDetailSerializer
|
||||
return super().get_serializer_class()
|
||||
@action(methods=['get'], detail=False, perms_map={'get':'video_view'})
|
||||
def myview(self, request, *args, **kwargs):
|
||||
"""
|
||||
|
@ -61,6 +66,7 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
|
|||
return Response(serializer.data)
|
||||
|
||||
|
||||
|
||||
class VRecordViewSet(ListModelMixin, GenericViewSet):
|
||||
perms_map = {'get':'viewrecord_view'}
|
||||
queryset = ViewRecord.objects.all()
|
||||
|
@ -116,3 +122,17 @@ class SignatureAPIView(APIView):
|
|||
获取上传签名
|
||||
"""
|
||||
return Response(getSignature(procedure=request.query_params.get('procedure', None)))
|
||||
|
||||
|
||||
class PlayCodeAPIView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, fileId):
|
||||
"""获取播放签名
|
||||
"""
|
||||
from .vodclient import appId
|
||||
try:
|
||||
playcode = getPlayCode(fileId)
|
||||
except:
|
||||
raise ParseError('获取签名失败')
|
||||
return Response({'psign':playcode, 'appId': appId})
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import base64
|
||||
from dataclasses import field
|
||||
import hashlib
|
||||
import hmac
|
||||
import json
|
||||
import random
|
||||
import time
|
||||
import jwt
|
||||
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.status import HTTP_400_BAD_REQUEST
|
||||
|
@ -16,6 +18,8 @@ from tencentcloud.vod.v20180717 import models, vod_client
|
|||
|
||||
SecretId = 'AKIDhDTaV9WeXAXcQxEH4buwg9LGvJQHr9Au'
|
||||
SecretKey = 'VjfKjrhGYrte8MIxMUMxHL9h39zYqrc6'
|
||||
appId = '1253484223'
|
||||
referKey = 'ntXQi6eDkgUXnvvsiAtm'
|
||||
|
||||
# 初始化点播client
|
||||
def initClient():
|
||||
|
@ -71,3 +75,31 @@ def getSignature(procedure=None):
|
|||
Signature = bytes(Sha1) + bytes(Original, 'utf-8')
|
||||
Signature2 = base64.b64encode(Signature)
|
||||
return str(Signature2, 'UTF-8')
|
||||
|
||||
def getPlayCode(fileId:str):
|
||||
currentTimeStamp = int(time.time())
|
||||
Original = {
|
||||
"appId": appId,
|
||||
"fileId": fileId,
|
||||
"currentTimeStamp": currentTimeStamp,
|
||||
"pcfg": "basicDrmPreset",
|
||||
}
|
||||
print(Original)
|
||||
return jwt.encode(Original, referKey, algorithm='HS256')
|
||||
|
||||
def startSeVideo(fileId:str):
|
||||
"""
|
||||
开始加密视频
|
||||
"""
|
||||
try:
|
||||
client = initClient()
|
||||
req = models.ProcessMediaByProcedureRequest()
|
||||
params = {
|
||||
"FileId":field,
|
||||
"ProcedureName":"myAesEncryptPreset"
|
||||
}
|
||||
req.from_json_string(json.dumps(params))
|
||||
resp = client.ProcessMediaByProcedure(req)
|
||||
return doResponse(resp)
|
||||
except TencentCloudSDKException as err:
|
||||
print(err)
|
||||
|
|
Loading…
Reference in New Issue