Я создаю программу, которая использует ffmpeg для потоковой передачи содержимого веб-камеры через Интернет. Я хотел бы знать, можно ли использовать графический процессор для потоковой передачи на модели raspberry pi 3. Если да, то как я могу реализовать это на ffmpeg?
Аппаратное ускорение FFmpeg на Raspberry PI
Ответы (2)
Вам понадобятся некоторые дополнительные параметры настройки:
--enable-mmal
— Включить уровень мультимедийной абстракции Broadcom (Raspberry Pi) через MMAL. Для аппаратного декодирования H.264, VC-1, MPEG-2, MPEG-4. В качестве зависимости вам понадобится пакет linux-raspberrypi-headers (Arch Linux) или linux-headers-*-raspi2 (Ubuntu), который предоставляет необходимый заголовочный файлmmal.h
.--enable-omx-rpi
— включить код OpenMAX IL для Raspberry Pi. Для аппаратного кодирования H.264 (кодировщик называетсяh264_omx
) и MPEG-4 (mpeg4_omx
). В качестве зависимости вам понадобится пакет libomxil-bellagio (Arch Linux) или libomxil-bellagio-dev (Ubuntu), который предоставляет необходимый заголовочный файлOMX_Core.h
.
Для пользователей Arch Linux:
Скопируйте файл PKGBUILD для пакета ffmpeg (возможно, через ABS, если хотите). Добавьте две новые опции конфигурации, показанные выше, и добавьте два упомянутых пакета в строку depends
. Скомпилируйте/установите с помощью команды makepkg
.
Отказ от ответственности: у меня нет ни одного из этих устройств, чтобы протестировать что-либо из этого. Большая часть этой информации была получена из файла FFmpeg configure
.
Пакет ffmpeg от apt теперь поставляется с включенными аппаратными кодеками, поэтому вы можете просто установить его, используя:
apt install ffmpeg
В Pi есть несколько аппаратных кодеков, в зависимости от вашей модели. Вот выдержка из этого подробного сообщения/треда на форуме Raspberry Pi а>:
Pi0-3 имеют аппаратное ускорение декодирования для H264, MPEG4, H263, а также дополнительные лицензии на кодеки для MPEG2 и VC1.
Pi4 имеет такое же аппаратное ускорение декодирования для H264, но не для других кодеков. Он также имеет отдельный блок для HEVC.
Существует несколько API (v4l2m2m, VAAPI, OMX, MMAL,...) для доступа к аппаратным кодекам, но основным теперь является Интерфейс видеопамяти в память на основе h264_v4l2m2m
, а также [более старый] h264_omx
на основе OMX и другие. Полный список кодеков для кодирования и декодирования:
ffmpeg -codecs
Примечание. Если вы изменили настройку gpu_mem
в /boot/config.txt
, она должна быть больше 16, иначе вы получите ошибку со всеми аппаратными кодеками.