DOCUMENT PIPELINE DEEPSTREAM Phần 1
** Đây là phần giải thích về nội dụng, khái niệm, input và output của từng thành phần có trong pipeline của DS đơn giản **
DECODE
Nhiệm vụ:
- Bộ giải mã chịu trách nhiệm chuyển đổi các luồng video từ SOURCE đã nén (thường các luồng video real-time đều được nén lại để có thể truyền nhanh trong thực tế) → thành các dạng dữ liệu thô (raw frames) có thể xử lý được bởi các thành phần sau của pipeline.
- Dạng dữ liệu nén thường là H.264, H.265, MJPEG..
- Dữ liệu thô: RGBA, NV12, I420…
Quá trình xử lý:
INPUT:
- Đầu vào của DECODE sẽ nhận các nguồn như file video(MP4, MKV), camera IP, luồng rtsp…
PROCESSING (Tùy thuộc vào plugin mà cách xử lý sẽ khác nhau) → Ở đây mình dùng GST-NVURISRCBIN của NVIDIA
- Cấu trúc sơ lược của GST-NVURISRCBIN
- Source element: đây là cái sẽ trực tiếp nhận dữ liệu
- Demuxer: Tách các thành phân dữ liệu ra (video, audio) nếu có
- Decoder: Giải mã thành các raw frames
- Xử lý chi tiết:
- Khi luồng dữ liệu đầu vào đi qua source element nó sẽ tự động nhận diện bằng cách:
- RTSP: rtsp://
- File: file://
- Demuxer: nếu luồng dữ liệu có nhiều hơn 1 dạng dữ liệu thì nó sẽ tách video để giải mã
- Decoder: sử dụng GPU tối ưu của NVIDIA để giải nén nhanh chóng
- Khi luồng dữ liệu đầu vào đi qua source element nó sẽ tự động nhận diện bằng cách:
OUTPUT:
- Đầu ra cuối cùng của DECODE sẽ là các dạng dữ liệu thô như: NV12, RGBA…
STREAMMUX
1. Khái niệm:
- Là thành phần chịu trách nhiệm chính cho việc kết hợp nhiều luồng video từ DECODE thành một luồng duy nhất nhằm mục tiêu là chuẩn hóa tất cả các nguồn file về đúng kích thước, tốc độ, định dạng được config sẵn để xử lý dữ liệu một cách đồng bộ và hiệu quả.
2. INPUT:
- Đầu vào của GST-NVSTREAMMUX là các dữ liệu thô được giải nén từ GST-NVURISRCBIN (nếu như có nhiều hơn 1 luồng dữ liệu thì mỗi luồng dữ liệu cần phải thêm source_id vào)
Các tham số quan trọng:
batch-size
:- Số lượng luồng video tối đa mà StreamMux có thể xử lý đồng thời.
- Mỗi luồng cần được kết nối tới một
sink pad
củanvstreammux
.
live-source
:- Bật chế độ xử lý thời gian thực khi xử lý luồng từ camera (RTSP).
- Nếu các nguồn không phải là thời gian thực (như video file), đặt giá trị là
0
.
batched-push-timeout
:- Thời gian chờ (tính bằng microseconds) để gom batch từ các nguồn vào trước khi gửi đến output.
- Thông số này ảnh hưởng đến độ trễ tổng thể.
3. OUTPUT:
- Một luồng dữ liệu duy nhất chứa tất cả các frames tổng hợp từ đa luồng từ DECODE
- Các khung hình sẽ được trả về đồng bộ:
- Kích thước
- Tốc độ khung hình
- Định dạng (NV12 or RGBA)
- Metadata:
- Source ID
- Timestamps
- Batch Metadata
Pipeline mẫu cho RTSP Stream:
gst-launch-1.0 \
rtspsrc location=rtsp://camera1/stream ! decodebin ! video/x-raw(memory:NVMM),format=NV12 ! mux.sink_0 \
rtspsrc location=rtsp://camera2/stream ! decodebin ! video/x-raw(memory:NVMM),format=NV12 ! mux.sink_1 \
nvstreammux name=mux batch-size=2 width=1280 height=720 live-source=1 batched-push-timeout=40000 ! ...
4. Các lưu ý khi sử dụng GST-NVSTREAMMUX
- Tương thích định dạng đầu vào:
- Khung hình phải sử dụng bộ nhớ GPU (
memory:NVMM
) để tương thích vớinvstreammux
.
- Khung hình phải sử dụng bộ nhớ GPU (
- Đồng bộ hóa nguồn live:
- Khi xử lý live sources (RTSP, camera), cần đặt
live-source=1
và cấu hìnhbatched-push-timeout
phù hợp.
- Khi xử lý live sources (RTSP, camera), cần đặt
- Cấu hình kích thước đầu ra:
- Kích thước khung hình (
width
,height
) nên được đặt thống nhất với mô hình hoặc thành phần xử lý tiếp theo.
- Kích thước khung hình (
- Giới hạn batch size:
- Batch size quá lớn có thể gây quá tải GPU, đặc biệt khi làm việc với độ phân giải cao.
Đây là 2 trong số 4 phần cơ bản của một pipeline của Deepstream, mình sẽ sớm ra thêm phần còn lại của Deepstream nha mọi người.
All rights reserved