fix: realtime multi cam

This commit is contained in:
Siwat Sirichai 2025-11-10 22:14:56 +07:00
parent 593611cdb7
commit bf7b68edb1

View file

@ -266,7 +266,7 @@ def main_multi_stream():
conn = manager.connect_stream(
rtsp_url=rtsp_url,
stream_id=stream_id,
buffer_size=30
buffer_size=5
)
connections[stream_id] = conn
print(f"✓ Connected: {stream_id}")
@ -289,26 +289,42 @@ def main_multi_stream():
start_time = time.time()
try:
# Simple approach: iterate over first connection's results
# In production, you'd properly merge all result streams
for conn in connections.values():
for result in conn.tracking_results():
total_results += 1
stream_id = result.stream_id
# Merge all result queues from all connections
import queue as queue_module
if stream_id in stream_stats:
stream_stats[stream_id]['count'] += 1
running = True
while running:
# Poll all connection queues (non-blocking)
got_result = False
for conn in connections.values():
try:
# Non-blocking get from each connection's queue
result = conn.result_queue.get_nowait()
got_result = True
# Print stats every 100 results
if total_results % 100 == 0:
elapsed = time.time() - start_time
total_fps = total_results / elapsed if elapsed > 0 else 0
total_results += 1
stream_id = result.stream_id
print(f"\nTotal: {total_results} | {elapsed:.1f}s | {total_fps:.1f} FPS")
for sid, stats in stream_stats.items():
s_elapsed = time.time() - stats['start']
s_fps = stats['count'] / s_elapsed if s_elapsed > 0 else 0
print(f" {sid}: {stats['count']} ({s_fps:.1f} FPS)")
if stream_id in stream_stats:
stream_stats[stream_id]['count'] += 1
# Print stats every 100 results
if total_results % 100 == 0:
elapsed = time.time() - start_time
total_fps = total_results / elapsed if elapsed > 0 else 0
print(f"\nTotal: {total_results} | {elapsed:.1f}s | {total_fps:.1f} FPS")
for sid, stats in stream_stats.items():
s_elapsed = time.time() - stats['start']
s_fps = stats['count'] / s_elapsed if s_elapsed > 0 else 0
print(f" {sid}: {stats['count']} ({s_fps:.1f} FPS)")
except queue_module.Empty:
continue
# Small sleep if no results to avoid busy loop
if not got_result:
time.sleep(0.01)
except KeyboardInterrupt: