| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 | 
							- #!/usr/bin/env python3  
 
- # -*- coding: utf-8 -*-  
 
- """
 
- @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
 
- @AUTHOR: ASJRD018
 
- @NAME: Ansjer
 
- @software: PyCharm
 
- @DATE: 2018/5/30 17:53
 
- @Version: python3.6
 
- @MODIFY DECORD:ansjer dev
 
- @file: HlsManage.py
 
- @Contact: chanjunkai@163.com
 
- """
 
- from django.views.generic.base import View
 
- from django.utils.decorators import method_decorator
 
- from django.views.decorators.csrf import csrf_exempt
 
- from Service.ModelService import ModelService
 
- from Model.models import Device_Meal
 
- from Object.AWS.S3ClassObject import S3ClassObject
 
- from Object.AWS.CloudfrontSignUrl import CloudfrontSignUrl
 
- from Object.encryHlsVodUrl import getSignUrl
 
- from Object.m3u8generate import PlaylistGenerator
 
- from Object.TokenObject import TokenObject
 
- from Object.ResponseObject import ResponseObject
 
- from django.http import HttpResponse
 
- '''
 
- 设备端
 
- http://13.56.215.252:82/HlsManager?operation=signPutObj&key=555666.mp4&uid=L59KVYDAEPHR1T6M111A&channel=0
 
- http://13.56.215.252:82/HlsManager?operation=signPostObj&key=ppp.mp4&uid=L59KVYDAEPHR1T6M111A&channel=0
 
- 移动端
 
- http://13.56.215.252:82/HlsManager?operation=getHlsVod&uid=L59KVYDAEPHR1T6M111A&channel=0&token=test&key=234234234.ts
 
- http://13.56.215.252:82/HlsManager?operation=getAllTs&uid=L59KVYDAEPHR1T6M111A&channel=0&token=test
 
- http://13.56.215.252:82/HlsManager?operation=getVodUrl&uid=L59KVYDAEPHR1T6M111A&channel=0&token=test&key=121212.mp4
 
- '''
 
- class HlsManage(View):
 
-     @method_decorator(csrf_exempt)
 
-     def dispatch(self, *args, **kwargs):
 
-         return super(HlsManage, self).dispatch(*args, **kwargs)
 
-     def get(self, request, *args, **kwargs):
 
-         request.encoding = 'utf-8'
 
-         return self.validation(request_dict=request.GET)
 
-     def post(self, request, *args, **kwargs):
 
-         request.encoding = 'utf-8'
 
-         return self.validation(request_dict=request.POST)
 
-     def validation(self, request_dict, *args, **kwargs):
 
-         response = ResponseObject()
 
-         operation = request_dict.get('operation', None)
 
-         if operation == 'signPutObj':
 
-             return self.sign_put_obj(request_dict,response)
 
-         elif operation == 'signPostObj':
 
-             return self.sign_post_obj(request_dict,response)
 
-         elif operation == 'getHlsVod':
 
-             return self.get_hls_vod(request_dict,response)
 
-         elif operation == 'getAllTs':
 
-             return self.get_all_ts(request_dict,response)
 
-         elif operation == 'getVodUrl':
 
-             return self.get_vod_url(request_dict,response)
 
-         else:
 
-             return response.json(444, 'operation')
 
-     def sign_put_obj(self, request_dict,response):
 
-         key = request_dict.get('key', None)
 
-         uid = request_dict.get('uid', None)
 
-         channel = request_dict.get('channel', None)
 
-         if key is not None and uid is not None and channel is not None:
 
-             device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
 
-             if device_meal_queryset.exists():
 
-                 path = uid + '_' + channel + '/' + key
 
-                 meal_id = device_meal_queryset[0].rank_id
 
-                 bucket_meal={
 
-                     1:'ansjer.meal.1',# 7
 
-                     2:'ansjer.meal.2',# 30
 
-                     # 3:'ansjer.meal.3',
 
-                 }
 
-                 s3 = S3ClassObject()
 
-                 sign_url = s3.sign_put_object(key=path, bucket_meal=bucket_meal[meal_id])
 
-                 if sign_url is not False:
 
-                     return (0, {'url': sign_url})
 
-                 else:
 
-                     return response.json(48)
 
-             else:
 
-                 return response.json(444)
 
-         else:
 
-             return response.json(444,'key, uid, channel')
 
-     def sign_post_obj(self, request_dict,response):
 
-         key = request_dict.get('key', None)
 
-         uid = request_dict.get('uid', None)
 
-         channel = request_dict.get('channel', None)
 
-         if key is not None and uid is not None and channel is not None:
 
-             device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
 
-             if device_meal_queryset.exists():
 
-                 path = uid + '_' + channel + '/' + key
 
-                 meal_id = device_meal_queryset[0].rank_id
 
-                 bucket_meal = {
 
-                     1: 'ansjer.meal.1',  # 7
 
-                     2: 'ansjer.meal.2',  # 30
 
-                     # 3:'ansjer.meal.3',
 
-                 }
 
-                 s3 = S3ClassObject()
 
-                 data = s3.sign_post_object(key=path, bucket_meal=bucket_meal[meal_id])
 
-                 if data is not False:
 
-                     return response.json(0, {'url': data})
 
-                 else:
 
-                     return response.json(48)
 
