Как добавить / использовать двоичную библиотеку GStreamer с Qt C ++ на Android? - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь использовать библиотеку Gstreamer на нескольких платформах с моим проектом Qt (только для аудио). Он уже работает на macOS с бинарными файлами , доступными онлайн , просто добавив фреймворк в мой файл .pro:

LIBS += -F$$PWD/macOS/libs/ -framework GStreamer
INCLUDEPATH += $$PWD/macOS/libs/GStreamer.framework/Versions/1.0/Headers
DEPENDPATH += $$PWD/macOS/libs/GStreamer.framework/Versions/1.0/include

Но теперь я хочу использовать двоичные файлы, доступные на той же странице для Android. Но поскольку он не «связан» в рамках, как в OS X, я не могу добавить его так легко. Кроме того, официальные объяснения сделаны для сборки gradle (которую я ничего не знаю и не использую в Qt creator) и для использования в Java. Но, поскольку я хочу напрямую использовать C API в Qt C ++, мне не нужен JNI, и я хотел бы напрямую использовать библиотеку в своем приложении, как в OSX.

Таким образом, я попытался добавить библиотеку, как сделал бы это на любом другом linux, но рекурсивно, поскольку существует множество папок библиотеки и заголовков:

    contains(ANDROID_TARGET_ARCH,arm64-v8a) {
        ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android

        GSTREAMER_INCLUDE_FILES = $$files($$PWD/android/libs/gstreamer/arm64/include/*, true)
        for(FILE, GSTREAMER_INCLUDE_FILES) {
            BASEDIR = $$dirname(FILE)
            if(!contains(INCLUDEPATH, $$BASEDIR)){
                INCLUDEPATH += $$BASEDIR
            }
        }

        GSTREAMER_DEPEND_FILES = $$files($$PWD/android/libs/gstreamer/arm64/include/*, true)
        for(FILE, GSTREAMER_INCLUDE_FILES) {
            BASEDIR_DEP = $$dirname(FILE)
            if(!contains(DEPENDPATH, $$BASEDIR_DEP)){
                DEPENDPATH += $$BASEDIR_DEP
            }
        }

        GSTREAMER_LIB_FILES = $$files($$PWD/android/libs/gstreamer/arm64/lib/*.a, true)
        for(FILE, GSTREAMER_LIB_FILES) {
            BASENAME = $$basename(FILE)
            LIBS += -l$$replace(BASENAME,\.a,)
        }
    } 

Но когда я пытаюсь включить

#include <gst/gst.h>

, он не работает и выдает 37 ошибок на неизвестных элементах глобального пространства имен, связанных с управлением временем, таких как:

/Users/user/Library/Android/sdk/ndk/19.2.5345600/sources/cxx-stl/llvm-libc++/include/ctime:70:9: error: no member named 'asctime' in the global namespace
using ::asctime;
      ~~^

Я действительно не знаю, как использовать gstreamer и связать его для Android из доступных официальных двоичных файлов, и я не хочу использовать какую-либо оболочку, такую ​​как qt-gstreamer (которая, кстати, не поддерживается) или JNI.

Спасибо за любую помощь или вклад!

...