LINUX.ORG.RU

Захват видео с помощью gstreamer-vaapi: раньше работало, а теперь нет!

 , ,


0

1

Привет Novell-ch! Помнишь, ты мне объяснил как записывать видео с экрана с помощью VAAPI?

С тех пор прошло много времени, и второй чип, встроенный в мой ноутбук - NVIDIA - тоже обрёл поддержку аппаратного кодирования FullHD! Поэтому я ушёл с Gstreamer на ffmpeg. Но недавно случилась беда: видео стало записываться очень ускоренно! А мне хочется кое-что снять... Поэтому я вернулся на Gstreamer...

А он вообще не работает! Вот смотри:

$ sh rec-1.2.sh
Using vaapiencode_h264 encoder
gst-launch-1.0 -e ximagesrc use-damage=0 ! queue ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=30/1 ! queue leaky=downstream ! vaapiencode_h264 ! h264parse ! queue ! matroskamux name=muxer muxer. ! progressreport ! filesink location=/home/zenitur/rec_2015-09-14_030336.mkv
Setting pipeline to PAUSED ...
libva info: VA-API version 0.34.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_34
libva info: va_openDriver() returns 0
Pipeline is live and does not need PREROLL ...
Got context from element 'vaapiencodeh264-0': gst.vaapi.Display=context, display=(GstVaapiDisplay)NULL;
Setting pipeline to PLAYING ...
New clock: GstSystemClock

Так и висит! Файл создаётся и занимает 0 байт.

Что я пробовал делать:

  1. Я сразу вспомнил что из Packman пришло обновление Gstreamer 1.2 до 1.4. Откатил - это стоило мне нескольких часов! Ничего не изменилось! (лог выше - как раз с версией 1.2).
  2. Пересобрал gstreamer-plugins-vaapi. Пересобрал его ещё раз!
  3. Отключил монитор, оставив только ноутбучный - вдруг в этом дело? Нет.
  4. Выключил компиз. Не помогло.
  5. Переключился с MATE на KDE - тоже не помогло.
  6. Полностью убрал участок команды для записи звука - вдруг именно в этом «узкое место»?
  7. Попробовал софтварно - софтварно конечно работает

Opensuse 12.2 (знаю что старый, однако с ним же год назад работало), libva1 1.2.1, intel-vaapi-driver 1.2.0. Gstreamer 1.2 и 1.4.

почему не использовать SSR?

kep ()

Сейчас попробовал в твич вместо файла. Появляется надпись LIVE, но видео не идёт.

ZenitharChampion ★★★★★ ()
GST_DEBUG=4 gst-launch-1.0 -e ximagesrc use-damage=0 ! queue ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=30/1 ! queue ! vaapiencode_h264 ! h264parse ! queue ! matroskamux ! progressreport ! filesink location=/home/zenitur/rec_2015-09-14_030336.mkv

и полный вывод куда-то

Novell-ch ★★★★★ ()
Ответ на: комментарий от Novell-ch

Проблема оказалась в моей неадекватности. Смотри что я сделал: http://i.imgur.com/Do4dUYC.png И забыл спустя кучу времени...

Я помню что я пытался завести VAAPI на i915 на старом нетбуке с Атомом. Для декодинга. Какими умозаключениями я пришёл к выводу, что нужно отключить DRM, я не помню...

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от Novell-ch

А вот нифига. Установил нормальный libva, и попробовал снова. Ничего не получилось. Может я и не устанавливал модифицированную версию...

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Проблема оказалась в моей неадекватности

Добавил в закладки.

anonymous ()
Ответ на: комментарий от ZenitharChampion

GST_DEBUG=vaapi*:7 gst-launch-1.0 -e ximagesrc use-damage=0 ! queue ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=30/1 ! queue ! vaapiencode_h264 ! h264parse ! queue ! matroskamux ! progressreport ! filesink location=/home/zenitur/rec_2015-09-14_030336.mkv

