KVSController.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Author : Rocky
  4. @Time : 2022/10/18 9:48
  5. @File :KVSController.py
  6. """
  7. import time
  8. from django.views import View
  9. from Model.models import KVS
  10. from Object.AWS.AmazonKVSUtil import AmazonKVSObject
  11. from Object.AWS.AmazonKVAMUtil import AmazonKVAMObject
  12. from Object.AWS.AmazonKinesisVideoUtil import AmazonKinesisVideoObject
  13. from Object.ResponseObject import ResponseObject
  14. from Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME
  15. class KVSView(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. return self.validation(request.GET, request, operation)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation')
  23. return self.validation(request.POST, request, operation)
  24. def validation(self, request_dict, request, operation):
  25. response = ResponseObject()
  26. if operation == 'create-media': # 创建视频流
  27. return self.create_media(request_dict, response)
  28. elif operation == 'update-data-retention': # 修改视频流数据保留时间
  29. return self.update_data_retention(request_dict, response)
  30. elif operation == 'get-hls-midea': # 修改视频流数据保留时间
  31. return self.get_hls_midea_url(request_dict, response)
  32. else:
  33. return response.json(404)
  34. @staticmethod
  35. def create_media(request_dict, response):
  36. """
  37. 创建视频流
  38. @param request_dict: 请求参数
  39. @request_dict serial_number: 序列号
  40. @param response: 响应对象
  41. @return: response
  42. """
  43. serial_number = request_dict.get('serial_number', None)
  44. try:
  45. kvs_qs = KVS.objects.filter(stream_name=serial_number)
  46. if kvs_qs.exists():
  47. return response.json(174)
  48. kinesis_video_obj = AmazonKinesisVideoObject(
  49. aws_access_key_id=ACCESS_KEY_ID,
  50. secret_access_key=SECRET_ACCESS_KEY,
  51. region_name=REGION_NAME
  52. )
  53. stream_arn = kinesis_video_obj.create_stream(stream_name=serial_number)
  54. if stream_arn:
  55. now_time = int(time.time())
  56. KVS.objects.create(stream_name=serial_number, stream_arn=stream_arn, created_time=now_time,
  57. updated_time=now_time)
  58. return response.json(0)
  59. else:
  60. return response.json(178)
  61. except Exception as e:
  62. print(e)
  63. return response.json(500)
  64. @staticmethod
  65. def update_data_retention(request_dict, response):
  66. """
  67. 修改视频流数据保留时间
  68. @param request_dict: 请求参数
  69. @request_dict serial_number: 序列号
  70. @request_dict operation: 操作,增加/减少
  71. @request_dict data_retention_change_in_hours: 修改的时间
  72. @param response: 响应对象
  73. @return: response
  74. """
  75. serial_number = request_dict.get('serial_number', None)
  76. operation = request_dict.get('operation', None)
  77. data_retention_change_in_hours = request_dict.get('data_retention_change_in_hours', None)
  78. try:
  79. kvs_qs = KVS.objects.filter(stream_name=serial_number)
  80. if not kvs_qs.exists():
  81. return response.json(174)
  82. kinesis_video_obj = AmazonKinesisVideoObject(
  83. aws_access_key_id=ACCESS_KEY_ID,
  84. secret_access_key=SECRET_ACCESS_KEY,
  85. region_name=REGION_NAME
  86. )
  87. now_time = int(time.time())
  88. data_retention_change_in_hours = int(data_retention_change_in_hours)
  89. kinesis_video_obj.update_data_retention(stream_name=serial_number, operation=operation,
  90. data_retention_change_in_hours=data_retention_change_in_hours)
  91. kvs_qs.update(data_retention_in_hours=data_retention_change_in_hours, updated_time=now_time)
  92. return response.json(0)
  93. except Exception as e:
  94. print(e)
  95. return response.json(500)
  96. @staticmethod
  97. def get_hls_midea_url(request_dict, response):
  98. serial_number = request_dict.get('serial_number', None)
  99. try:
  100. kvs_qs = KVS.objects.filter(stream_name=serial_number)
  101. if not kvs_qs.exists():
  102. return response.json(174)
  103. kinesis_video_obj = AmazonKVAMObject(
  104. aws_access_key_id=ACCESS_KEY_ID,
  105. secret_access_key=SECRET_ACCESS_KEY,
  106. region_name=REGION_NAME,
  107. stream_name=serial_number,
  108. api_name='GET_HLS_STREAMING_SESSION_URL '
  109. )
  110. hls_streaming_session_url = kinesis_video_obj.get_hls_streaming_session_url(serial_number)
  111. return response.json(0, {"HlsStreamingSessionUrl": hls_streaming_session_url})
  112. except Exception as e:
  113. print(e)
  114. return response.json(500)