У меня есть микросервис на python который запускает переадресацию видеопотока.
Таким образом я запускаю процесс:
import signal
import subprocess
import sys
import os
from dotenv import load_dotenv
from subprocess import Popen
load_dotenv(".env")
rtsp_server = os.getenv("RTSP_SERVER")
camera_login = os.getenv("CAMERA_LOGIN")
camera_pass = os.getenv("CAMERA_PASS")
camera_host = os.getenv("CAMERA_HOST")
def start_stream():
args = [
"ffmpeg",
"-i", f"rtsp://{camera_login}:{camera_pass}@{camera_host}:554/Streaming/channels/1/",
"-err_detect", "ignore_err",
"-reorder_queue_size", "0",
"-map", "0:v", "-c:v", "copy",
"-f", "rtsp",
"-rtsp_transport", "tcp", f"rtsp://{rtsp_server}:8554/live.stream"
]
params = {'cwd': '.'}
if sys.platform == 'win32': # винда у нас особенная...
params['creationflags'] = (
# subprocess.DETACHED_PROCESS # если хочешь, чтобы ffmpeg запускался тихо и не спамил в твой stdout
# subprocess.CREATE_NEW_CONSOLE | # если хочешь, чтобы открывалась новая консоль для ffmpeg
subprocess.CREATE_NEW_PROCESS_GROUP # по докам, это требуется для нормальной работы ctrl-c
)
my_subprocess = Popen(args, stdout=subprocess.PIPE,stderr=subprocess.PIPE, **params)
Проблема в том, что FFMPEG при запуске выдаёт следующее:
Input #0, rtsp, from 'rtsp://LOGIN:PASSWORD@11.111.11.111:554/Streaming/channels/1/':
Metadata:
title : Media Presentation
Duration: N/A, start: 0.080000, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuvj420p(pc, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 12.50 tbr, 90k tbn
Output #0, rtsp, to 'rtsp://localhost:8554/live.stream':
Metadata:
title : Media Presentation
encoder : Lavf60.10.100
Stream #0:0: Video: h264 (Main), yuvj420p(pc, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 12.50 tbr, 90k tbn
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
Но не всегда.
Иногда процесс зависает в начале команды и до этого этапа не доходит.
Другими словами, то что я скинул - признак того что переадресация трансляции началась успешно.
Подскажите, как я могу проверить началась ли трансляция успешно после запуска процесса?
Мне это нужно для того, чтобы перезапустить процесс если что-то пойдёт не так.