mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-05 10:45:21 +03:00
Stop ffmpeg when shutting down
This commit is contained in:
parent
936cba75fb
commit
6c1fda11f6
@ -25,7 +25,9 @@ from frigate.const import (
|
|||||||
)
|
)
|
||||||
from frigate.events.maintainer import EventTypeEnum
|
from frigate.events.maintainer import EventTypeEnum
|
||||||
from frigate.ffmpeg_presets import parse_preset_input
|
from frigate.ffmpeg_presets import parse_preset_input
|
||||||
|
from frigate.log import LogPipe
|
||||||
from frigate.object_detection import load_labels
|
from frigate.object_detection import load_labels
|
||||||
|
from frigate.video import start_or_restart_ffmpeg, stop_ffmpeg
|
||||||
from frigate.util import get_ffmpeg_arg_list, listen
|
from frigate.util import get_ffmpeg_arg_list, listen
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -138,6 +140,7 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
self.pipe_file = None
|
self.pipe_file = None
|
||||||
|
self.logpipe = LogPipe(f"ffmpeg.{self.config.name}.audio")
|
||||||
self.audio_listener = None
|
self.audio_listener = None
|
||||||
|
|
||||||
def detect_audio(self, audio) -> None:
|
def detect_audio(self, audio) -> None:
|
||||||
@ -186,17 +189,14 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
(EventTypeEnum.audio, "end", self.config.name, detection)
|
(EventTypeEnum.audio, "end", self.config.name, detection)
|
||||||
)
|
)
|
||||||
|
|
||||||
def init_ffmpeg(self) -> None:
|
def restart_audio_pipe(self) -> None:
|
||||||
try:
|
try:
|
||||||
os.mkfifo(self.pipe)
|
os.mkfifo(self.pipe)
|
||||||
except FileExistsError:
|
except FileExistsError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
self.audio_listener = sp.Popen(
|
start_or_restart_ffmpeg(
|
||||||
self.ffmpeg_cmd,
|
self.ffmpeg_cmd, logger, self.logpipe, None, self.audio_listener
|
||||||
stdout=sp.DEVNULL,
|
|
||||||
stdin=sp.DEVNULL,
|
|
||||||
start_new_session=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def read_audio(self) -> None:
|
def read_audio(self) -> None:
|
||||||
@ -207,12 +207,12 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
audio = np.frombuffer(self.pipe_file.read(self.chunk_size), dtype=np.int16)
|
audio = np.frombuffer(self.pipe_file.read(self.chunk_size), dtype=np.int16)
|
||||||
self.detect_audio(audio)
|
self.detect_audio(audio)
|
||||||
except BrokenPipeError as e:
|
except BrokenPipeError as e:
|
||||||
logger.error(f"There was a broken pipe :: {e}")
|
self.restart_audio_pipe()
|
||||||
# TODO fix broken pipe
|
|
||||||
pass
|
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
self.init_ffmpeg()
|
self.restart_audio_pipe()
|
||||||
|
|
||||||
while not self.stop_event.is_set():
|
while not self.stop_event.is_set():
|
||||||
self.read_audio()
|
self.read_audio()
|
||||||
|
|
||||||
|
stop_ffmpeg(self.audio_listener, logger)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user