matrice-streaming 0.1.68__py3-none-any.whl → 0.1.70__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- matrice_streaming/streaming_gateway/camera_streamer/async_camera_worker.py +10 -3
- matrice_streaming/streaming_gateway/camera_streamer/async_ffmpeg_worker.py +2 -2
- matrice_streaming/streaming_gateway/camera_streamer/camera_streamer.py +1 -1
- matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_camera_streamer.py +1 -1
- matrice_streaming/streaming_gateway/camera_streamer/gstreamer_camera_streamer.py +1 -1
- matrice_streaming/streaming_gateway/camera_streamer/nvdec.py +119 -20
- matrice_streaming/streaming_gateway/camera_streamer/worker_manager.py +27 -6
- {matrice_streaming-0.1.68.dist-info → matrice_streaming-0.1.70.dist-info}/METADATA +1 -1
- {matrice_streaming-0.1.68.dist-info → matrice_streaming-0.1.70.dist-info}/RECORD +12 -12
- {matrice_streaming-0.1.68.dist-info → matrice_streaming-0.1.70.dist-info}/WHEEL +0 -0
- {matrice_streaming-0.1.68.dist-info → matrice_streaming-0.1.70.dist-info}/licenses/LICENSE.txt +0 -0
- {matrice_streaming-0.1.68.dist-info → matrice_streaming-0.1.70.dist-info}/top_level.txt +0 -0
|
@@ -88,7 +88,7 @@ class AsyncCameraWorker:
|
|
|
88
88
|
health_queue: multiprocessing.Queue,
|
|
89
89
|
command_queue: Optional[multiprocessing.Queue] = None,
|
|
90
90
|
response_queue: Optional[multiprocessing.Queue] = None,
|
|
91
|
-
frame_optimizer_enabled: bool =
|
|
91
|
+
frame_optimizer_enabled: bool = False, # Disabled for ML quality
|
|
92
92
|
frame_optimizer_config: Optional[Dict[str, Any]] = None,
|
|
93
93
|
# ================================================================
|
|
94
94
|
# SHM_MODE: New parameters for shared memory architecture
|
|
@@ -99,7 +99,7 @@ class AsyncCameraWorker:
|
|
|
99
99
|
# ================================================================
|
|
100
100
|
# PERFORMANCE: New parameters for optimized frame capture
|
|
101
101
|
# ================================================================
|
|
102
|
-
drop_stale_frames: bool =
|
|
102
|
+
drop_stale_frames: bool = False, # Disabled for ML quality
|
|
103
103
|
pin_cpu_affinity: bool = True, # Pin worker to specific CPU cores
|
|
104
104
|
total_workers: int = 1, # Total worker count for CPU affinity calculation
|
|
105
105
|
buffer_size: int = 1, # Minimal buffer for low latency (cv2_bench uses 1)
|
|
@@ -1313,10 +1313,14 @@ def run_async_worker(
|
|
|
1313
1313
|
# ================================================================
|
|
1314
1314
|
# PERFORMANCE: New parameters for optimized frame capture
|
|
1315
1315
|
# ================================================================
|
|
1316
|
-
drop_stale_frames: bool =
|
|
1316
|
+
drop_stale_frames: bool = False, # Disabled for ML quality
|
|
1317
1317
|
pin_cpu_affinity: bool = True,
|
|
1318
1318
|
total_workers: int = 1,
|
|
1319
1319
|
buffer_size: int = 1,
|
|
1320
|
+
# ================================================================
|
|
1321
|
+
# FRAME OPTIMIZER: Control frame similarity detection
|
|
1322
|
+
# ================================================================
|
|
1323
|
+
frame_optimizer_enabled: bool = False, # Disabled for ML quality
|
|
1320
1324
|
):
|
|
1321
1325
|
"""Entry point for async worker process.
|
|
1322
1326
|
|
|
@@ -1337,6 +1341,7 @@ def run_async_worker(
|
|
|
1337
1341
|
pin_cpu_affinity: Pin worker process to specific CPU cores
|
|
1338
1342
|
total_workers: Total number of workers for CPU affinity calculation
|
|
1339
1343
|
buffer_size: VideoCapture buffer size (1 = minimal latency)
|
|
1344
|
+
frame_optimizer_enabled: Enable frame similarity detection (skip similar frames)
|
|
1340
1345
|
"""
|
|
1341
1346
|
# Setup logging for this process
|
|
1342
1347
|
logging.basicConfig(
|
|
@@ -1378,6 +1383,8 @@ def run_async_worker(
|
|
|
1378
1383
|
pin_cpu_affinity=pin_cpu_affinity,
|
|
1379
1384
|
total_workers=total_workers,
|
|
1380
1385
|
buffer_size=buffer_size,
|
|
1386
|
+
# FRAME OPTIMIZER: Pass through frame similarity detection setting
|
|
1387
|
+
frame_optimizer_enabled=frame_optimizer_enabled,
|
|
1381
1388
|
)
|
|
1382
1389
|
|
|
1383
1390
|
# Run event loop
|
|
@@ -86,7 +86,7 @@ class AsyncFFmpegWorker:
|
|
|
86
86
|
pin_cpu_affinity: bool = True,
|
|
87
87
|
total_workers: int = 1,
|
|
88
88
|
# Frame optimizer options
|
|
89
|
-
frame_optimizer_enabled: bool =
|
|
89
|
+
frame_optimizer_enabled: bool = False, # Disabled for ML quality
|
|
90
90
|
frame_optimizer_config: Optional[Dict[str, Any]] = None,
|
|
91
91
|
):
|
|
92
92
|
"""Initialize async FFmpeg worker.
|
|
@@ -905,7 +905,7 @@ def run_ffmpeg_worker(
|
|
|
905
905
|
shm_frame_format: str = "BGR",
|
|
906
906
|
pin_cpu_affinity: bool = True,
|
|
907
907
|
total_workers: int = 1,
|
|
908
|
-
frame_optimizer_enabled: bool =
|
|
908
|
+
frame_optimizer_enabled: bool = False, # Disabled for ML quality
|
|
909
909
|
frame_optimizer_config: Optional[Dict[str, Any]] = None,
|
|
910
910
|
):
|
|
911
911
|
"""Entry point for FFmpeg worker process.
|
|
@@ -41,7 +41,7 @@ class CameraStreamer:
|
|
|
41
41
|
gateway_util: StreamingGatewayUtil = None,
|
|
42
42
|
connection_refresh_threshold: int = 10,
|
|
43
43
|
connection_refresh_interval: float = 60.0,
|
|
44
|
-
frame_optimizer_enabled: bool =
|
|
44
|
+
frame_optimizer_enabled: bool = False, # Disabled for ML quality
|
|
45
45
|
frame_optimizer_config: Optional[Dict[str, Any]] = None,
|
|
46
46
|
):
|
|
47
47
|
"""Initialize CameraStreamer.
|
|
@@ -315,7 +315,7 @@ class FFmpegCameraStreamer:
|
|
|
315
315
|
shm_slot_count: int = 1000,
|
|
316
316
|
shm_frame_format: str = "BGR",
|
|
317
317
|
# Frame optimizer options
|
|
318
|
-
frame_optimizer_enabled: bool =
|
|
318
|
+
frame_optimizer_enabled: bool = False, # Disabled for ML quality
|
|
319
319
|
frame_optimizer_config: Optional[Dict[str, Any]] = None,
|
|
320
320
|
# CPU affinity options
|
|
321
321
|
pin_cpu_affinity: bool = False,
|
|
@@ -532,7 +532,7 @@ class GStreamerCameraStreamer:
|
|
|
532
532
|
video_codec: Optional[str] = None,
|
|
533
533
|
gateway_util: StreamingGatewayUtil = None,
|
|
534
534
|
gstreamer_config: Optional[GStreamerConfig] = None,
|
|
535
|
-
frame_optimizer_enabled: bool =
|
|
535
|
+
frame_optimizer_enabled: bool = False, # Disabled for ML quality
|
|
536
536
|
frame_optimizer_config: Optional[Dict[str, Any]] = None,
|
|
537
537
|
):
|
|
538
538
|
"""Initialize GStreamerCameraStreamer.
|
|
@@ -96,8 +96,23 @@ except (ImportError, AttributeError, RuntimeError, TypeError):
|
|
|
96
96
|
CudaIpcRingBuffer = None
|
|
97
97
|
GlobalFrameCounter = None
|
|
98
98
|
|
|
99
|
+
try:
|
|
100
|
+
from matrice_common.stream.gpu_camera_map import GpuCameraMap
|
|
101
|
+
GPU_CAMERA_MAP_AVAILABLE = True
|
|
102
|
+
except ImportError:
|
|
103
|
+
GPU_CAMERA_MAP_AVAILABLE = False
|
|
104
|
+
GpuCameraMap = None
|
|
105
|
+
|
|
99
106
|
logger = logging.getLogger(__name__)
|
|
100
107
|
|
|
108
|
+
# =============================================================================
|
|
109
|
+
# Fixed dimensions for NV12 output - ALL cameras resize to this size
|
|
110
|
+
# This matches the TensorRT model input requirements (640x640)
|
|
111
|
+
# =============================================================================
|
|
112
|
+
TARGET_WIDTH = 640
|
|
113
|
+
TARGET_HEIGHT = 640
|
|
114
|
+
NV12_HEIGHT = TARGET_HEIGHT + TARGET_HEIGHT // 2 # 960 = H * 1.5 for NV12 format
|
|
115
|
+
|
|
101
116
|
def setup_logging(quiet: bool = True):
|
|
102
117
|
"""Configure logging level based on quiet mode."""
|
|
103
118
|
level = logging.WARNING if quiet else logging.INFO
|
|
@@ -407,6 +422,8 @@ class StreamState:
|
|
|
407
422
|
width: int = 640
|
|
408
423
|
height: int = 640
|
|
409
424
|
empty_packets: int = 0
|
|
425
|
+
decode_errors: int = 0 # Consecutive decode errors
|
|
426
|
+
MAX_DECODE_ERRORS: int = 5 # Restart demuxer after this many consecutive errors
|
|
410
427
|
|
|
411
428
|
|
|
412
429
|
# =============================================================================
|
|
@@ -664,18 +681,44 @@ class NVDECDecoderPool:
|
|
|
664
681
|
break
|
|
665
682
|
|
|
666
683
|
frames_before = frames_this_stream
|
|
667
|
-
for surface in decoder.Decode(packet):
|
|
668
|
-
tensor = surface_to_nv12(surface, target_h, target_w)
|
|
669
|
-
|
|
670
|
-
if tensor is not None:
|
|
671
|
-
decoded_frames.append((stream.camera_id, tensor))
|
|
672
|
-
frames_this_stream += 1
|
|
673
|
-
stream.frames_decoded += 1
|
|
674
|
-
total_frames += 1
|
|
675
|
-
stream.empty_packets = 0
|
|
676
684
|
|
|
677
|
-
|
|
678
|
-
|
|
685
|
+
# Wrap decode loop in try/except to catch decode errors
|
|
686
|
+
try:
|
|
687
|
+
for surface in decoder.Decode(packet):
|
|
688
|
+
tensor = surface_to_nv12(surface, target_h, target_w)
|
|
689
|
+
|
|
690
|
+
if tensor is not None:
|
|
691
|
+
decoded_frames.append((stream.camera_id, tensor))
|
|
692
|
+
frames_this_stream += 1
|
|
693
|
+
stream.frames_decoded += 1
|
|
694
|
+
total_frames += 1
|
|
695
|
+
stream.empty_packets = 0
|
|
696
|
+
stream.decode_errors = 0 # Reset on success
|
|
697
|
+
|
|
698
|
+
if frames_this_stream >= frames_per_stream:
|
|
699
|
+
break
|
|
700
|
+
|
|
701
|
+
except Exception as decode_err:
|
|
702
|
+
# Handle decode errors - these can happen with corrupted packets
|
|
703
|
+
stream.decode_errors += 1
|
|
704
|
+
if stream.decode_errors == 1:
|
|
705
|
+
# Only log first error per stream to avoid spam
|
|
706
|
+
logger.warning(f"{stream.camera_id}: Decode error: {decode_err}")
|
|
707
|
+
|
|
708
|
+
if stream.decode_errors >= stream.MAX_DECODE_ERRORS:
|
|
709
|
+
# Too many consecutive errors - restart demuxer
|
|
710
|
+
logger.warning(
|
|
711
|
+
f"{stream.camera_id}: {stream.decode_errors} consecutive decode errors, "
|
|
712
|
+
f"restarting demuxer"
|
|
713
|
+
)
|
|
714
|
+
try:
|
|
715
|
+
stream.demuxer = nvc.CreateDemuxer(stream.video_path)
|
|
716
|
+
stream.decode_errors = 0
|
|
717
|
+
stream.empty_packets = 0
|
|
718
|
+
logger.info(f"{stream.camera_id}: Demuxer restarted successfully")
|
|
719
|
+
except Exception as restart_err:
|
|
720
|
+
logger.error(f"{stream.camera_id}: Failed to restart demuxer: {restart_err}")
|
|
721
|
+
break # Exit this stream's loop
|
|
679
722
|
|
|
680
723
|
if frames_this_stream == frames_before:
|
|
681
724
|
stream.empty_packets += 1
|
|
@@ -683,7 +726,17 @@ class NVDECDecoderPool:
|
|
|
683
726
|
stream.demuxer = nvc.CreateDemuxer(stream.video_path)
|
|
684
727
|
stream.empty_packets = 0
|
|
685
728
|
|
|
686
|
-
except Exception:
|
|
729
|
+
except Exception as demux_err:
|
|
730
|
+
# Handle demux errors
|
|
731
|
+
logger.warning(f"{stream.camera_id}: Demux error: {demux_err}")
|
|
732
|
+
stream.decode_errors += 1
|
|
733
|
+
if stream.decode_errors >= stream.MAX_DECODE_ERRORS:
|
|
734
|
+
try:
|
|
735
|
+
stream.demuxer = nvc.CreateDemuxer(stream.video_path)
|
|
736
|
+
stream.decode_errors = 0
|
|
737
|
+
logger.info(f"{stream.camera_id}: Demuxer restarted after demux errors")
|
|
738
|
+
except Exception:
|
|
739
|
+
pass
|
|
687
740
|
break
|
|
688
741
|
|
|
689
742
|
if frames_this_stream >= frames_per_stream:
|
|
@@ -778,16 +831,28 @@ def nvdec_pool_worker(
|
|
|
778
831
|
|
|
779
832
|
try:
|
|
780
833
|
with cuda_stream:
|
|
834
|
+
# Always use fixed TARGET dimensions to ensure consistent NV12 output
|
|
781
835
|
num_frames, decoded_frames = pool.decode_round(
|
|
782
836
|
decoder_idx,
|
|
783
837
|
frames_per_stream=burst_size,
|
|
784
|
-
target_h=
|
|
785
|
-
target_w=
|
|
838
|
+
target_h=TARGET_HEIGHT, # Always 640
|
|
839
|
+
target_w=TARGET_WIDTH # Always 640
|
|
786
840
|
)
|
|
787
841
|
|
|
788
842
|
for cam_id, tensor in decoded_frames:
|
|
789
843
|
if cam_id in ring_buffers:
|
|
790
844
|
try:
|
|
845
|
+
# Validate frame shape matches expected NV12 dimensions
|
|
846
|
+
expected_shape = (NV12_HEIGHT, TARGET_WIDTH, 1) # (960, 640, 1)
|
|
847
|
+
if tensor.shape != expected_shape:
|
|
848
|
+
local_errors += 1
|
|
849
|
+
if local_errors <= 5:
|
|
850
|
+
logger.error(
|
|
851
|
+
f"Worker {worker_id} shape mismatch for {cam_id}: "
|
|
852
|
+
f"got {tensor.shape}, expected {expected_shape}"
|
|
853
|
+
)
|
|
854
|
+
continue # Skip this frame
|
|
855
|
+
|
|
791
856
|
ring_buffers[cam_id].write_frame_fast(tensor, sync=False)
|
|
792
857
|
local_frames += 1
|
|
793
858
|
frames_since_counter_update += 1
|
|
@@ -932,30 +997,64 @@ def nvdec_pool_process(
|
|
|
932
997
|
})
|
|
933
998
|
return
|
|
934
999
|
|
|
935
|
-
# Create NV12 ring buffers
|
|
1000
|
+
# Create NV12 ring buffers with FIXED dimensions (640x640 -> 960x640 for NV12)
|
|
1001
|
+
# ALL cameras resize to TARGET_WIDTH x TARGET_HEIGHT regardless of source resolution
|
|
936
1002
|
ring_buffers: Dict[str, CudaIpcRingBuffer] = {}
|
|
937
|
-
frame_size_mb =
|
|
1003
|
+
frame_size_mb = TARGET_WIDTH * NV12_HEIGHT * 1 / 1e6 # 640 * 960 * 1 channel
|
|
938
1004
|
|
|
939
1005
|
try:
|
|
1006
|
+
# Initialize GPU camera map (producer side) - process 0 creates, others connect
|
|
1007
|
+
gpu_map = None
|
|
1008
|
+
if GPU_CAMERA_MAP_AVAILABLE:
|
|
1009
|
+
gpu_map = GpuCameraMap(is_producer=True)
|
|
1010
|
+
if process_id == 0:
|
|
1011
|
+
if gpu_map.initialize():
|
|
1012
|
+
logger.info(f"Process {process_id}: GpuCameraMap initialized")
|
|
1013
|
+
else:
|
|
1014
|
+
logger.warning(f"Process {process_id}: Failed to initialize GpuCameraMap")
|
|
1015
|
+
gpu_map = None
|
|
1016
|
+
else:
|
|
1017
|
+
# Wait for process 0 to initialize
|
|
1018
|
+
for retry in range(50):
|
|
1019
|
+
if gpu_map.connect():
|
|
1020
|
+
logger.info(f"Process {process_id}: Connected to GpuCameraMap")
|
|
1021
|
+
break
|
|
1022
|
+
time.sleep(0.1)
|
|
1023
|
+
else:
|
|
1024
|
+
logger.warning(f"Process {process_id}: Failed to connect to GpuCameraMap")
|
|
1025
|
+
gpu_map = None
|
|
1026
|
+
|
|
1027
|
+
# Collect GPU mappings for bulk write
|
|
1028
|
+
gpu_mappings = {}
|
|
1029
|
+
|
|
940
1030
|
for i, config in enumerate(camera_configs):
|
|
1031
|
+
# Use fixed dimensions - ALL cameras output 640x640 (960x640 for NV12)
|
|
941
1032
|
rb = CudaIpcRingBuffer.create_producer(
|
|
942
1033
|
config.camera_id,
|
|
943
1034
|
gpu_id=config.gpu_id,
|
|
944
1035
|
num_slots=num_slots,
|
|
945
|
-
width=
|
|
946
|
-
height=
|
|
1036
|
+
width=TARGET_WIDTH, # Always 640
|
|
1037
|
+
height=NV12_HEIGHT, # Always 960 (640 * 1.5 for NV12)
|
|
947
1038
|
channels=1,
|
|
948
1039
|
)
|
|
949
1040
|
ring_buffers[config.camera_id] = rb
|
|
950
1041
|
|
|
1042
|
+
# Track GPU assignment for this camera
|
|
1043
|
+
gpu_mappings[config.camera_id] = config.gpu_id
|
|
1044
|
+
|
|
951
1045
|
pool.assign_stream(
|
|
952
1046
|
stream_id=i,
|
|
953
1047
|
camera_id=config.camera_id,
|
|
954
1048
|
video_path=config.video_path,
|
|
955
|
-
width=
|
|
956
|
-
height=
|
|
1049
|
+
width=TARGET_WIDTH, # Use fixed width
|
|
1050
|
+
height=TARGET_HEIGHT # Use fixed height
|
|
957
1051
|
)
|
|
958
1052
|
|
|
1053
|
+
# Write all GPU mappings at once
|
|
1054
|
+
if gpu_map and gpu_mappings:
|
|
1055
|
+
gpu_map.set_bulk_mapping(gpu_mappings)
|
|
1056
|
+
logger.info(f"Process {process_id}: Wrote {len(gpu_mappings)} camera-GPU mappings")
|
|
1057
|
+
|
|
959
1058
|
logger.info(f"Process {process_id}: {pool.actual_pool_size} decoders, "
|
|
960
1059
|
f"{len(camera_configs)} streams, NV12 ({frame_size_mb:.1f} MB/frame)")
|
|
961
1060
|
|
|
@@ -43,9 +43,13 @@ class WorkerManager:
|
|
|
43
43
|
# ================================================================
|
|
44
44
|
# PERFORMANCE: New parameters for optimized frame capture
|
|
45
45
|
# ================================================================
|
|
46
|
-
drop_stale_frames: bool =
|
|
46
|
+
drop_stale_frames: bool = False, # Use grab()/grab()/retrieve() for latest frame (disabled for ML quality)
|
|
47
47
|
pin_cpu_affinity: bool = True, # Pin workers to specific CPU cores
|
|
48
48
|
buffer_size: int = 1, # VideoCapture buffer size (1 = minimal latency)
|
|
49
|
+
# ================================================================
|
|
50
|
+
# FRAME OPTIMIZER: Control frame similarity detection
|
|
51
|
+
# ================================================================
|
|
52
|
+
frame_optimizer_enabled: bool = False, # Enable frame similarity detection (disabled for ML quality)
|
|
49
53
|
):
|
|
50
54
|
"""Initialize worker manager with dynamic CPU-based scaling.
|
|
51
55
|
|
|
@@ -62,6 +66,7 @@ class WorkerManager:
|
|
|
62
66
|
drop_stale_frames: Use grab()/grab()/retrieve() pattern for latest frame
|
|
63
67
|
pin_cpu_affinity: Pin worker processes to specific CPU cores for cache locality
|
|
64
68
|
buffer_size: VideoCapture buffer size (1 = minimal latency)
|
|
69
|
+
frame_optimizer_enabled: Enable frame similarity detection (skip similar frames for bandwidth saving)
|
|
65
70
|
"""
|
|
66
71
|
self.camera_configs = camera_configs
|
|
67
72
|
self.stream_config = stream_config
|
|
@@ -122,14 +127,28 @@ class WorkerManager:
|
|
|
122
127
|
self.pin_cpu_affinity = pin_cpu_affinity
|
|
123
128
|
self.buffer_size = buffer_size
|
|
124
129
|
|
|
125
|
-
|
|
130
|
+
# ================================================================
|
|
131
|
+
# FRAME OPTIMIZER: Store frame similarity detection configuration
|
|
132
|
+
# ================================================================
|
|
133
|
+
self.frame_optimizer_enabled = frame_optimizer_enabled
|
|
134
|
+
|
|
135
|
+
if frame_optimizer_enabled:
|
|
126
136
|
self.logger.info(
|
|
127
|
-
|
|
128
|
-
f"drop_stale_frames={drop_stale_frames}, "
|
|
129
|
-
f"pin_cpu_affinity={pin_cpu_affinity}, "
|
|
130
|
-
f"buffer_size={buffer_size}"
|
|
137
|
+
"FRAME OPTIMIZER ENABLED: Similar frames will be skipped (may reduce ML quality)"
|
|
131
138
|
)
|
|
132
139
|
|
|
140
|
+
if drop_stale_frames:
|
|
141
|
+
self.logger.info(
|
|
142
|
+
"DROP STALE FRAMES ENABLED: Using grab/grab/retrieve pattern (may reduce ML quality)"
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
self.logger.info(
|
|
146
|
+
f"Worker config: frame_optimizer={frame_optimizer_enabled}, "
|
|
147
|
+
f"drop_stale_frames={drop_stale_frames}, "
|
|
148
|
+
f"pin_cpu_affinity={pin_cpu_affinity}, "
|
|
149
|
+
f"buffer_size={buffer_size}"
|
|
150
|
+
)
|
|
151
|
+
|
|
133
152
|
# Note: Batch parameters are calculated per-worker in _start_worker()
|
|
134
153
|
# based on each worker's camera count, not the global total.
|
|
135
154
|
# This ensures optimal batching when cameras are distributed across workers.
|
|
@@ -291,6 +310,8 @@ class WorkerManager:
|
|
|
291
310
|
self.pin_cpu_affinity,
|
|
292
311
|
self.num_workers, # Total workers for CPU affinity calculation
|
|
293
312
|
self.buffer_size,
|
|
313
|
+
# FRAME OPTIMIZER: Pass frame similarity detection setting
|
|
314
|
+
self.frame_optimizer_enabled,
|
|
294
315
|
),
|
|
295
316
|
name=f"AsyncWorker-{worker_id}",
|
|
296
317
|
daemon=False # Non-daemon so we can properly wait for shutdown
|
|
@@ -19,27 +19,27 @@ matrice_streaming/streaming_gateway/streaming_gateway_utils.py,sha256=6kNYgl3f7H
|
|
|
19
19
|
matrice_streaming/streaming_gateway/streaming_status_listener.py,sha256=RgbW0xYbbpmO6ZjkVlh6fg8iqkpRaIShR2dQ3SMVFUw,3161
|
|
20
20
|
matrice_streaming/streaming_gateway/camera_streamer/ARCHITECTURE.md,sha256=kngsqiS1PdNYhihBoMtoiIf3THJ4OM33E_hxExqzKqY,9980
|
|
21
21
|
matrice_streaming/streaming_gateway/camera_streamer/__init__.py,sha256=nwVY-ySnKvOedeDXakyR_6KPHSz3yzSeaO_4IFMMP4I,2219
|
|
22
|
-
matrice_streaming/streaming_gateway/camera_streamer/async_camera_worker.py,sha256=
|
|
23
|
-
matrice_streaming/streaming_gateway/camera_streamer/async_ffmpeg_worker.py,sha256=
|
|
24
|
-
matrice_streaming/streaming_gateway/camera_streamer/camera_streamer.py,sha256=
|
|
22
|
+
matrice_streaming/streaming_gateway/camera_streamer/async_camera_worker.py,sha256=06fw1wLBls2SOljc8H73QyWTPEhQMzG9S271nwdVCIM,59804
|
|
23
|
+
matrice_streaming/streaming_gateway/camera_streamer/async_ffmpeg_worker.py,sha256=cD3XocWqamkBE9TlkG757OK6tl_Op45r-cMd-ZgJXaA,37063
|
|
24
|
+
matrice_streaming/streaming_gateway/camera_streamer/camera_streamer.py,sha256=zv6tWUKQf2uXAxqtSlfwAVDb9N483VCRApPogUWJ9e8,39113
|
|
25
25
|
matrice_streaming/streaming_gateway/camera_streamer/device_detection.py,sha256=9F4rsbMpIexOIlX8aCj7Q6PFG01kOS1wtgAIQBG0FaM,18463
|
|
26
26
|
matrice_streaming/streaming_gateway/camera_streamer/encoder_manager.py,sha256=guWqNtgGZQBVBxeDlAVnLWTP-hsleWmKYuVcnd0Hvn0,6962
|
|
27
27
|
matrice_streaming/streaming_gateway/camera_streamer/encoding_pool_manager.py,sha256=kYfHu-B8bw9wTFxociAYLVvk-UOC-KqcaFdZ1TQuah4,4222
|
|
28
|
-
matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_camera_streamer.py,sha256=
|
|
28
|
+
matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_camera_streamer.py,sha256=6y1S20yED-UoZregwN_apAL4UmonvNGTeAd2H8rXpPU,37674
|
|
29
29
|
matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_config.py,sha256=fbogEMtmqw4Fae4MS7vL1oQeFy3FkQbJlRGRF_BxIIo,6156
|
|
30
30
|
matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_worker_manager.py,sha256=pzeDcgST8dHZs18Q4PgnR0-4Up8PU1oAOo8Daos_Y2o,17396
|
|
31
31
|
matrice_streaming/streaming_gateway/camera_streamer/frame_processor.py,sha256=UPifhOr7wYpA1ACU4xGzC3A4lmbr2FvohcG371O6FHQ,2255
|
|
32
|
-
matrice_streaming/streaming_gateway/camera_streamer/gstreamer_camera_streamer.py,sha256=
|
|
32
|
+
matrice_streaming/streaming_gateway/camera_streamer/gstreamer_camera_streamer.py,sha256=tLZIfpqVGMoCuzjKe9iJyAMF2mbAlkGWr8wTTjsXz0A,54317
|
|
33
33
|
matrice_streaming/streaming_gateway/camera_streamer/gstreamer_worker.py,sha256=AqKNJ6q_BxFphOlJ2GaS4WpoLCHXLEu5JVvoKQNrGV0,42822
|
|
34
34
|
matrice_streaming/streaming_gateway/camera_streamer/gstreamer_worker_manager.py,sha256=jlKwIWWMXpztdyKiyremGmkVyw9mf2AxEmT7154xnrc,22002
|
|
35
35
|
matrice_streaming/streaming_gateway/camera_streamer/message_builder.py,sha256=W295q6cIm05ReF1ooQus3rsKgZOG3EldZplbQco-OyM,10231
|
|
36
|
-
matrice_streaming/streaming_gateway/camera_streamer/nvdec.py,sha256=
|
|
36
|
+
matrice_streaming/streaming_gateway/camera_streamer/nvdec.py,sha256=A94bIwBC9rX7AJUdNYm9KRoKgiVEgSI5z_0zMpeQZ7g,58503
|
|
37
37
|
matrice_streaming/streaming_gateway/camera_streamer/nvdec_worker_manager.py,sha256=KlcwKFUPVZTQ3J1VIuhPev8Xv9BNw4dj2iLGHrREQCQ,16035
|
|
38
38
|
matrice_streaming/streaming_gateway/camera_streamer/platform_pipelines.py,sha256=UNjsYYWbUJteOq2tzxISFAbWMa2e9GUExSS6fWc2Aow,27303
|
|
39
39
|
matrice_streaming/streaming_gateway/camera_streamer/retry_manager.py,sha256=d8tlGoWoeSlgpCgXbUHTM61ekCQZki7TO1HzL2yPVzk,3607
|
|
40
40
|
matrice_streaming/streaming_gateway/camera_streamer/stream_statistics.py,sha256=VC1S6ogiHUTlzTqn2wGOC1ClOEjvDgWm9Ydi9sWj-Do,18951
|
|
41
41
|
matrice_streaming/streaming_gateway/camera_streamer/video_capture_manager.py,sha256=ySnbihdkpFPcBdFK_OFcHE-MgjG2YirUUYgEJHhvTxo,16899
|
|
42
|
-
matrice_streaming/streaming_gateway/camera_streamer/worker_manager.py,sha256=
|
|
42
|
+
matrice_streaming/streaming_gateway/camera_streamer/worker_manager.py,sha256=LIx6Qt2bTRZDjWw5l5YSIdif-UVxJs_0umu3p2VDF4Y,29086
|
|
43
43
|
matrice_streaming/streaming_gateway/debug/README.md,sha256=6GeHClMjJbmVuSKbJ8yOIDqpeAPnLNrHXMFtmubZz0E,11343
|
|
44
44
|
matrice_streaming/streaming_gateway/debug/__init__.py,sha256=_RtvH0Y12HFiDoKK8BEsMwy6k_iAFjmYYNzMawbOfeQ,2026
|
|
45
45
|
matrice_streaming/streaming_gateway/debug/benchmark.py,sha256=65la9K2mjiiuADCBSnYpPr9uYFnM89clgw-KHkjSkAU,25563
|
|
@@ -49,8 +49,8 @@ matrice_streaming/streaming_gateway/debug/debug_streaming_gateway.py,sha256=ZiDg
|
|
|
49
49
|
matrice_streaming/streaming_gateway/debug/debug_utils.py,sha256=jWcSBgrk_YVt1QzSyw6geX17YBnTvgVdA5ubqO531a0,10477
|
|
50
50
|
matrice_streaming/streaming_gateway/debug/example_debug_streaming.py,sha256=-gS8zNDswAoj6oss66QQWYZhY24usfLiMH0FFK06vV0,7994
|
|
51
51
|
matrice_streaming/streaming_gateway/debug/test_videoplayback.py,sha256=s_dgWkoESiuJHlUAf_iv4d7OGmAhwocwDZmIcFUZzvo,11093
|
|
52
|
-
matrice_streaming-0.1.
|
|
53
|
-
matrice_streaming-0.1.
|
|
54
|
-
matrice_streaming-0.1.
|
|
55
|
-
matrice_streaming-0.1.
|
|
56
|
-
matrice_streaming-0.1.
|
|
52
|
+
matrice_streaming-0.1.70.dist-info/licenses/LICENSE.txt,sha256=_uQUZpgO0mRYL5-fPoEvLSbNnLPv6OmbeEDCHXhK6Qc,1066
|
|
53
|
+
matrice_streaming-0.1.70.dist-info/METADATA,sha256=TkM7S1ddGBeBaOtn_gcuXdZ8kHwpJjb_t5fcDip60OM,2477
|
|
54
|
+
matrice_streaming-0.1.70.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
55
|
+
matrice_streaming-0.1.70.dist-info/top_level.txt,sha256=PM_trIe8f4JLc90J871rNMYGVM3Po9Inx4As5LrCFUU,18
|
|
56
|
+
matrice_streaming-0.1.70.dist-info/RECORD,,
|
|
File without changes
|
{matrice_streaming-0.1.68.dist-info → matrice_streaming-0.1.70.dist-info}/licenses/LICENSE.txt
RENAMED
|
File without changes
|
|
File without changes
|