Мазмуну:

GStreamer и Android (GStreamer Android Studio Windows): 4 кадам
GStreamer и Android (GStreamer Android Studio Windows): 4 кадам

Video: GStreamer и Android (GStreamer Android Studio Windows): 4 кадам

Video: GStreamer и Android (GStreamer Android Studio Windows): 4 кадам
Video: GTA 5 : Franklin Dig Secret Dark Tunnel Outside Franklin House in GTA 5 ! (GTA 5 mods) 2024, Ноябрь
Anonim
GStreamer и Android (GStreamer Android Studio Windows)
GStreamer и Android (GStreamer Android Studio Windows)
GStreamer и Android (GStreamer Android Studio Windows)
GStreamer и Android (GStreamer Android Studio Windows)

Версия библиотек GStreamer:

  1. на RPi 3B (Raspberry OS Buster) 1.14.4,
  2. на Android 1.18.3.

Версия Android Studio 4.1.2, ОС Windows 7 x86-64.

1 -кадам: GStreamer на Raspbian

Установка gstreamer (https://gstreamer.freedesktop.org/documentation/installing/index.html) на Raspberry Pi:

  1. выполняем команду «жөндөм издөө gstreamer1.0» оно выведет доступные к установке пакеты;
  2. необходимо как минимум установить следующие пакети: "gstreamer1.0-tools", "gstreamer1.0-plugins-good", "gstreamer1.0-plugins-good-doc", "gstreamer1.0-plugins-base", "gstreamer1. 0-doc »,« libgstreamer1.0-0 »,« gstreamer1.0-rtsp »,« libgstreamer-plugins-base1.0-dev »,« gstreamer1.0-plugins-base-apps »,« gstreamer1.0- плагиндер-жаман »и все зависимости. Команда "sudo apt-get gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-good-doc gstreamer1.0-plugins-base gstreamer1.0-doc libgstreamer1.0-0 gstreamer1.0- rtsp libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-bad gstreamer1.0-plugins-чиркин »;
  3. для включения gstreamer в код, необходимо включить «#include», программаларынын программасы необходимо добавлять «` pkg-config --cflags --libs gstreamer-1.0` », получится так« gcc` pkg-config --cfreams --libs-gflags --lib -1.0` негизги-үйрөткүч-1.c -o негизги-үйрөткүч-1 »;
  4. для получения исходников примеров gstreamer можно выполнить команду «git clone

Добуш берүү камерасы RPI через gstreamer по сетка привлечение удпсин необходимо в консол ввести команду:

  1. RPi камерасы үчүн: «raspivid -t 999999 -h 1080 -w 1920 -fps 25 -hf -vf -b 6000000 -o -| gst-launch-1.0 -v fdsrc! h264parse! rtph264pay config-interval = 1 pt = 96! udpsink host = 192.168.1.223 порт = 5000 »;
  2. USB MJPEG камерасы үчүн: «gst-launch-1.0 v4l2src device =/dev/video0 do-timestamp = true! image/jpeg, туурасы = 1920, бийиктиги = 1080, кадр ылдамдыгы = 30/1! avdec_mjpeg! omxh264enc көзөмөлдөө ылдамдыгы = 1 максаттуу-бит ылдамдыгы = 8000000! h264parse! rtph264pay config-interval = 1 pt = 96! udpsink хост = 192.168.1.223 порт = 5000 »,

где хост-ip-адрес получателя потока (смартфон на андроид), что делает каждый плагин (fdsrc, h264parse, rtph264pay,…) Сиз "gst-inspect-1.0 fdsrc", "gst-inspect" и т.д.

Документти көрүү видео потока на винде (после установки gstreamer) по спецификация плагина udpsrc необходимо в консоле командов: "c: / gstreamer / 1.0 / msvc_x86_64 / bin / gst-launch-1.0 -v udpsrc порт = 5000! application/x-rtp, encoding-name = H264! rtph264depay! avdec_h264! видеоконвертация! autovideosink sync = false »(Windows 7 64 бит, GStreamer" c: / gstreamer / "менен иштейт).

Самсунг S7 үчүн Samsung S7 получение видео потока на андроид (конвейер с использованием udpsrc) «udpsrc порт = 5000! application/x-rtp, encoding-name = H264! rtph264depay! h264parse! amcviddec-omxexynosavcdec! видеоконвертация! автоовидео ».

2 -кадам: Android. Введение. Создание Приложения С NDK, JNI, Компания Ndk-build

NDK, JNI с помощью ndk-build (https://developer.android.com/ndk/guides, https://habr.com/ru/post/203014/) боюнча нормально создавалось приложение скачать видео

  • устанавливаем в Windows переменную среды «GSTREAMER_ROOT_ANDROID», значение - путь до каталога с распакованными (установленными) библиотеками gstreamer (алдын ала курулган) https://gstreamer.freedesktop.org/data/pte «e -e -mail.com C: / gstreamer », последний слэш ставить не нужно);
  • устанавливаем NDK, CMake, LLDB (тут только галочки расставить);
  • создаём новое приложение с типом «Native C ++» (самый низ списка), дожидаемся пока все процессы завершатся;
  • "Долбоор" ("выпадающий список в левом верхнем углу"), "колдонмонун" каттарын толуктоо, "колдонмону" ачуу жана мыши жана выбираем пункт менюсу "Жаңы-> Папка-> Jolder-> появившемся окне ставим галочку "Папканын жайгашуусун өзгөртүү", жана "Жаңы Папканын Жайгашуусу" папкасында "jni/", "Аяктоо" жана каталогдогу "колдонмонун" появится элементи "jni" появившейся строке;
  • жмём правой клавишей мыши по элементу «jni», пункт пунктунун менюсу "New-> C/C ++ Source File", появившемся окне выбираем расширение файла, и вводим название (эсли пока ничего не планируется то можерно), нажимаем кнопку «OK» жана түзүлүүчү файл;
  • жмём правой клавишей мыши элементтери "jni", пункт пункттарынын менюсу "Жаңы-> Файл", жана "Android.mk" файлдарынын эң кичине варианттары, "dummy.c" эсеби боюнча так маалымат:

LOCAL_PATH: = $ (my-dir чалуу)

$ (CLEAR_VARS) LOCAL_MODULE кирет: = жасалма LOCAL_SRC_FILES: = dummy.c кирет $ (BUILD_SHARED_LIBRARY)

жмём правой клавишей мыши элементтери "jni", пункт пункттарынын менюсу "Жаңы-> Файл", жана "Application.mk" папкалары, минимальное содержимое может быть таким:

APP_ABI: = баары

"Android" түзмөгүнүн "версиясы", "Gradle Scripts" жана "build.gradle Module: app" файлдарын жүктөө:

ExternalNativeBuild {

CMake…}

  • сохраняемся и жмём «синхрондошуу даражасы» в правом углу, ждём когда процесс спокойно завершится;
  • после всех этих процедуры "колдонмо" жана "колдонмонун" элементтери боюнча "C ++ долбоору менен Gradle менен байланышуу" пунктунун негизги элементтери.
  • "Системаны түзүү" пунктундагы "CMake" бөлүмүнүн "ndk-build", "Project Path" бөлүмүндөгү "Android.mk" файлдарын жүктөө ("окуунун бардык пункттары" комбинацию клавишке киргенде) Ctrl + 2 », каталог проектиси," app/jni "далили," Android.mk "файлын түзүү", "ОК"), файлдарды тазалоо процесси синхронизации, "File-> Долбоорду Gradle Files менен синхрондоштуруу". ».
  • В нашем дереве, в каталоге «cpp» появятся добавленные нами файлы, но самое главное - это то, что теперь проект нормально соберётся, эсли у Вас в коде ошибок нет (урок для начинающих: https://developer.android.android /үлгүлөр/sample_hellojni#java).

3 -кадам: GStreamer программасы

Процесс прикручивания библиотеки gstreamer (версия библиотек 1.18.3, версия Android Studio 4.1.2):

  • NDK, JNI, ndk-build компиляциясы (2-кадам).
  • Содержимое «Android.mk» взято из «tutorial_1» примеров gstreamer и модифицировано, жана распаковалдык библиотеки "C: / gstreamer \", файл на языке си я назвал (жана предварительно добавил в папту "j0_ про).c », соответственно бөлүшүлгөн-библиотеку (котормо будет собрана из это файла) я назвал« gst_tut_01 »(самбиль библиотеки, соответственно будет называться« libgst_tut_01.so »).

LOCAL_PATH: = $ (my-dir чалуу)

камтыйт $ (CLEAR_VARS) LOCAL_MODULE: = gst_tut_01 LOCAL_SRC_FILES: = gst_tut_01.c LOCAL_SHARED_LIBRARIES: = gstreamer_android LOCAL_LDLIBS: = -llog $ (BUILD_SHARED_LIBRARY) ifeq ($ (TARGET_ARCH_ABI), armeabi-V7A) камтыйт GSTREAMER_ROOT: = C: / gstreamer / ARMv7 GSTREAMER_NDK_BUILD_PATH: = C:/gstreamer/armv7/share/gst-android/ndk-build/else ifeq ($ (TARGET_ARCH_ABI), arm64-v8a) GSTREAMER_ROOT: = C:/gstreamer/arm64 GSTREAMER_NDK_BUILD_PATH: = C:/gstream share/gst-android/ndk-build/else ifeq ($ (TARGET_ARCH_ABI), x86) GSTREAMER_ROOT: = C:/gstreamer/x86 GSTREAMER_NDK_BUILD_PATH: = C:/gstreamer/x86/share/gst-android/ndk-build ($ (TARGET_ARCH_ABI), x86_64) GSTREAMER_ROOT: = C:/gstreamer/x86_64 GSTREAMER_NDK_BUILD_PATH: = C:/gstreamer/x86_64/share/gst-android/ndk-build/endif GSTRESERASTER: AML_TRUER GSTREAMER_NDK_BUILD_PATH) /gstreamer-1.0.mk

"Android.mk" веб -баракчасы, платформадан (Windows, Linux) баш тартуу, "/" прописывается через.

Керек болгон нерсе "externalNativeBuild {…}" файлынын "build.gradle модулу: колдонмосу" "defaultConfig" ("блокада", башталганда)

defaultConfig {

applicationId "com.example.test_gst_01" minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner. AndroidJUnitRunner" externalNativeBuild {ndkBuootAnd (g).gstAndroidRoot else gstRoot = System.env. GSTREAMER_ROOT_ANDROID аргументтери "NDK_APPLICATION_MK = jni/Application.mk", "GSTREAMER_JAVA_SRC_DIR = src", "GSTREAMER_ROOT_ANDROID" $ gstRAM_tro_tr0 MIPS жана MIPS64 колдоого алынат abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'}}}

Остальные настройки по этому описанию: https://stackoverflow.com/questions/45044210/gstreamer-examples-in-android-studio. Если резюмировать, то получится так:

  1. создаём код на си;
  2. android студиясы "libc ++ _ shared.so" библиотекасынын библиотекасы нормально эмес, вашего вашестве вашем «Android.mk» вместо строки «LOCAL_SHARED_LIBRARIES_android_LIBRARIES" », В Android Studio 3.5.1 файлдары« Application.mk »добавить строчку« APP_STL: = c ++ _ shared »;
  3. перед тем как начать писать код на Java, для исключения проблемалар импортом «org.freedesktop.gstreamer. GStreamer» каталога с распакованными предварительно собранными библиотеками (у меня это «C: / gstreamer / arm64 / n / share / gstst / ») Скрипировать файл« GStreamer.java »(эти файлы на всех архитектурах одинаковые) жана" org.freedesktop.gstreamer "пакетин ачуу, жана Android студиясында необходимо переключитов на видерево», кликаем правой клавишей мыши элементтери "java" жана пункттар менюсу "Жаңы-> Топтом", позициядагы диалог "Бара турган жердин директориясын тандоо", "… / app / src / main / java", жмём "ОК", появится диалог « Жаңы топтом »," org.freedesktop.gstreamer "," паста "элементтери, жаңы элементтердин жаңы элементтери жана элементтери" Кой "позициясында. "GStreamer.java" файлын жүктөө керек болсо, анда " @… что то написано… @";
  4. эсли планируется использование androidmedia плагина (а это почти 100 %), необходимо из каталога с распакованными предварительно собранными библиотеками (у меня это «C: / gstreamer / arm64 / share / gst-android / ndkirov") »(В нём 3 файла.java) и вставить его в пакет« org.freedesktop.gstreamer »;
  5. "процессте" Android студиясы иштебей калат, бирок бул "#include" эмес, "Район" командасынын "Файл-> Кэштерди жараксыз кылуу/Кайра баштоо" командаларынын жардамы менен, бул достук каттардын бири болуп саналат. на этот «#include» но сборка будет проходить нормально (в общем случае достаточно 1 раз сделать процедуру, после чего забить на ругань на андроид на методы из «gst/gst.h»);
  6. эсли сборка заканчивается ошибкой например «android studio gstreamer make: *** Tutorial_02.o үчүн керек болгон максаттуу tutorial_02.c үчүн эреже жок», просто внимательно проверьте ваш «Android.mk» скорее всего в нём лишний символ (не должно быть пробелов);
  7. рекомендую ознакомиться с этой статьёй: https://habr.com/ru/post/270479/, "Android Studio при разработке проектадагы" методикалык лечения ошибок "приводятся".

4 -кадам: Конвейер GStreamer Коде *.c Android Studio

Итак, GStreamer вроде заработал, по крайней мере работают tutorial_1… tutorial_3 "GStreamer Android Tutorials" документинин (на смотря на то, что в смартфоне они запустились, мой вариант, основанный на tutorial_3 в эмуляторе).

Но вот с конвейером беда, в соответствии с этой информацией: https://gstreamer.freedesktop.org/documentation/installing/for-android-development.html#using-androidstudio в андроид есть свой декодер видео, называется он «андроид расположен в категории «GSTREAMER_PLUGINS: = $ (GSTREAMER_PLUGINS_CODECS)», ошондой эле библиотеке 1.15.2 GStreamer Android Studio үчүн, бирок приложение бул ругатся найти его (андроид) мүмкүн эмес) по другому (https://www.ohandroid.com/67892.html), а именно (в моём случае для телефона Samsung S7) «amcviddec-omxexynosavcdec», префикс «amcviddec-» всегда один и тот же (для всехов)), а вот наименование второй части можно составить исходя из информации в файле «/etc/media_codecs.xml» (файл смартфоне, смотрел с помощью Total Commander), жана маалыматтын аты -жөнү cизо телефондогу файлдар <”OMX. Exynos.avc.dec” type =”video/avc”> », (avc - это кодек h264, для кодека h265 будет hevc, а для h263 - h263) соответственно убирая из имени кодека точки и записывая всё маленькими буквами получаем «omxexynosavcdec» - вот велосипед.

Далее необходимо установить права в манифесте приложения:

Плагиндердин «Android.mk»:

LOCAL_PATH: = $ (my-dir чалуу)

$ Кирет (CLEAR_VARS) LOCAL_MODULE: = gstvideoget LOCAL_SRC_FILES: = gstvideoget.c LOCAL_SHARED_LIBRARIES: = gstreamer_android C ++ _ бөлүштү LOCAL_LDLIBS: = -llog -landroid $ кирет (BUILD_SHARED_LIBRARY) ifndef GSTREAMER_ROOT_ANDROID $ (! Ката GSTREAMER_ROOT_ANDROID аныкталган эмес) endif ifeq ($ (TARGET_ARCH_ABI), armeabi-v7a) GSTREAMER_ROOT: = $ (GSTREAMER_ROOT_ANDROID)/armv7 else ifeq ($ (TARGET_ARCH_ABI), arm64-v8a) GSTREAMER_ROOT: = $ (GSTREAMER_RO_ARO_64) = $ (GSTREAMER_ROOT_ANDROID)/x86 башка ifeq ($ (TARGET_ARCH_ABI), x86_64) GSTREAMER_ROOT: = $ (GSTREAMER_ROOT_ANDROID)/x86_64 башка $ (ката Максаттуу арка ABI колдоого алынбайт: $ (TARGET_ARif_STAR_GAR_TARG_ARD_TARG_ARI)) үлүшү / GST-андроид / ndk куруу (GSTREAMER_NDK_BUILD_PATH) $ камтыйт /plugins.mk GSTREAMER_PLUGINS: = $ (GSTREAMER_PLUGINS_CORE) $ (GSTREAMER_PLUGINS_PLAYBACK) $ (GSTREAMER_PLUGINS_CODECS) $ (GSTREAMER_PLUGINS_NET) $ (GSTREAMER_PLUGINS_SYS) $ (GSTREAMER_PL UGINS_CODECS_RESTRICTED) $ (GSTREAMER_CODECS_GPL) $ (GSTREAMER_PLUGINS_ENCODING) $ (GSTREAMER_PLUGINS_VIS) $ (GSTREAMER_PLUGINS_EFFECTS) $ (GSTREAMER_PLUGINS_NET_RESTRICTED) GSTREAMER_EXTRA_DEPS: = gstreamer-оюнчу-1.0 gstreamer-көргөзмө-1.0 маш-2,0 ($ кирет GSTREAMER_NDK_BUILD_PATH) /gstreamer-1.0.mk

Төмөнкүлөр «Application.mk» (https://developer.android.com/ndk/guides/cpp-support):

APP_ABI: = allAPP_STL: = c ++ _ бөлүшүлгөн

Послесловие: возможно плагинов слишком много (при компиляции размер папки проекта вырастает до 1, 9 Гбайт), но у меня конвейер не стартует при другом раскладе, может у Вас некоторые плагины окажутся нежужны -.

Сунушталууда: