生成播放签名
This commit is contained in:
parent
e08ffe580e
commit
531a44daa1
|
|
@ -8,6 +8,11 @@ class VideoSerializer(serializers.ModelSerializer):
|
||||||
model = Video
|
model = Video
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
class VideoListDetailSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Video
|
||||||
|
exclude = ['mediaurl']
|
||||||
|
|
||||||
class VideoSimpleSerializer(serializers.ModelSerializer):
|
class VideoSimpleSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Video
|
model = Video
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from django.db.models import base
|
from django.db.models import base
|
||||||
from django.urls import path, include
|
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
|
from rest_framework import routers
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
|
|
@ -10,4 +10,5 @@ urlpatterns = [
|
||||||
path('', include(router.urls)),
|
path('', include(router.urls)),
|
||||||
path('video/<int:id>/myview/', MyViewRecordAPIView.as_view()),
|
path('video/<int:id>/myview/', MyViewRecordAPIView.as_view()),
|
||||||
path('signature/', SignatureAPIView.as_view()),
|
path('signature/', SignatureAPIView.as_view()),
|
||||||
|
path('playcode/<str:fileId>/', PlayCodeAPIView.as_view())
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from time import timezone
|
from time import timezone
|
||||||
from rest_framework.mixins import ListModelMixin
|
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 apps.vod.models import Video, ViewRecord
|
||||||
from django.shortcuts import render
|
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.views import APIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
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.permissions import IsAuthenticated
|
||||||
from rest_framework.status import HTTP_400_BAD_REQUEST
|
from rest_framework.status import HTTP_400_BAD_REQUEST
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from rest_framework.exceptions import ParseError
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
class ClassView(APIView):
|
class ClassView(APIView):
|
||||||
|
|
@ -47,6 +48,10 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
|
||||||
serializer_class = VideoSerializer
|
serializer_class = VideoSerializer
|
||||||
ordering = ['-views', '-create_time']
|
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'})
|
@action(methods=['get'], detail=False, perms_map={'get':'video_view'})
|
||||||
def myview(self, request, *args, **kwargs):
|
def myview(self, request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
|
@ -61,6 +66,7 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class VRecordViewSet(ListModelMixin, GenericViewSet):
|
class VRecordViewSet(ListModelMixin, GenericViewSet):
|
||||||
perms_map = {'get':'viewrecord_view'}
|
perms_map = {'get':'viewrecord_view'}
|
||||||
queryset = ViewRecord.objects.all()
|
queryset = ViewRecord.objects.all()
|
||||||
|
|
@ -116,3 +122,17 @@ class SignatureAPIView(APIView):
|
||||||
获取上传签名
|
获取上传签名
|
||||||
"""
|
"""
|
||||||
return Response(getSignature(procedure=request.query_params.get('procedure', None)))
|
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
|
import base64
|
||||||
|
from dataclasses import field
|
||||||
import hashlib
|
import hashlib
|
||||||
import hmac
|
import hmac
|
||||||
import json
|
import json
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
import jwt
|
||||||
|
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.status import HTTP_400_BAD_REQUEST
|
from rest_framework.status import HTTP_400_BAD_REQUEST
|
||||||
|
|
@ -16,6 +18,8 @@ from tencentcloud.vod.v20180717 import models, vod_client
|
||||||
|
|
||||||
SecretId = 'AKIDhDTaV9WeXAXcQxEH4buwg9LGvJQHr9Au'
|
SecretId = 'AKIDhDTaV9WeXAXcQxEH4buwg9LGvJQHr9Au'
|
||||||
SecretKey = 'VjfKjrhGYrte8MIxMUMxHL9h39zYqrc6'
|
SecretKey = 'VjfKjrhGYrte8MIxMUMxHL9h39zYqrc6'
|
||||||
|
appId = '1253484223'
|
||||||
|
referKey = 'ntXQi6eDkgUXnvvsiAtm'
|
||||||
|
|
||||||
# 初始化点播client
|
# 初始化点播client
|
||||||
def initClient():
|
def initClient():
|
||||||
|
|
@ -71,3 +75,31 @@ def getSignature(procedure=None):
|
||||||
Signature = bytes(Sha1) + bytes(Original, 'utf-8')
|
Signature = bytes(Sha1) + bytes(Original, 'utf-8')
|
||||||
Signature2 = base64.b64encode(Signature)
|
Signature2 = base64.b64encode(Signature)
|
||||||
return str(Signature2, 'UTF-8')
|
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