В настоящее время у меня небольшая проблема с GStreamer. Более подробная информация:
Конфигурация:
- Intel i7-6700
- Intel HD Graphics 530
- Ubuntu 18.04 LTS
- GStreamer1.0
- Плагин VAAPI
Я получаю поток UDP
от источника видео, этот поток отправляется в формате RAW
UYVY
. Вот моя командная строка для декодирования:
gst-launch-1.0 -v udpsrc port="1234" caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:2, depth=(string)8, width=(string)1920, height=(string)1080, colorimetry=(string)BT709-2, payload=(int)96, ssrc=(uint)1188110121, timestamp-offset=(uint)4137478200, seqnum-offset=(uint)7257, a-framerate=(string)25" ! rtpvrawdepay ! decodebin ! queue ! videoconvert ! xvimagesink
Проблема, как мы видим на скриншоте ниже, загрузка CPU
(справа) слишком высока для такого рода задача, и мы можем увидеть нагрузку GPU
(слева), которая почти равна нулю.
Чтобы преодолеть эту проблему, я хочу использовать VAAPI графическое ускорение, как я делал в предыдущем проекте с H264
, из которых ниже приведена командная строка:
gst-launch-1.0 -v udpsrc port=1234 caps= "application/x-rtp, media\=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)640028, payload=(int)96, ssrc=(uint)2665415388, timestamp-offset=(uint)3571350145, seqnum-offset=(uint)18095, a-framerate=(string)25" ! rtph264depay ! queue ! vaapih264dec low-latency=1 ! autovideosink
Линия выше работает отлично, а CPU
почти не имеет больше нагрузок. Поэтому я адаптирую эту командную строку для использования ее с потоком RAW
, вот команда:
gst-launch-1.0 -v udpsrc port="1234" caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:2, depth=(string)8, width=(string)1920, height=(string)1080, colorimetry=(string)BT709-2, payload=(int)96, ssrc=(uint)1188110121, timestamp-offset=(uint)4137478200, seqnum-offset=(uint)7257, a-framerate=(string)25" ! rtpvrawdepay ! vaapidecodebin ! videoconvert ! xvimagesink
Это та же строка, что и в начале, но я изменил элемент decodebin
на vaapidecodebin
, как я заменил avdec_h264
на vaapih264dec
для моего H264
потока. К сожалению, это не работает, и я в конечном итоге с этой ошибкой:
WARNING: wrong pipeline: unable to connect rtpvrawdepay0 to vaapidecodebin0
Как я могу решить эту проблему? Есть ли у вас какие-либо способы решения этой проблемы?