-             else:
 
-                 return response.json(444)
 
-         else:
 
-             return response.json(444,'key, uid, channel')
 
-     def get_all_ts(self, request_dict,response):
 
-         token = request_dict.get('token', None)
 
-         if token is not None:
 
-             tko = TokenObject(token)
 
-             tko.valid()
 
-             response.lang = tko.lang
 
-             if tko.code == 0:
 
-                 userID = tko.userID
 
-                 if userID is not None:
 
-                     uid = request_dict.get('uid', None)
 
-                     channel = request_dict.get('channel', None)
 
-                     if uid is not None and channel is not None:
 
-                         own_permission = ModelService.check_permission(userID=userID, permID=30)
 
-                         own_device = ModelService.check_own_device(userID=userID, UID=uid)
 
-                         if own_permission is True or own_device is True:
 
-                             device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
 
-                             if device_meal_queryset.exists():
 
-                                 meal_id = device_meal_queryset[0].rank_id
 
-                                 bucket_meal = {
 
-                                     1: 'ansjer.meal.1',  # 7
 
-                                     2: 'ansjer.meal.2',  # 30
 
-                                 }
 
-                                 s3 = S3ClassObject()
 
-                                 data = s3.get_prefix_obj(prefix=uid + '_' + channel + '/', bucket=bucket_meal[meal_id])
 
-                                 # return response.json(0, {'files': data,'bk':bucket_meal[meal_id]})
 
-                                 return response.json(0, {'files': data})
 
-                             else:
 
-                                 return response.json(444)
 
-                         else:
 
-                             return response.json(404)
 
-                     else:
 
-                         return response.json(444,'uid,channel')
 
-                 else:
 
-                     return response.json(309)
 
-             else:
 
-                 return response.json(tko.code)
 
-         else:
 
-             return response.json(309)
 
-     def get_hls_vod(self, request_dict,response):
 
-         token = request_dict.get('token', None)
 
-         if token is not None:
 
-             tko = TokenObject(token)
 
-             tko.valid()
 
-             response.lang = tko.lang
 
-             if tko.code == 0:
 
-                 userID = tko.userID
 
-                 
 
-                 if userID is not None:
 
-                     key = request_dict.get('key', None)
 
-                     uid = request_dict.get('uid', None)
 
-                     channel = request_dict.get('channel', None)
 
-                     own_device = ModelService.check_own_device(userID=userID, UID=uid)
 
-                     if own_device is True:
 
-                         device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
 
-                         if device_meal_queryset.exists():
 
-                             meal_id = device_meal_queryset[0].rank_id
 
-                             cf_domain = {
 
-                                 1: 'http://d3om3d8c0l14oc.cloudfront.net/',
 
-                                 2: 'http://d4neaolnu8h83.cloudfront.net/',
 
-                             }
 
-                             url = cf_domain[meal_id] + uid + '_' + channel + '/' + key
 
-                             sign_url = CloudfrontSignUrl(url=url)
 
-                             playlist_entries = [
 
-                                 {
 
-                                     'name': sign_url,
 
-                                     'duration': '60',
 
-                                 }
 
-                             ]
 
-                             playlist = PlaylistGenerator(playlist_entries).generate()
 
-                             response = HttpResponse(content_type='application/force-download', content=playlist)
 
-                             response['Content-Disposition'] = 'attachment; filename=' + key + '.m3u8'
 
-                             # response['X-Sendfile'] = playlist
 
-                             # return response.json(404)
 
-                             return response
 
-                             # return HttpResponse(playlist)
 
-                         else:
 
-                             return response.json(0)
 
-                     else:
 
-                         return response.json(15)
 
-                 else:
 
-                     return response.json(309)
 
-             else:
 
-                 return response.json(tko.code)
 
-         else:
 
-             return response.json(309)
 
-         
 
-     # mp4
 
-     def get_vod_url(self, request_dict,response):
 
-         token = request_dict.get('token', None)
 
-         if token is not None:
 
-             tko = TokenObject(token)
 
-             tko.valid()
 
-             response.lang = tko.lang
 
-             if tko.code == 0:
 
-                 userID = tko.userID
 
-                 key = request_dict.get('key', None)
 
-                 uid = request_dict.get('uid', None)
 
-                 channel = request_dict.get('channel', None)
 
-                 if userID is not None:
 
-                     own_device = ModelService.check_own_device(userID=userID, UID=uid)
 
-                     if own_device is True:
 
-                         device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
 
-                         if device_meal_queryset.exists():
 
-                             meal_id = device_meal_queryset[0].rank_id
 
-                             bucket_meal = {
 
-                                 1: 'ansjer.meal.1',  # 7
 
-                                 2: 'ansjer.meal.2',  # 30
 
-                             }
 
-                             bk = bucket_meal[meal_id]
 
-                             path = '/'+bk+'/'+uid+'_'+channel+'/'+key
 
-                             signUrl = getSignUrl(path=path)
 
-                             return response.json(0,{'signUrl':signUrl})
 
-                         else:
 
-                             return response.json(0)
 
-                     else:
 
-                         return response.json(15)
 
-                 else:
 
-                     return response.json(309)
 
-             else:
 
-                 return response.json(tko.code)
 
-         else:
 
-             return response.json(309)
 
 
  |