refactor: update FFmpegRTSPReader to read and update a single frame in place for improved efficiency
Some checks failed
Build Worker Base and Application Images / check-base-changes (push) Successful in 10s
Build Worker Base and Application Images / build-base (push) Has been skipped
Build Worker Base and Application Images / build-docker (push) Successful in 3m0s
Build Worker Base and Application Images / deploy-stack (push) Has been cancelled

This commit is contained in:
Siwat Sirichai 2025-09-26 02:20:14 +07:00
parent cb31633cc1
commit 84144a2955

View file

@ -100,6 +100,7 @@ class FFmpegRTSPReader:
'-f', 'rawvideo', '-f', 'rawvideo',
'-pix_fmt', 'bgr24', '-pix_fmt', 'bgr24',
'-an', # No audio '-an', # No audio
'-update', '1', # Update single frame in place
'-y', # Overwrite output file '-y', # Overwrite output file
self.temp_file self.temp_file
] ]
@ -169,19 +170,9 @@ class FFmpegRTSPReader:
if self.frame_ready_event.wait(timeout=restart_check_interval): if self.frame_ready_event.wait(timeout=restart_check_interval):
self.frame_ready_event.clear() self.frame_ready_event.clear()
# Read latest frame # Read current frame (file is always exactly one frame)
try: try:
with open(self.temp_file, 'rb') as f: with open(self.temp_file, 'rb') as f:
# Get file size
f.seek(0, 2)
file_size = f.tell()
if file_size < bytes_per_frame:
continue
# Read last complete frame
last_frame_offset = (file_size // bytes_per_frame - 1) * bytes_per_frame
f.seek(last_frame_offset)
frame_data = f.read(bytes_per_frame) frame_data = f.read(bytes_per_frame)
if len(frame_data) == bytes_per_frame: if len(frame_data) == bytes_per_frame: