Задача стояла следующая — воспроизведение видео h264 из видеопотока по протоколу rtsp приложением написанным на QT5. Целевая платформа SECO Q7-BT (Q974-5410-2100-IO) с i386 архитектурой процессора. Штатный QT gstmutlimedia-plugins из коробки собран с gstreamer-0.10 который не поддерживает VA-API, из-за чего декодирование и воспроизведение видеопотока h264 осуществляется программными методами без использования аппаратных возможностей и работает крайне медленно. Целевая платформа Linux Ubuntu 14.04 i386.
1 Сборка GStreamer 1.6.1
Сборка будет вестись в отдельный каталог, что позволит в будущем легко перенести и подключить полученные бинарные файлы на другую систему.
1.1 Подготовка к сборке, установка необходимых пакетов:
1 |
sudo apt-get install libx264-dev libgudev-1.0-dev libusb-1.0-0-dev yasm |
1.2 Установка переменных окружения:
Создайте и исполните скрипт с следующим содержимым:
1 2 3 4 5 |
PFX=/opt/gst export PATH=$PATH:$PFX/bin export LD_RUN_PATH=$LD_RUN_PATH:$PFX/lib export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PFX/lib/pkgconfig export GST_PLUGIN_PATH=$PFX/lib/gstreamer-1.0 |
В данном случае /opt/gst — директория куда будет собран GStreamer. Если вы используете данную директорию не забудьте что для операций make install вам понадобятся права root.
2. Сборка ORC
Загрузите последнюю версию ORC http://gstreamer.freedesktop.org/src/orc/ распакуйте архив и выполните:
1 2 3 |
./configure -- prefix=/opt/gst make sudo make install |
3. Сборка gstreamer
Загрузите последнюю версию gstreamer http://gstreamer.freedesktop.org/src/gstreamer/ распакуйте и выполните действия аналогичные прошлому пункту.
4. Сборка плагинов gstreamer.
Загрузите последние версии плагинов base, good, bad и ugly соответственно с:
http://gstreamer.freedesktop.org/src/gst-plugins-base/
http://gstreamer.freedesktop.org/src/gst-plugins-good/
http://gstreamer.freedesktop.org/src/gst-plugins-bad/
http://gstreamer.freedesktop.org/src/gst-plugins-ugly/
Распакуйте и соберите в выше приведённом порядке выполнив:
1 2 3 |
./configure --prefix=/opt/gst —enable-orc make sudo make install |
5. Сборка gst-libav
Загрузите последнюю версию gst-libav http://gstreamer.freedesktop.org/src/gst-libav/
распакуйте и выполните действия аналогичные предыдущему пункту.
2. Сборка QT5
Загрузите последний архив с исходниками http://download.qt.io/official_releases/qt/5.5/
и распакуйте его.
Создайте конфигурационный скрипт config.i386:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/sh PFX=/opt/gst export PATH=$PATH:$PFX/bin:$PFX/include:$PFX/include/gstreamer-1.0 export LD_RUN_PATH=$LD_RUN_PATH:$PFX/lib export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PFX/lib/pkgconfig export GST_PLUGIN_PATH=$PFX/lib/gstreamer-1.0 ./configure -v -opensource -confirm-license -xplatform linux-g++-32 \ -I $PFX/include \ -I $PFX/include/gstreamer-1.0 \ -prefix /opt/Qt5.5.1-i386 -gstreamer 1.0 |
В данном случае сборка будет вестись в целевой каталог /opt/Qt5.5.1-i386
Выполните скрипт, при успешном конфигурировании в результате в таблице модулей QT должна быть строка:
1 |
GStreamer .............. yes (1.0) |
Далее выполните make & sudo make install
Будьте готовы что операция сборки может занять до нескольких часов!
3. Запуск QT приложения.
Для запуска приложения желательно сделать исполняемый скрипт или же прописать объявления по умолчанию. Для указанных выше настроек и путей скрипт будет иметь следующий вид:
1 2 3 4 5 6 7 8 9 10 |
export LD_LIBRARY_PATH=/opt/Qt5.5.1-i386/lib export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt5.5.1-i386/plugins/ PFX=/opt/gst export PATH=$PATH:$PFX/bin export LD_RUN_PATH=$LD_RUN_PATH:$PFX/lib export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PFX/lib/pkgconfig export GST_PLUGIN_PATH=$PFX/lib/gstreamer-1.0 ./ИСПОЛНЯЕМЫЙ_ФАЙЛ |
Где ИСПОЛНЯЕМЫЙ_ФАЙЛ название файла вашей программы расположенной в той же директории что и скрпит.
В случае ошибоки:
1 |
QtMultimedia : defaultServiceProvider::requestService(): no service found for — "org.qt-project.qt.mediaplayer" |
Проверьте следующее:
1) Установлен ли пакет libqt5multimedia5-plugins
2) Есть ли в папке /opt/Qt5.5.1-i386/plugins/mediaservice/ файлы libgstmediaplayer.so, libgstaudiodecoder.so, libgstcamerabin.so, libgstmediacapture.so. В случае их отстутствия пересоберите Qt с поддержкой multimedia