diff --git a/test_tracking_realtime.py b/test_tracking_realtime.py index 18a4109..6c61025 100644 --- a/test_tracking_realtime.py +++ b/test_tracking_realtime.py @@ -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: