Надеюсь, у всех все отлично.
Я пытаюсь сделать потоковое видео RTSP отображение , а также хранилище . как показано на следующем рисунке.
Схема работы Приведенный ниже конвейер Gstreamer отлично работает для следующих двух задач.
Захват, декодирование и отображение.
Захват и сохранение тот же поток в файл ( без какой-либо операции декодирования ).
gst-launch-1.0 -e rtspsr c location = rtsp: // admin:888888@192.168.5.21: 5001 / udp / av0_0! rtph264depay! h264parse! имя тройника = т! очередь ! omxh264de c! видеоконвертировать! очередь ! autovideosink sync = false async = false t. ! очередь ! mp4mux! filesink location = out.mp4
Теперь, чтобы обработать фреймы, я должен выполнить аналогичную задачу выше в программировании C ++ / OpenCV,
- Захват RTSP-кодированный видеопоток, декодирование и процесс ит.
- Захват & Сохранять входящий закодированный видеопоток RTSP в файл без выполнения операции декодирования над ним с использованием программирования openCV / C ++.
The первая задача выполняется с использованием кода OpenCV, показанного ниже.
VideoCapture cap("rtspsrc location=rtsp://admin:888888@192.168.5.21:5001/udp/av0_0 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! appsink sync=false async=false",cv::CAP_GSTREAMER);
cap.read(img);
process(img);
- Проблема Я пробовал несколько способов выполнить вторую задачу , но я не смог это сделать.
Я пробовал следующий код, который может сохранять видеопоток в файле, но не может воспроизводить сохраненные output.mp4 файл из-за неправильных фреймов для хранения.
cv::VideoCapture cap ("-e rtspsrc location=rtsp://admin:888888@192.168.5.21:5001/udp/av0_0 ! rtph264depay ! h264parse ! tee name=t ! queue ! omxh264dec ! videoconvert ! queue ! appsink t. ! queue ! filesink location=out.mp4");
cap.read(img);
process(img);
cv::imshow(img);
Был бы очень признателен, если бы кто-нибудь мог помочь мне сделать это ond (захват и сохранение входного закодированного потока в файл).