Sure, Ill share it to you on the weekend. RN Il have tons of pending work
I have a working project which uses qt + android + gstreamer ( c++ ) , the issue started when I tried to use qmlsink
Hello mate. I really appreciate your help. But thé main problem is not compiling gstreamer android. The main problem is linking qt libraries to gstreamer by compiling gstreamer-1.0qt5 package. Nevertheless when I make It work. Ill send you a message to collaborate
Hello to everyone. I´ve been strugling for many days and I can not find a solution. I hope you could help me. I've been using gstreamer on Android for a long time. I would like to render a video on a qml item. So i found qmlglsink.
Relevant note: I'm writing a beginners guide of how to use gstreamer on Android with qt support Audio / Video. By using Android Activity ( Native window ) And qmlglsink ( When we find a working solution )
First at all I build the package with te following command :
./cerbero-uninstalled -v qt5 -c config/cross-android-universal.cbc package gstreamer-1.0 ( BTW I set the qmake path to : /opt/Qt/5.15.2/android/bin )
Then I uncompress the generated tar package. And I link it to my cmake... At this point I have 2 big questions: 1 - The ndk path should be pointing to: /cerbero/build/android-ndk-25 or my "normal" used ndk ( In the 2 ways i got the same error) 2 - The second generated tar package ( runtime ) . Whats its purpose? Should I Use it?
CMAKE PARAMS
-GNinja -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake -DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} -DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} -DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} -DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} -DANDROID_NATIVE_API_LEVEL:STRING=21 -DANDROID_NDK:PATH=/home/diego/Android/Sdk/ndk/21.3.6528147 -DCMAKE_TOOLCHAIN_FILE:PATH=/home/diego/Android/Sdk/ndk/21.3.6528147/build/cmake/android.toolchain.cmake -DANDROID_ABI:STRING=arm64-v8a -DANDROID_STL:STRING=c++_shared -DCMAKE_FIND_ROOT_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DANDROID_SDK:PATH=/home/diego/Android/Sdk
CMAKE
cmake_minimum_required(VERSION 3.5)
project(TestAndroidVideo LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)
message(STATUS ${ANDROID_ABI} ) message(STATUS ${ANDROID_BUILD_ABI_arm64-v8a})
if ( ANDROID_ABI STREQUAL "armeabi-v7a" ) set(GSTREAMER_ARCH_FOLDER armv7) elseif( ANDROID_ABI STREQUAL "arm64-v8a" ) set(GSTREAMER_ARCH_FOLDER arm64) elseif( ANDROID_ABI STREQUAL "x86" ) set(GSTREAMER_ARCH_FOLDER x86) endif()
message(STATUS "GSTREAMER_ARCH_FOLDER: " ${GSTREAMER_ARCH_FOLDER})
set(GST_ROOT_ANDROID "/home/diego/Desktop/cerbero/build/dist/android_universal/${GSTREAMER_ARCH_FOLDER}") message(STATUS "GST_ROOT_ANDROID: " ${GST_ROOT_ANDROID})
set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
set(LIB_GSTREAMER_ANDROID "{ANDROID_PACKAGE_SOURCE_DIR}/libs/
{ANDROID_ABI}/libgstreamer_android.so")
message(STATUS "LIB_GSTREAMER_ANDROID: " ${LIB_GSTREAMER_ANDROID})
add_custom_command(OUTPUT ${LIB_GSTREAMER_ANDROID}
COMMAND "{ANDROID_PACKAGE_SOURCE_DIR}/build_gstreamer.sh" "
{ANDROID_PACKAGE_SOURCE_DIR}" --argument )
add_custom_target(gstreamer_lib ALL DEPENDS ${LIB_GSTREAMER_ANDROID})
set(ANDROID_EXTRA_LIBS ${LIB_GSTREAMER_ANDROID})
set(DISTFILES "${ANDROID_PACKAGE_SOURCE_DIR}/AndroidManifest.xml" "${ANDROID_PACKAGE_SOURCE_DIR}/build.gradle" "${ANDROID_PACKAGE_SOURCE_DIR}/res/values/libs.xml" "${ANDROID_PACKAGE_SOURCE_DIR}/src/com/atr/amc/SurfaceViewManager.java")
find_package(Qt5 COMPONENTS Core Quick AndroidExtras REQUIRED)
file(GLOB_RECURSE HEADERS ".h") file(GLOB_RECURSE SOURCES ".cpp") set(RESOURCES "qml.qrc" )
add_library(TestAndroidVideo SHARED ${SOURCES} ${HEADERS} ${RESOURCES} )
target_link_libraries(TestAndroidVideo PRIVATE ${LIB_GSTREAMER_ANDROID} android)
target_include_directories(TestAndroidVideo PRIVATE
${GST_ROOT_ANDROID}/include/gstreamer-1.0
${GST_ROOT_ANDROID}/include/glib-2.0
${GST_ROOT_ANDROID}/lib/glib-2.0/include)
add_executable(TestAndroidVideo ${SOURCES} ${HEADERS} ${RESOURCES} )
target_compile_definitions(TestAndroidVideo PRIVATE $<$<OR:$CONFIG:Debug,$CONFIG:RelWithDebInfo>:QT_QML_DEBUG>) target_link_libraries(TestAndroidVideo PRIVATE Qt5::Core Qt5::Quick Qt5::AndroidExtras)
BUILD GSTREAMER SH
echo $@; . ~/.bashrc cd $1 ndk-build
Android.MK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestAndroidVideo LOCAL_SHARED_LIBRARIES := gstreamer_android LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
ifndef GSTREAMER_ROOT_ANDROID $(error GSTREAMER_ROOT_ANDROID is not defined!) endif
ifeq ($(TARGET_ARCH_ABI),armeabi) GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/arm else ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/armv7 else ifeq ($(TARGET_ARCH_ABI),arm64-v8a) GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/arm64 else ifeq ($(TARGET_ARCH_ABI),x86) GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/x86 else ifeq ($(TARGET_ARCH_ABI),x86_64) GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/x86_64 else $(error Target arch ABI not supported: $(TARGET_ARCH_ABI)) endif
GSTREAMER_NDK_BUILD_PATH := $(GSTREAMER_ROOT)/share/gst-android/ndk-build/ include $(GSTREAMER_NDK_BUILD_PATH)/plugins.mk GSTREAMER_PLUGINS := $(GSTREAMER_PLUGINS_CORE) $(GSTREAMER_PLUGINS_QT5) GSTREAMER_EXTRA_LIBS := -liconv GSTREAMER_EXTRA_DEPS := gstreamer-controller-1.0 gstreamer-video-1.0 gstreamer-base-1.0 gstreamer-pbutils-1.0 openssl include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk