Вопрос или проблема
Я разрабатываю мультимедийный плеер с использованием 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.