OpenCV 4.2.0 C ++ - кодирование и потоковая передача H264 - PullRequest
0 голосов
/ 26 марта 2020

В настоящее время я использую OpenCV 4.2 C ++ для кодирования и потоковой передачи выходных сигналов камеры Allied Vision Manta.

Я уже могу захватывать кадр, сжимать его с помощью MJPEG и передавать поток в другой конвейер с использованием OpenCV и GStreamer.

Однако мне нужно попробовать с H.264 (и позже с H.265), но он не работает. Созданы следующие конвейеры в функции VideoWriter:


1 - "appsrc ! queue ! videoconvert ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5015";

2 - "appsrc ! autovideoconvert ! videoconvert ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5015";

С 1-м каналом я получаю:

  [ WARN:0] global /opt/opencv/modules/videoio/src/cap_gstreamer.cpp (1759) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module x264enc0 reported: Can not initialize x264 encoder.
  [ WARN:0] global /opt/opencv/modules/videoio/src/cap_gstreamer.cpp (1665) writeFrame OpenCV | GStreamer warning: Error pushing buffer to GStreamer pipeline 

С 2-м каналом я получаю:

libva info: VA-API version 0.39.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/vmwgfx_drv_video.so
libva info: va_openDriver() returns -1 

Другие аргументы VideoWritter:

cv::CAP_GSTREAMER, 0, 5,  Size(1080, 720), true 

Формат входного пикселя BGR , потому что мне нужно захватить кадры с помощью BayerRG8, а затем преобразовать в BGR в свести к минимуму трафик c.

Приемник сделан с

udpsrc port=5015 ! application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264,framerate=15/1 ! rtph264depay ! decodebin ! videoconvert ! appsink 

Одна деталь, которую я не знаю, важно это или нет, я делаю это в VirtualBox.

...