소스 검색

完成付款,套餐,回放列表,等新ui

chenjunkai 6 년 전
부모
커밋
eb5dd0291b
6개의 변경된 파일85개의 추가작업 그리고 20개의 파일을 삭제
  1. 24 4
      Ansjer/test/osssigput.py
  2. 0 2
      Ansjer/urls.py
  3. 23 13
      Controller/CloudVod.py
  4. 35 0
      Object/OssObject.py
  5. 2 0
      Object/ResponseObject.py
  6. 1 1
      templates/hlsvod.html

+ 24 - 4
Ansjer/test/osssigput.py

@@ -19,8 +19,14 @@ from aliyunsdkcore import client
 from aliyunsdksts.request.v20150401 import AssumeRoleRequest
 import json
 import oss2
+import base64
 
-tokenss = {"AccessKeyId": "STS.NKWBmw8LKBYQnmZDqmp6fVZu5", "AccessKeySecret": "CwZaTXR9RgoifZ346taCHZNFDS7vyTBesYUMCqavbpqt", "SecurityToken": "CAIS9wJ1q6Ft5B2yfSjIr4jiCdfD1ZNq9Zu6bEvroHE4fLlKuZ/e1zz2IHFIf3NhAe0bv/kzm2lX7/YYlr1dd6RhYRzkSJcrsaYMoTycOtOYkpRwISDnGNn3d1KIAjvXgeV9CoeQFaF0E5XAQlTAkTAJkNmeXD6+XlujHISUgJp8FLo+VRW5ajw0TbUzIRB5+vcHKVzbN/umLnyShXHLXmZlvgdghER166m03re7iHzkgUb91/UeqqnoP5GgdLMMBppkVMqv1+EELciY2SVLuR9R7/U03u4W8jPAo92DBFUIpDu6CM7wov1KcFQmVPNqJJMd9aHV0uN/trCU1f6zqXdsJchZXz7SX5vapMLPA7GSMcsjfrvaIwa0sLfWbMGz6Vh7JytGa0UTK4YDUiYhUUV3FmuFe/X7pA6WO1uZJvLbgP1s4/1c1E71+NeGHV+LToiC3DwQUp1GNBJ0bERHhTG8I/JaLFUTKgM9HdiOUZ50dwtODyh1OMgSjkYagAF39YUtK1VA3HEI+mWN4ERcp/E96cl6GR9nwh1nzVr8fj3U3WXTxjyXzK4i+hWWZObx7zC46yj2l/yP2kfjLYe8pevm7rKms5WB3BmmB47AeNfIQs3dw/CZJeBmGF8zmCYyezUSZNlKYeQcyHtKntNW2fIfshoQ+4iCxqp5QnPl1g==", "Expiration": "2018-12-06T03:08:36Z", "expire": "3600", "endpoint": "oss-cn-shenzhen.aliyuncs.com", "bucket_name": "cloudvod1", "arn": "acs:ram::1901342792446414:role/stsoss/FTSLL8HM437Z38WU111A", "code": 0, "storage": "FTSLL8HM437Z38WU111A/vod4/", "ip": "192.168.136.40"}
+
+tokenss = {"AccessKeyId": "STS.NHxxqYRJFeeZJcNsD3u6i9t61",
+           "AccessKeySecret": "iAnPvLNruXs2ZQxURiuhGwWC2kwv94QhmepZcQuwsWc",
+           "SecurityToken": "CAIS0wJ1q6Ft5B2yfSjIr4vNM8vtv5Vn0qexSEX/l0RmeblF1rGd0zz2IHFIf3NhAe0bv/kzm2lX7/YYlqN4S5ZDR1HCbsJxtk7Uf9wwJ9ivgde8yJBZoljMewHKedGSvqL7Z+H+U6mMGJOEYEzFkSle2KbzcS7YMXWuLZyOj+wuDLEQRRLqVSdaI91UKwB+yrcdLmCDGfupPwLnpWDSAUF0wFce71ly8qOi2MaRxwPDhVnhsI8vqp/2P4KvYrsdXuh2WMzn2/dtJOiTknxb7x9X+LlxgPUDu02D3LC8G3Bd7w+LKPGultRkN11CYbUgEKNltIqF95oh4LSVzd+ojU8QYqcMA3j9PNnxmJKfRLn2Z4xlKeinYij3v4rRZsWvgWQNemkGMQ5GQd0lJ0JrBAYkIjOgcf77owqbOlr+GvXZj/hpiMov1Tvz4cGNPEOf5T4EVOPY4vQagAE6AcP5nsFSY2fDHKLn25q8PiTjO5LuHOJV6NwJ6jG8RjXu0/5qS1gmzQeThhUHkfErNnuTWbu53bS0HZ9bPEus7AoS9a0+4PsfEVJcVPAzqXQt2o7IgEPQXPB0/YD8pkNip+geoNPTqYRpbmD8Xc6PG65sTLPoevyDlWhp8z3noQ==",
+           "Expiration": "2018-12-10T07:16:46Z", "expire": "3600", "endpoint": "oss-cn-shenzhen.aliyuncs.com",
+           "bucket_name": "cloudvod1", "arn": "acs:ram::1901342792446414:role/stsoss/chanjunkai"}
 # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
 
 # 使用临时token中的认证信息初始化StsAuth实例。