Novell-ch ★★★★★ ()
Ответ на: комментарий от Novell-ch

Сейчас сделаю, только напишу кое-что. Я тут обновил libva и vaapi-driver-intel на парочку версий - с 1.2 до 1.5. Затем пересобрал gstreamer-plugins-vaapi. Ошибка осталась, но лог изменился. Сейчас верну на место старые RPM-ки, и попробую твою команду.

$ sh rec-1.2.sh
Using vaapiencode_h264 encoder
gst-launch-1.0 -e ximagesrc use-damage=0 ! queue ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=30/1 ! queue leaky=downstream ! vaapiencode_h264 ! h264parse ! queue ! matroskamux name=muxer muxer. ! progressreport ! filesink location=/home/zenitur/rec_2015-09-14_203725.mkv
Setting pipeline to PAUSED ...
libva info: VA-API version 0.37.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_37
libva info: va_openDriver() returns 0
Pipeline is live and does not need PREROLL ...
Got context from element 'vaapiencodeh264-0': gst.vaapi.Display=context, display=(GstVaapiDisplay)NULL;
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstXImageSrc:ximagesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstXImageSrc:ximagesrc0:
streaming task paused, reason error (-5)
EOS on shutdown enabled -- waiting for EOS after Error
Waiting for EOS...
ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

так этоу уже почти рабочее на 1.5 проверь

gst-launch-1.0 -e ximagesrc use-damage=0 ! queue ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=30/1 ! queue ! vaapiencode_h264 ! h264parse ! queue ! matroskamux ! progressreport ! filesink location=/home/zenitur/rec_2015-09-14_030336.mkv

а лучше взять с тем что из гитхаба

Novell-ch ★★★★★ ()
Ответ на: комментарий от Novell-ch

С libva 1.5

$ gst-launch-1.0 -e ximagesrc use-damage=0 ! queue ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=30/1 ! queue ! vaapiencode_h264 ! h264parse ! queue ! matroskamux ! progressreport ! filesink location=/home/zenitur/rec_2015-09-14_030336.mkv
Setting pipeline to PAUSED ...
libva info: VA-API version 0.37.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_37
libva info: va_openDriver() returns 0
Pipeline is live and does not need PREROLL ...
Got context from element 'vaapiencodeh264-0': gst.vaapi.Display=context, display=(GstVaapiDisplay)NULL;
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstXImageSrc:ximagesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstXImageSrc:ximagesrc0:
streaming task paused, reason error (-5)
EOS on shutdown enabled -- waiting for EOS after Error
Waiting for EOS...
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Interrupt while waiting for EOS - stopping pipeline...
Execution ended after 0:00:03.589332311
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
$ gst-launch-1.0 -e ximagesrc use-damage=0 ! queue ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=NV12,framerate=30/1 ! queue ! vaapiencode_h264 ! h264parse ! queue ! matroskamux ! progressreport ! filesink location=/home/zenitur/rec_2015-09-14_030336.mkv
Setting pipeline to PAUSED ...
libva info: VA-API version 0.37.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_37
libva info: va_openDriver() returns 0
Pipeline is live and does not need PREROLL ...
Got context from element 'vaapiencodeh264-0': gst.vaapi.Display=context, display=(GstVaapiDisplay)NULL;
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstXImageSrc:ximagesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstXImageSrc:ximagesrc0:
streaming task paused, reason error (-5)
EOS on shutdown enabled -- waiting for EOS after Error
Waiting for EOS...
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Interrupt while waiting for EOS - stopping pipeline...
Execution ended after 0:00:02.741093103
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

Сейчас последовательно обновляю драйвер. Обновил libdrm c 2.4.52 до 2.4.59 (из Opensuse 13.2) и перезагрузился - никак. Теперь буду xf86-video-intel.

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от Novell-ch

Да:

