73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
# -*- coding: utf-8 -*-
|
||
import time
|
||
|
||
from alg_airport_ffmpeg.common.Constant import ConstantEnum
|
||
from alg_airport_ffmpeg.exception.CustomerException import ServiceException
|
||
from alg_airport_ffmpeg.util import YmlUtils, LogUtils
|
||
from loguru import logger
|
||
|
||
from alg_airport_ffmpeg.util.Cv2Utils import Cv2Util
|
||
|
||
'''
|
||
推流服务
|
||
'''
|
||
|
||
|
||
class PushStreamService:
|
||
|
||
# 初始化
|
||
def __init__(self):
|
||
# 获取airport环境所需要的配置
|
||
self.__content = YmlUtils.get_configs()
|
||
# 初始化日志
|
||
LogUtils.init_log(self.__content)
|
||
|
||
# 服务调用启动方法
|
||
def start_service(self):
|
||
logger.info(ConstantEnum.START_LOG.value[0])
|
||
# 循环消息处理
|
||
pull_url = self.__content["video"]["pullUrl"]
|
||
pushUrl = self.__content["video"]["pushUrl"]
|
||
cv2_tool = Cv2Util(pull_url, pushUrl)
|
||
cv2_init_num = 0
|
||
while True:
|
||
try:
|
||
time1 = time.time()
|
||
#################################拉流推流一体###################################
|
||
# 1,检查拉流通道是否有流,没有流7秒后重试
|
||
if not cv2_tool.is_video_stream(pull_url):
|
||
logger.info("开始重新获取视频信息: {}次", cv2_init_num)
|
||
time.sleep(1)
|
||
cv2_init_num += 1
|
||
cv2_tool.close_push_stream()
|
||
continue
|
||
cv2_init_num = 0
|
||
# 2. 推流存在跳过,不存在初始化推流
|
||
cv2_tool.start_push_stream()
|
||
# 3. 判断推流通道是否有流,进程是否存在
|
||
if cv2_tool.is_push_stream_ok():
|
||
cv2_tool.close_push_stream()
|
||
#################################先拉流再推流###################################
|
||
# if cv2_tool.check_config():
|
||
# time.sleep(1)
|
||
# logger.info("开始重新获取视频信息: {}次", cv2_init_num)
|
||
# cv2_init_num += 1
|
||
# # cv2_tool.build_cv2() # 方式1 cv2
|
||
# cv2_tool.get_video_info() # 方式2 ffmpeg
|
||
# continue
|
||
# cv2_init_num = 0
|
||
# # frame = cv2_tool.cv2_read() # 方式1 cv2
|
||
# frame = cv2_tool.read() # 方式2 ffmpeg
|
||
# if frame is None:
|
||
# continue
|
||
# cv2_tool.push_stream_write(frame)
|
||
# print(time.time()- time1)
|
||
except ServiceException as s:
|
||
logger.error("推流异常: {}", s.msg)
|
||
except Exception as e:
|
||
logger.error("推流异常: {}", e)
|
||
cv2_tool.close()
|
||
|
||
|
||
|