как получить аппаратное ускорение vdpau с помощью ffmpeg на ubuntu?

Вопрос или проблема

Я разрабатываю мультимедийный плеер с использованием ffmpeg. Я прилагаю все усилия, чтобы получить аппаратное ускорение через ffmpeg с использованием аппаратного ускорителя vdpau. Пока что мне не удалось достичь успеха. Ниже я указал данные о характеристиках моей системы, программном обеспечении и ошибке командного инструмента ffmpeg. Пожалуйста, не стесняйтесь комментировать, если вам нужна дополнительная информация. Любые быстрые предложения будут очень полезны.

Вот спецификации моего аппаратного обеспечения:
Процессор: Intel® Core™ i5-4570 CPU @ 3.20GHz × 4 
Графика: GeForce GTX 750 Ti/PCIe/SSE2
ОС: Ubuntu-14.04 64bit
Память: 8GiB

Программное обеспечение:
ffmpeg-2.8.1

другие полезные логи:
1. Найдите доступные аппаратные ускорители в ffmpeg

./ffmpeg -hwaccels

версия ffmpeg 2.8.1 Copyright (c) 2000-2015 разработчики FFmpeg
  собран с помощью gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  конфигурация: --enable-shared
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
Методы аппаратного ускорения:
vdpau

2. Декодирование с аппаратным ускорением с использованием ffmpeg

./ffmpeg -hwaccel vdpau -i /tmp/test.mp4 /tmp/test.ts

Лог ошибок:

libva информация: VA-API версия 0.35.0
libva информация: va_getDriverName() возвращает 0
libva информация: Пытаюсь открыть /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so
libva информация: va_openDriver() возвращает -1

3. Команда: lspci -vnn | grep -i VGA -A 12

01:00.0 VGA совместимый контроллер [0300]: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] [10de:1380] (rev a2) (prog-if 00 [VGA контроллер])
    Подсистема: ZOTAC International (MCO) Ltd. Устройство [19da:288a]
    Флаги: мастер шины, быстрая селекция устройства, задержка 0, IRQ 48
    Память на f6000000 (32-бит, не поддерживает предварительную выборку) [размер=16M]
    Память на e0000000 (64-бит, поддерживает предварительную выборку) [размер=256M]
    Память на f0000000 (64-бит, поддерживает предварительную выборку) [размер=32M]
    Порты ввода/вывода на e000 [размер=128]
    [виртуальная] Расширяемая ROM на f7000000 [отключена] [размер=512K]
    Возможности: 
    Драйвер ядра в использовании: nvidia

01:00.1 Аудиоустройство [0403]: NVIDIA Corporation Устройство [10de:0fbc] (rev a1)
    Подсистема: ZOTAC International (MCO) Ltd. Устройство [19da:288a]

Согласно документации здесь,

Для того чтобы это включить, вам обычно нужен пакет разработки libvdpau в вашем дистрибутиве и совместимая видеокарта.

Обратите внимание, что VDPAU не может использоваться для декодирования кадров в памяти, сжатые кадры отправляются libavcodec на графический процессор, поддерживающий VDPAU, и затем декодированное изображение может быть доступно с использованием API VDPAU. Это не делается автоматически FFmpeg, а должно выполняться на уровне приложения (проверьте, например, файл ffmpeg_vdpau.c, используемый в ffmpeg.c). Также обратите внимание, что с помощью этого API невозможно переместить декодированный кадр обратно в ОЗУ, например в случае, если вам нужно снова закодировать декодированный кадр (например, при транскодировании на сервере).

В настоящее время через API VDPAU в libavcodec поддерживается несколько декодеров, в частности H.264, MPEG-1/2/4 и VC-1.

Вывод mediainfo videofile должен пролить некоторый свет на то, поддерживается ли используемый кодек, однако таблица реализаций FFMpeg в упомянутой документации указывает на то, что VDPAU устарел по техническим причинам и его не следует использовать.

Мне больше нечего добавить, но надеюсь, что эта информация полезна хотя бы в чем-то.

Ответ или решение

Для обеспечения аппаратного ускорения видеодекодирования с использованием VDPAU через FFmpeg в Ubuntu, необходимо выполнить несколько шагов, учитывая спецификации вашей системы и уже предоставленную вами информацию.

1. Установка необходимых пакетов

Первым делом необходимо установить все необходимые пакеты, включая библиотеки, которые обеспечивают поддержку VDPAU. Вы можете воспользоваться следующей командой:

sudo apt-get update
sudo apt-get install nvidia-driver-<ваша_версия> vdpau-va-driver libvdpau1 libvdpau-dev

Где <ваша_версия> – это версия драйвера NVIDIA, подходящая для вашей видеокарты GeForce GTX 750 Ti. Возможно, для более новых систем или версий драйверов потребуется командная строка, подобная следующей:

sudo apt-get install nvidia-driver nvidia-settings libvdpau1 libvdpau-dev

Также убедитесь, что у вас установлены последние версии FFmpeg и библиотеки, обновив их через PPA или с помощью компиляции из исходников.

2. Проверка установки драйвера

После установки драйвера, убедитесь в корректности его работы. Проверьте установленные драйвера с помощью команды:

nvidia-smi

Это должно отобразить информацию о вашей видеокарте и используемом драйвере.

3. Проверка поддержки VDPAU в FFmpeg

Вы уже проверяли наличие поддержки VDPAU, используя команду:

./ffmpeg -hwaccels

Если в результате выполнения команды присутствует строка vdpau, это говорит о том, что поддержка VDPAU активирована.

4. Декодирование видео с использованием VDPAU

Для успешной работы с аппаратным ускорением VDPAU, ваша команда для FFmpeg должна выглядеть так:

ffmpeg -hwaccel vdpau -i /tmp/test.mp4 -c:v h264_vdpau -f mpegts /tmp/test.ts

Обратите внимание на использование -c:v h264_vdpau, что явно указует на использование VDPAU для декодирования H.264.

5. Возможные ошибки и их устранение

Ваша ошибка va_openDriver() returns -1 может возникать из-за некорректной конфигурации или отсутствия нужных библиотек. Убедитесь, что у вас установлены правильные библиотеки VDPAU и что ваша видеокарта поддерживает VDPAU. Попробуйте также удалить все старые конфигурации и переустановить драйвера.

6. Альтернативные подходы

Если вы продолжаете сталкиваться с проблемами, возможно, стоит рассмотреть использование других методов аппаратного ускорения, таких как VAAPI, для лучших результатов. Для этого вам понадобятся другие драйвера и настройки.

Заключение

Работа с аппаратным ускорением при использовании FFmpeg требует внимательности и точности в установке и конфигурации программного обеспечения. Следуя приведённым шагам, вы сможете успешно настроить VDPAU и использовать его в вашем мультимедийном проекте. Если после выполнения всех действий проблема остается нерешённой, возможно, следует обратиться к специализированным форумам, на которых обсуждаются вопросы, связанные с мультимедиа и FFmpeg.

Оцените материал
Добавить комментарий

Капча загружается...