$ vainfo
libva info: VA-API version 0.37.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_37
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.37 (libva 1.5.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Ivybridge Mobile - 1.5.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264StereoHigh         : VAEntrypointVLD
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileJPEGBaseline           : VAEntrypointVLD
ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Жесть какая. Драйвер Intel не обновляется ни в какую! Когда не собралась последняя версия, я решил что были повышены требования к X-Server. Тогда я попробовал пересобрать ту версию, которая у меня уже есть! А именно 2.99.909!

+ /usr/bin/mkdir /home/zenitur/rpmbuild/BUILDROOT/xf86-video-intel-2.99.909-113.1.x86_64
+ cd xf86-video-intel-2.99.909
+ autoreconf -fi
configure.ac:55: error: must install xorg-server macros before running autoconf/autogen.
  Hint: either install from source, git://anongit.freedesktop.org/xorg/xserver or,
  depending on your distribution, try package 'xserver-xorg-dev' or 'xorg-x11-server-devel'
configure.ac:55: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: error: /usr/bin/autom4te failed with exit status: 1
autoreconf: aclocal failed with exit status: 1
ошибка: Неверный код возврата из /var/tmp/rpm-tmp.woXCLf (%build)

Что за ерунда?! Первая мысль - потёрлись -devel файлы! Ну, я сделал вот так, и не помогло!

Обновлено:

checking for DRMINTEL... yes
checking for XORG... no
configure: error: Package requirements (xorg-server >= 1.6 xproto fontsproto pixman-1 >= 0.24 ) were not met:

No package 'xorg-server' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от Novell-ch

Ты случайно не знаешь, какой пакет должен дёрнуть pkgconfig(xorg-server) >= 1.0.99.901? Похоже, у меня он не установлен.

Дополнено: xorg-x11-server-sdk

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 2)
Ответ на: комментарий от ZenitharChampion

Отлично обновил!

[    40.819] (II) LoadModule: "intel"
[    40.819] (II) Loading /usr/lib64/xorg/modules/drivers/intel_drv.so
[    41.010] (II) Module intel: vendor="X.Org Foundation"
[    41.010]    compiled for 1.12.3, module version = 2.99.917
[    41.010]    Module class: X.Org Video Driver
[    41.010]    ABI class: X.Org Video Driver, version 12.0
[    41.010] (EE) module ABI major version (12) doesn't match the server's version (15)
ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Ясненько. По какой-то причине в репозитории X11:Xorg, который я забекапил на HDD, отсутствует пакет xorg-x11-server вообще. Возможно, я бекапил именно в ту минуту, когда пакет был failed to build.

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Обновил xf86-video-intel. Ничего пока не работает.

Остаётся последнее. Сдаётся мне, в тот раз у меня было ядро 3.10, а сейчас 3.16. Буду откатываться. Но это уже завтра...

ZenitharChampion ★★★★★ ()

У меня сохранилось много RPM-ок с предыдущими версиями ядра. Не знаю зачем, но я в совершенстве освоил сборку любой версии ядра под любую версию Opensuse. Установил 3.10.20. DKMS заботливо пересобрал мне модули... И ничего!

Сейчас буду пробовать обновить VAAPI до совсем-пресовсем последней версии! А ещё удалю драйвер NVIDIA. Всё это время он был установлен с параметром --no-opengl-files и считал мне лайткойны. Может в этом дело...

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)

GStreamer это ад какой-то. Как вспомню, аж передёргивает.

i-rinat ★★★★★ ()
Ответ на: комментарий от Novell-ch

Я не знаю что конкретно, но что-то это починило. Последнее, что я сделал, это обновил Gstreamer-plugins-vaapi с версии 0.5.8 до 0.6.0. Проблема в том что я это делал несколько раз до этого... Ещё когда не отдаунгрейдил Gstreamer с 1.2 до 1.4, потому что 0.5.8 не поддерживал GST API 1.4, а 0.5.9, 0.5.10 и 0.6.0 поддерживают.

ZenitharChampion ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.