@@ -28,15 +34,29 @@ auth = oss2.StsAuth(tokenss['AccessKeyId'],
                     tokenss['AccessKeySecret'],
                     tokenss['SecurityToken'])
 print(auth)
+''''''
+callback_dict = {}
+callback_dict['callbackUrl'] = 'http://www.dvema.com:3000/?id=1234&xxx=3423'
+# 设置回调请求消息头中Host的值, 如oss-cn-hangzhou.aliyuncs.com。
+callback_dict['callbackHost'] = 'oss-cn-shenzhen.aliyuncs.com'
+# 设置发起回调时请求body的值。
+callback_dict['callbackBody'] = 'filename=${object}&size=${size}&mimeType=${mimeType}'
+# 设置发起回调请求的Content-Type。
+callback_dict['callbackBodyType'] = 'application/x-www-form-urlencoded'
+# 回调参数是Json格式,并且需要Base64编码。
+callback_param = json.dumps(callback_dict).strip()
+base64_callback_body = oss2.utils.b64encode_as_string(callback_param)
+# 回调参数编码后放在Header中发送给OSS。
+headers = {'x-oss-callback': base64_callback_body}
+''''''
 # exit()
 # 使用StsAuth实例初始化存储空间。
 bucket = oss2.Bucket(auth, tokenss['endpoint'], tokenss['bucket_name'])
-
 # # 上传一个字符串。
 # bucket.delete_object('a-3.txt')
 # exit()
 
-bucket.put_object('FTSLL8HM437Z38WU111A/vod4/20181206/9544060203/3224060223.m3u8', b'hello world')
+bucket.put_object('sdf.txt', b'dsafdasfas',headers)
 exit()
-res = bucket.get_object('object-name.txt')
+res = bucket.get_object('1234.txt')
 print(res.read())

+ 0 - 2
Ansjer/urls.py

@@ -115,8 +115,6 @@ urlpatterns = [
     url(r'^order/(?P<operation>.*)$', OrderContrller.OrderView.as_view()),
 
     # 新的设备接口
-
-    # 测试专用api
     path('Test', Test.Test.as_view()),
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),

+ 23 - 13
Controller/CloudVod.py

@@ -24,6 +24,7 @@ from django.utils import timezone
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
+import urllib
 
 from Ansjer.config import OSS_BUCKET_ENDPOINT, OSS_BUCKET_VOD_LIST, OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, \
     OSS_REGION_ID, OSS_ROLE_ARN, SERVER_DOMAIN
@@ -103,7 +104,7 @@ class CloudVodView(View):
         # call_sub_url = "{SERVER_DOMAIN}cloudVod/payExecute?orderID={orderID}".format(SERVER_DOMAIN=SERVER_DOMAIN,orderID=orderID)
         call_sub_url = "http://192.168.136.40:8077/cloudVod/payExecute?orderID={orderID}".format(
             SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
-        call_clc_url = "http://localhost:3000/"
+        call_clc_url = "http://192.168.136.40:8077/cloudVod/order/cancle"
         paypalrestsdk.configure({
             "mode": "sandbox",  # sandbox or live
             "client_id": "AfnfDqezODOoWGS-W2Itu-Zl1ay1R95IsGlMqPghPA3KGhkPndNMnQT0bdEewvSv92XAFIfLiinmyhBL",
@@ -115,15 +116,8 @@ class CloudVodView(View):
             "redirect_urls": {"return_url": call_sub_url, "cancel_url": call_clc_url},
             "transactions": [{
                 "item_list": {
-                    "items": [{
-                        "name": "Cloud video",
-                        "sku": "1",
-                        "price": price,
-                        "currency": "USD",
-                        "quantity": 1}]},
-                "amount": {
-                    "total": price,
-                    "currency": "USD"},
+                    "items": [{"name": "Cloud video", "sku": "1", "price": price, "currency": "USD", "quantity": 1}]},
+                "amount": {"total": price, "currency": "USD"},
                 "description": "7 days mobile detection storage event 1 month charge"
             }]})
 
@@ -238,7 +232,11 @@ class CloudVodView(View):
     def do_get_hls_list(self, request_dict, userID, response):
         did = request_dict.get('did', None)
         channel = request_dict.get('channel', None)
-        if not did or not channel:
+        # 目录开始第一个
+        # marker = request_dict.get('marker', '')
+        daytime = request_dict.get('daytime', None)
+        hour = request_dict.get('hour', None)
+        if not did or not channel or not daytime:
             return response.json(444, 'did,channel')
         qs = Device_Info.objects.filter(userID_id=userID, id=did).values("UID")
         if not qs.exists():
