LINUX.ORG.RU

Аппаратное кодирование с помощью не активной видеокарты

 , ,


2

2

Всем привет. Я решил попробовать аппаратное кодирование в H264 с помощью VAAPI. У меня Optimus: Intel HD 4000 и NVIDIA GeForce 650M. Установил gstreamer-devel из репозитория и gstreamer-vaapi вручную. Пробую кодировать:

$ LD_LIBRARY_PATH=/usr/local/lib64 LIBVA_DRIVER_NAME=i965 gst-launch-1.0 -f ximagesrc use-damage=0 ! videoconvert ! video/x-raw,format=NV12,framerate=24/1 ! vaapiencode_h264 ! progressreport ! avimux ! filesink location=/media/disk-1/desktop/test.avi
Установка конвейера в состояние 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
gst-launch-1.0: intel_driver.c:80: intel_driver_init: Проверочное утверждение «(((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_DRI1)) || (((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_DRI2)) || (((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_CUSTOM))» не выполнено.
Аварийный останов
$ LIBVA_DRIVER_NAME=i965 h264encode


INPUT:Try to encode H264...
INPUT: RateControl  : VBR
INPUT: Resolution   : 176x144, 60 frames
INPUT: FrameRate    : 30
INPUT: Bitrate      : 182476
INPUT: Slieces      : 1
INPUT: IntraPeriod  : 30
INPUT: IDRPeriod    : 60
INPUT: IpPeriod     : 1
INPUT: Initial QP   : 26
INPUT: Min QP       : 0
INPUT: Source YUV   : AUTO generated
INPUT: Coded Clip   : /tmp/test.264
INPUT: Rec   Clip   : Not save reconstructed frame


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
h264encode: intel_driver.c:80: intel_driver_init: Assertion `(((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_DRI1)) || (((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_DRI2)) || (((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_CUSTOM))' failed.
Аварийный останов

А это обязательно - поднять иксы на видеокарте, на которой будет осуществляться кодирование? Просто когда на NVIDIA не подняты иксы, CUDA спокойно работает. На Intel сейчас работает драйвер modesetting вместо intel, я думаю многие узнали в моей конфигурации официальный Optimus от NVIDIA. Неужели придётся менять его на Bumblebee?

Попробовал пересобрать gstreamer-vaapi и vaapi-intel без поддержки DRM. Не работает! Ошибка та же. Сейчас на время выключил NVIDIA и включил Intel - работает, кодирует. Ещё бы звук научить записывать, но это завтра.

ZenitharChampion ★★★★★ ()

если запустить второй хсервер с драйвером интел то должно работать

anonymous ()

от дефолтного gsteamer толку мало, да интел или амд могут аппаратно кодировать h264 но videoconvert сжирает очень много процесорного времени,
Как можно затюнинговать этот участок кода?
вот тут силами лора были написаны патчи которые ускоряют videoconvert в десяток раз, и тогда от аппаратного кодирования уже будет польза.
патченый gstreamer-plugins-base можно нати здесь
https://build.opensuse.org/package/show/home:pontostroy:branches:multimedia:l...

для NV12 используется табличное64 умножение(хотя можно взять и sse)
для I420 от simplesreenrecodera

поэтому для иетела бычтрее будет использовать video/x-raw,format=I420,framerate=24/1

Звук пишется тож без проблем, но только через пульсу, как с альсы писать я не осилил.

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

Спасибо, всё сделаю :-) Ты случайно не знаешь, Steam In-home Streaming под Linux может это задействовать? Хочу на нетбуке поиграть, там есть VAAPI декодирование.

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

врятли там наверно свой велосипед, и без аппаратной поддержки, а вообще через rtp можно гонять видео, на одной стороне сжимать аппаратно на другой декодировать, тут проблем нет, как быть с управлением хз.

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

Не могу найти новость на ЛОРе про Steam In-home Streaming, там было написано что сервер должен иметь аппаратное кодирование, а клиент - декодирование. Поэтому вот новость на опеннете, но там про это ничего нет.

Ну да ладно, наложу твои патчи, затем настрою Твич и побуду первым в России линуксоидом-летсплейщиком. Шучу: на интеле, который будет занят кодированием, можно будет поиграть разве что в Майнкрафт. Может отправить фич-риквест в xserver-xorg-video-modesetting? «Добавьте поддежрку vaapi-driver-intel». Уверен что разработчики сейчас другим заняты - прикручивают DRI и OpenGL, чтобы победить «эффект лесенки».

Щас буду Бамблби ставить! Ты случайно не знаешь, он умеет DRI-PRIME и DMA-BUF? Мне почему-то кажется что нет, а потому сильно грузится системная шина.

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

на твич не идет этот поток, он требует h264 а этот vaapi отдает в avc хотя вроде это же одно и тоже твич матюкается так, звук я не даю, но видео то h264 Details Video codec must be set to h.264 (it is currently «CodecId_Avc») Audio codec must be set to MP3 or AAC (it is currently «unknown») шлю в твич такой пайплайн

gst-launch-1.0 -e  ximagesrc use-damage=0 ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=5/1 ! queue leaky=downstream ! vaapiencode_h264  ! h264parse ! flvmux streamable=true ! queue leaky=downstream ! rtmpsink location=rtmp://live.justin.tv/app/$TWICHKEY

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

С помощью Gstreamer, Pulseaudio (позор мне), твоего патча и скрипта для записи я записал свой первый летсплей (позор мне). Видео немного деформировано: снизу отрезан сантиметр и на освободившееся место видео растянуто по-вертикали. Без патчей так же.

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

Для внуков, таки осилил твич

gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=NV12,framerate=25/1 ! queue leaky=downstream ! omxh264enc  ! h264parse ! queue ! flvmux name=muxer pulsesrc device=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor ! queue ! voaacenc bitrate=128000 ! aacparse ! queue ! muxer. muxer. ! rtmpsink location="twich_key"

omxh264enc и format=NV12 заменить на какие удобно. так же можно софтово, в нете пишут что для твича нужно что-то типа такого x264enc bitrate=1768 speed-preset=faster qp-min=30 tune=zerolatency с патченым гстреамером это лучшее стредство для твича походу под линукс.

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

А я осилил ALSA. Правда, пока только на Creative Audigy, а на интеграшке пока нет.

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