peng 2 жил өмнө
parent
commit
5df90fe814

+ 23 - 0
Controller/AWS/KVSController.py

@@ -10,6 +10,7 @@ from django.views import View
 
 from Model.models import KVS
 from Object.AWS.AmazonKVSUtil import AmazonKVSObject
+from Object.AWS.AmazonKVAMUtil import AmazonKVAMObject
 from Object.AWS.AmazonKinesisVideoUtil import AmazonKinesisVideoObject
 from Object.ResponseObject import ResponseObject
 from Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME
@@ -31,6 +32,8 @@ class KVSView(View):
             return self.create_media(request_dict, response)
         elif operation == 'update-data-retention':  # 修改视频流数据保留时间
             return self.update_data_retention(request_dict, response)
+        elif operation == 'get-hls-midea':  # 修改视频流数据保留时间
+            return self.get_hls_midea_url(request_dict, response)
         else:
             return response.json(404)
 
@@ -99,3 +102,23 @@ class KVSView(View):
         except Exception as e:
             print(e)
             return response.json(500)
+
+    @staticmethod
+    def get_hls_midea_url(request_dict, response):
+        serial_number = request_dict.get('serial_number', None)
+        try:
+            kvs_qs = KVS.objects.filter(stream_name=serial_number)
+            if not kvs_qs.exists():
+                return response.json(174)
+            kinesis_video_obj = AmazonKVAMObject(
+                aws_access_key_id=ACCESS_KEY_ID,
+                secret_access_key=SECRET_ACCESS_KEY,
+                region_name=REGION_NAME,
+                stream_name=serial_number,
+                api_name='GET_HLS_STREAMING_SESSION_URL '
+            )
+            hls_streaming_session_url = kinesis_video_obj.get_hls_streaming_session_url(serial_number)
+            return response.json(0, {"HlsStreamingSessionUrl": hls_streaming_session_url})
+        except Exception as e:
+            print(e)
+            return response.json(500)

+ 1 - 1
Model/models.py

@@ -3012,7 +3012,7 @@ class DeviceInfoSummary(models.Model):
 
 class KVS(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='主键')
-    stream_name = models.CharField(default='', max_length=9, verbose_name='视频流名称')    # 视频流名称,为序列号
+    stream_name = models.CharField(default='', max_length=128, verbose_name='视频流名称')    # 视频流名称,为序列号
     stream_arn = models.CharField(default='', max_length=128, verbose_name='视频流ARN')
     data_retention_in_hours = models.PositiveSmallIntegerField(default=0, verbose_name='数据保留时间')    # 单位: 小时
     created_time = models.IntegerField(default=0, verbose_name='创建时间')

+ 33 - 0
Object/AWS/AmazonKVAMUtil.py

@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+"""
+@Author : Rocky
+@Time : 2022/10/17 16:57
+@File :AmazonKVSUtil.py
+"""
+import boto3
+from Object.AWS.AmazonKinesisVideoUtil import AmazonKinesisVideoObject
+
+
+class AmazonKVAMObject:
+    def __init__(self, aws_access_key_id, secret_access_key, region_name, stream_name, api_name):
+        self.access_id = aws_access_key_id
+        self.access_secret = secret_access_key
+        self.region_name = region_name
+        self.kv_client_conn = AmazonKinesisVideoObject(aws_access_key_id, secret_access_key, region_name)
+        self.endpoint = self.kv_client_conn.get_data_endpoint(stream_name, api_name)
+        self.kvam_client_coon = boto3.client(
+            'kinesis-video-archived-media',
+            endpoint_url=self.endpoint,
+            aws_access_key_id=aws_access_key_id,
+            aws_secret_access_key=secret_access_key,
+            region_name=region_name
+        )
+
+    def get_hls_streaming_session_url(self, stream_name):
+        """
+        获取视频流数据保留时间
+        @param stream_name: 视频流名称
+        @return HLSStreamingSessionURL: 媒体播放器可用于检索HLS主播放列表的URL
+        """
+        return self.kvam_client_coon.get_hls_streaming_session_url(StreamName=stream_name)['HLSStreamingSessionURL']
+

+ 8 - 0
Object/AWS/AmazonKinesisVideoUtil.py

@@ -62,3 +62,11 @@ class AmazonKinesisVideoObject:
         """
         return self.client_conn.describe_stream(StreamName=stream_name)['StreamInfo']
 
+    def get_data_endpoint(self, stream_name, api_name):
+        """
+        获取指定流的终端节点以读取或写入
+        @param api_name: API名称
+        @param stream_name: 视频流名称
+        @return stream_info: 视频流信息数据
+        """
+        return self.client_conn.get_data_endpoint(StreamName=stream_name, APIName=api_name)['DataEndpoint']