@@ -252,11 +250,23 @@ class CloudVodView(View):
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         bucket = oss2.Bucket(auth, OSS_BUCKET_ENDPOINT, bucket_name)
         vod_play_list = []
-        for obj in oss2.ObjectIterator(bucket=bucket, prefix='FTSLL8HM437Z38WU111A/vod4/', delimiter='/', max_keys=1):
+        prefix = '{uid}/vod{channel}/{daytime}/'.format(uid=uid, channel=channel, daytime=daytime, hour=hour)
+
+        for obj in oss2.ObjectIterator(bucket=bucket, prefix=prefix, delimiter='/', max_keys=2):
             # 通过is_prefix方法判断obj是否为文件夹。
             if obj.is_prefix():  # 文件夹
                 print('directory: ' + obj.key)
-                vod_play_list.append(obj.key)
+                ptime = obj.key.split('/')[3]
+                url = bucket.sign_url('GET', '{prefix}{name}.m3u8'.format(prefix=obj.key, name=ptime), 60 * 60,params={'x-oss-process': 'hls/sign'})
+                # url = bucket.sign_url('GET', obj.key, 60 * 60,params={'x-oss-process': 'hls/sign'})
+                urllst = url.split('?')
+                url_start = urllib.parse.unquote(urllst[0])
+                url_end = urllst[1]
+                vod_play_url = '{url_start}?{url_end}'.format(url_start=url_start, url_end=url_end)
+                vod_play_list.append({
+                    'name': ptime,
+                    'sign_url': vod_play_url
+                })
             else:  # 文件
                 pass
                 print('file: ' + obj.key)

+ 35 - 0
Object/OssObject.py

@@ -0,0 +1,35 @@
+#!/usr/bin/env python3  
+# -*- coding: utf-8 -*-  
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: AnsjerFormal
+@software: PyCharm
+@DATE: 2018/12/10 11:42
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: OssObject.py
+@Contact: chanjunkai@163.com
+"""
+import oss2
+from Ansjer.config import OSS_BUCKET_ENDPOINT, OSS_BUCKET_VOD_LIST, OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, \
+    OSS_REGION_ID, OSS_ROLE_ARN, SERVER_DOMAIN
+
+
+class OssObject:
+
+    def __init__(self):
+        self.auth = oss2.Auth(OSS_STS_ACCESS_KEY,OSS_STS_ACCESS_SECRET)
+
+    def getObjectList(self,prefix,bucket_name):
+        bucket = oss2.Bucket(self.auth, OSS_BUCKET_ENDPOINT, bucket_name)
+        vod_play_list = []
+        # for obj in oss2.ObjectIterator(bucket=bucket, prefix=prefix, delimiter='/', max_keys=2, marker=marker):
+        for obj in oss2.ObjectIterator(bucket=bucket, prefix=prefix, delimiter='/'):
+            # 通过is_prefix方法判断obj是否为文件夹。
+            if obj.is_prefix():  # 文件夹
+                print('directory: ' + obj.key)
+                vod_play_list.append(obj.key)
+            else:  # 文件
+                print('file: ' + obj.key)
+        return vod_play_list

+ 2 - 0
Object/ResponseObject.py

@@ -33,6 +33,7 @@ class ResponseObject(object):
             105: 'Email format error!',
             106: 'Create User Error',
             107: 'The username not conform to the rules!',
+            108: 'Email format error!',
             109: 'The password not conform to the rules!',
             110: 'user is not activated',
             111: 'Error password',
@@ -123,6 +124,7 @@ class ResponseObject(object):
             105: '邮箱格式错误!',
             106: '创建用户错误',
             107: '用户名格式不符合!',
+            108: '邮箱格式错误!',
             109: '密码格式不符合!',
             110: '用户未激活!',
             111: '您输入的密码不正确!',

+ 1 - 1
templates/hlsvod.html

@@ -10,7 +10,7 @@
 <!-- <script src="https://cdn.jsdelivr.net/npm/hls.js@canary"></script> -->
 <video id="video"></video>
 <script>
-    var url = 'http://cloudvod1.oss-cn-shenzhen.aliyuncs.com/vod/1543902584/1543902584.m3u8?x-oss-process=hls%2Fsign&OSSAccessKeyId=LTAIyMkGfEdogyL9&Expires=1544158222&Signature=6FdVFz2RFmI2k7ufOJ9hdPtNSR8%3D'
+    var url = 'http://cloudvod1.oss-cn-shenzhen.aliyuncs.com/FTSLL8HM437Z38WU111A/vod4/2018121001/1543902118/1543902118.m3u8?x-oss-process=hls%2Fsign&OSSAccessKeyId=LTAIyMkGfEdogyL9&Expires=1544428388&Signature=9pn0fhEl%2FBnpSgVYSmjiQAwwtc4%3D'
     var video = document.getElementById('video');
     if (Hls.isSupported()) {
         var hls = new Hls();