151 lines
4.8 KiB
Python
151 lines
4.8 KiB
Python
import logging
|
|
import os
|
|
|
|
import requests
|
|
|
|
import util.system
|
|
|
|
session = requests.Session()
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def normalize_task(task_info):
|
|
...
|
|
return task_info
|
|
|
|
|
|
def sync_center():
|
|
"""
|
|
通过接口获取任务
|
|
:return: 任务列表
|
|
"""
|
|
try:
|
|
response = session.post(os.getenv('API_ENDPOINT') + "/sync", json={
|
|
'accessKey': os.getenv('ACCESS_KEY'),
|
|
'clientStatus': util.system.get_sys_info()
|
|
}, timeout=10)
|
|
except requests.RequestException as e:
|
|
logger.error("请求失败!", e)
|
|
return []
|
|
data = response.json()
|
|
logger.debug("获取任务结果:【%s】", data)
|
|
if data.get('code', 0) == 200:
|
|
tasks = data.get('data', {}).get('tasks', [])
|
|
else:
|
|
tasks = []
|
|
logger.warning("获取任务失败")
|
|
return tasks
|
|
|
|
|
|
def get_template_info(template_id):
|
|
"""
|
|
通过接口获取模板信息
|
|
:rtype: Template
|
|
:param template_id: 模板id
|
|
:type template_id: str
|
|
:return: 模板信息
|
|
"""
|
|
try:
|
|
response = session.post('{0}/template/{1}'.format(os.getenv('API_ENDPOINT'), template_id), json={
|
|
'accessKey': os.getenv('ACCESS_KEY'),
|
|
}, timeout=10)
|
|
except requests.RequestException as e:
|
|
logger.error("请求失败!", e)
|
|
return None
|
|
data = response.json()
|
|
remote_template_info = data.get('data', {})
|
|
logger.debug("获取模板信息结果:【%s】", remote_template_info)
|
|
template = {
|
|
'id': template_id,
|
|
'scenic_name': remote_template_info.get('scenicName', '景区'),
|
|
'name': remote_template_info.get('name', '模版'),
|
|
'video_size': '1920x1080',
|
|
'frame_rate': 30,
|
|
'overall_duration': 30,
|
|
'video_parts': [
|
|
|
|
]
|
|
}
|
|
|
|
def _template_normalizer(template_info):
|
|
_template = {}
|
|
_placeholder_type = template_info.get('isPlaceholder', -1)
|
|
if _placeholder_type == 0:
|
|
# 固定视频
|
|
_template['source'] = template_info.get('sourceUrl', '')
|
|
elif _placeholder_type == 1:
|
|
# 占位符
|
|
_template['source'] = "PLACEHOLDER_" + template_info.get('sourceUrl', '')
|
|
_template['mute'] = template_info.get('mute', True)
|
|
else:
|
|
_template['source'] = None
|
|
_overlays = template_info.get('overlays', '')
|
|
if _overlays:
|
|
_template['overlays'] = _overlays.split(",")
|
|
_audios = template_info.get('audios', '')
|
|
if _audios:
|
|
_template['audios'] = _audios.split(",")
|
|
_luts = template_info.get('luts', '')
|
|
if _luts:
|
|
_template['luts'] = _luts.split(",")
|
|
return _template
|
|
|
|
# outer template definition
|
|
overall_template = _template_normalizer(remote_template_info)
|
|
template['overall_template'] = overall_template
|
|
# inter template definition
|
|
inter_template_list = remote_template_info.get('children', [])
|
|
for children_template in inter_template_list:
|
|
parts = _template_normalizer(children_template)
|
|
template['video_parts'].append(parts)
|
|
template['local_path'] = os.path.join(os.getenv('TEMPLATE_DIR'), str(template_id))
|
|
return template
|
|
|
|
|
|
def report_task_success(task_info):
|
|
try:
|
|
response = session.post('{0}/{1}/success'.format(os.getenv('API_ENDPOINT'), task_info.get("id")), json={
|
|
'accessKey': os.getenv('ACCESS_KEY'),
|
|
}, timeout=10)
|
|
except requests.RequestException as e:
|
|
logger.error("请求失败!", e)
|
|
return None
|
|
|
|
|
|
def report_task_start(task_info):
|
|
try:
|
|
response = session.post('{0}/{1}/start'.format(os.getenv('API_ENDPOINT'), task_info.get("id")), json={
|
|
'accessKey': os.getenv('ACCESS_KEY'),
|
|
}, timeout=10)
|
|
except requests.RequestException as e:
|
|
logger.error("请求失败!", e)
|
|
return None
|
|
|
|
|
|
def report_task_failed(task_info):
|
|
try:
|
|
response = session.post('{0}/{1}/fail'.format(os.getenv('API_ENDPOINT'), task_info.get("id")), json={
|
|
'accessKey': os.getenv('ACCESS_KEY'),
|
|
}, timeout=10)
|
|
except requests.RequestException as e:
|
|
logger.error("请求失败!", e)
|
|
return None
|
|
|
|
|
|
def upload_task_file(task_info, ffmpeg_task):
|
|
try:
|
|
response = session.post('{0}/{1}/uploadUrl'.format(os.getenv('API_ENDPOINT'), task_info.get("id")), json={
|
|
'accessKey': os.getenv('ACCESS_KEY'),
|
|
}, timeout=10)
|
|
except requests.RequestException as e:
|
|
logger.error("请求失败!", e)
|
|
return False
|
|
data = response.json()
|
|
url = data.get('data', "")
|
|
try:
|
|
with open(ffmpeg_task.get_output_file(), 'rb') as f:
|
|
requests.put(url, data=f)
|
|
except requests.RequestException as e:
|
|
logger.error("上传失败!", e)
|
|
return False
|
|
return True |