Съдържание:

GStreamer И Android (GStreamer Android Studio Windows): 4 стъпки
GStreamer И Android (GStreamer Android Studio Windows): 4 стъпки

Видео: GStreamer И Android (GStreamer Android Studio Windows): 4 стъпки

Видео: GStreamer И Android (GStreamer Android Studio Windows): 4 стъпки
Видео: Run : Gstreamer Android Tutorial 4 (Windows7) 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. изпълнява команда «astitude search 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- plugins-bad »и всички зависимости. Команда ще бъде «sudo apt-get install 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-ugly »;
  3. за включване на gstreamer в код, необходимо включване «#include», при компилиране на програми необходимо добавяне «« pkg-config --cflags --libs gstreamer-1.0` », получава се так« gcc `pkg-config --cflags --libs gstreamer -1.0` basic-tutorial-1.c -o basic-tutorial-1 »;
  4. за получаване на изходящи приложения gstreamer може да изпълни командата «git clone

За получаване на изображения с RPI на камерите чрез gstreamer в мрежи с използване на плагин udpsink е необходимо в консоли да въведете команда:

  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 хост = 192.168.1.223 порт = 5000 »;
  2. за USB MJPEG камери: «gst-launch-1.0 v4l2src device =/dev/video0 do-timestamp = true! image/jpeg, width = 1920, height = 1080, framerate = 30/1! avdec_mjpeg! omxh264enc control-rate = 1 target-bitrate = 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-1.0 h264parse» и т.н.

За получаване на видео потоци на винде (след инсталиране на gstreamer) в мрежи с използване на плагин udpsrc е необходимо при съгласуване на въвеждане на команда: «c: / gstreamer / 1.0 / msvc_x86_64 / bin / gst-launch-1.0 -v udpsrc port = 5000! application/x-rtp, encoding-name = H264! rtph264depay! avdec_h264! видеоконвертиране! autovideosink sync = false »(в мен Windows 7 64 бит, GStreamer е инсталиран в« c: / gstreamer / »).

Забележете първо, че скажете какво за Samsung S7 получаване на видео потоци на android (конвейер с помощта на udpsrc) «udpsrc port = 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,

  • инсталираме в Windows различна среда «GSTREAMER_ROOT_ANDROID», значение - път до каталога с разпакованни (инсталирани) библиотеки gstreamer (предварително вграден) https://gstreamer.freedesktop.org/data/pkg/android/1.18.3/ (в моя случай това « C: / gstreamer », последен слэш ставить не трябва);
  • установява NDK, CMake, LLDB (тук само галочки разставяне);
  • създаде ново приложение с типом «Native C ++» (най -ниската списка), дожидаем се покаже всички процеси завършва;
  • в лево окне избирам вид «Проект» (излизащ списък във първоначалния горния углу), разкрива ветку до каталога «приложение» включващо, нажимаем в «приложение» правата клавишна миша и избирам менюто пункт «Ново-> Папка-> JNI папка», в появи се окно със стави галочка «Промяна на местоположението на папката», в появилата се строка «Новото местоположение на папката» оставяме строку «jni/», с натискане на бутона «Готово», в каталоге «приложение» се появява елемент «jni»;
  • жмём правата клавиатура миши в елемента «jni», избирам менюто пункт «New-> C/C ++ Source File», в появилото се окне избирам разширяване на файла и въвеждам заглавие (ако нищо не се планира така, например да се даде име «манекен»), натиснете бутона «OK» и ще бъде създаден файл;
  • жмём правата клавиатура миши в елемента «jni», изберете менюто «New-> File», в появилото се окно въведено име «Android.mk», минимално съдържание, ако сте създали «dummy.c» може да бъде така:

LOCAL_PATH: = $ (обадете се на my-dir)

включва $ (CLEAR_VARS) LOCAL_MODULE: = фиктивен LOCAL_SRC_FILES: = манекен.c включва $ (BUILD_SHARED_LIBRARY)

жмём правата клавиатура миши в елемента «jni», изберете менюто «New-> File», в появилото се окно въведено име «Application.mk», минималното съдържаниеможе да бъде така:

APP_ABI: = всички

сега в лево окне избирам вид «Android» (излизащ списък в горната част на горния углу), разкрива ветку «Gradle Scripts» и отварям файл «build.gradle Module: app», във файлове удалявам включващи такива строк:

ExternalNativeBuild {

CMake…}

  • съхранява се и жмём «sync gradle» във верхния правом углу, ждём когато процесът спокойно завърши;
  • след всички тези процедури не е необходимо да се задейства правата клавиатура на елемента „приложение“и да се въведе в менюто, ще се появи така нужният пункт на менюто „Link C ++ Project с Gradle“, нажимаем на него.
  • Появява се окно, в ъгъл в точката «Build System» вместо «CMake» трябва в списъка да изберете «ndk-build», след което в «Project Path» посочете път към файла «Android.mk» (в окне на избора на файл нажимаем комбинация от клавиши « Ctrl + 2 », разработва каталог на проекти, по-долу« app/jni », избирате създаден файл с файл« Android.mk », нажимаем« ОК »), ще покажете завършване на процеса на синхронизация, или инициируем него« Файл-> Синхронизиране на проект с Gradle файлове ».
  • Във нашето дърво, в каталога „cpp“се появяват добавени файлове с име, но само главно - това е, че сега проектът се нормално събира, ако сте в кодовете, които грешат нет (урок за начинаещи: https://developer.android.com/ndk /sample/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 \“, файл на езици с името ми (и предварително добавен в папката «jni» проект) «gst_tut_01.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:/gstreamer споделяне/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 else ($ (TARGET_ARCH_ABI), х86_64) 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 версияCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner. AndroidJUnitRunner" externalNativeBuild {ndkBuild {def gstRoTot (project).gstAndroidRoot иначе gstRoot = System.env. GSTREAMER_ROOT_ANDROID аргументи "NDK_APPLICATION_MK = jni/Application.mk", "GSTREAMER_JAVA_SRC_DIR = src", "GSTREAMER_ROOT_ANDROID = $ gstRoOT_s" освен GST MIPS и MIPS64 се поддържат abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'}}}

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

  1. създам код на си;
  2. оказвае се в обществен случай, когато андроид студиото не е нормално по подразбиране, прилинковыва библиотека «libc ++ _ shared.so», затова по -добре, ако във Вашия «Android.mk» вместо строки «LOCAL_SHARED_LIBRARIES: = gstreamer_android» будет «LOCAL_SHARED_LIBRARIES: = gstreamer_ », В Android Studio 3.5.1 също във файлове« Application.mk »добавете строчка« APP_STL: = c ++ _ shared »;
  3. преди тем как да започнете да пишете код на Java, за да изключите проблем с внос «org.freedesktop.gstreamer. GStreamer» каталог с распакованни предварително събирателни библиотеки (в мен това «C: / gstreamer / arm64 / share / gst-android / ndk-build / ») Скопирайте файла« GStreamer.java »(тези файлове на всички архитектури, които са одинакови) и го поставете в проект в пакет« org.freedesktop.gstreamer », в своя следващ за това в андроид студио е необходимо да се изключи вид на дървени проекти на« Android », кликнете върху правата клавиатура на елемента «java» и изберете менюто «New-> Package», ще се появи диалог «Choose Destination Directory», вибираем «… / app / src / main / java», жмём «ОК», ще се появи диалог « Нов пакет », в строките на ввода трябва да въведете« org.freedesktop.gstreamer », в дърветата се появява създаден елемент, след което е необходимо да се включи правата клавиша на новия елемент и да се избере точка меню« Поставяне ». Във файлове «GStreamer.java» ще бъде куча грешки, за да бъдат изпратени, трябва да се премахнат всички думи вида « @ … което е написано … @»;
  4. ако планирате използването на androidmedia плагина (а това е почти 100 %), това е необходимо от каталога с разпакованни предварително събирателни библиотеки (в мен това е «C: / gstreamer / arm64 / share / gst-android / ndk-build \») скопирайте каталога «androidmedia »(В ≤ 3 файл.java) и поставете го в пакет« org.freedesktop.gstreamer »;
  5. в процеса на създаване на кода на «си» android studio ще се работи, че не може да намери «#include», иногда това се решава, ако се изпълни команда «File-> Invalidate Caches/Restart», това което прави един раз, поздравявам го напълно равномерно на този «#include» новата сборка ще се движи нормално (в общ случай, ако е достатъчно 1 раз да се направи процедура, след което да се забие в руганя android studio на методи от «gst/gst.h»);
  6. ако сборката завършва грешка например «android studio gstreamer make: *** Няма правило, за да се направи target tutorial_02.c, необходимо от tutorial_02.o», просто просто внимателно проверете вашия «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 в андроид има свой декодер видео, наречен той «androidmedia» и намира се в категории «GSTREAMER_PLUGINS: = $ (GSTREAMER_PLUGINS_CODECS)», такъв плагин в библиотеката 1.15.2 GStreamer за Android Studio има, но приложението ще бъде в състояние да го намери (androidmedia) не може. на друго място (https://www.ohandroid.com/67892.html), а именно (в моя случай за телефон Samsung S7) «amcviddec-omxexynosavcdec», където префикс «amcviddec-» винаги един и този же (за всички телефони), а това наименоване на вторите части може да бъде съставено от информация във файлове «/etc/media_codecs.xml» (файлът се намира в смартфони, аз съм се пуснал с помощта на Total Commander), в част за моя телефон във файлове, съдържащи се записва «<MediaCodec name =”OMX. Exynos.avc.dec” type =”video/avc”> », (avc - това кодек h264, за кодека h265 ще бъде hevc, а за h263 - h263) съответно използвайте от имената на кодека точки и записвайте всичко малки букви получавам «omxexynosavcdec», това сега ми и определили с именем плагина - декодер «amcviddec -omxexynosavc.

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

Плагины в «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: = $ (GSTREABER_ROOROG_TROFROG_TROFROG_TRO) = $ (GSTREAMER_ROOT_ANDROID)/x86 else ifeq ($ (TARGET_ARCH_ABI), x86_64) GSTREAMER_ROOT: = $ (GSTREAMER_ROOT_ANDROID)/x86_64 else $ (грешка Целева арка ABI не се поддържа: $ (TARGET_ARCH_ABI)) споделяне/gst-android/ndk-build включва $ (GSTREAMER_NDK_BUILD_PATH) /plugins.mk GSTREAMER_PLUGINS: = $ (GSTREAMER_PLUGINS_CORE) $ (GSTREAMER_PLUGINS_PLAYBACK) $ (GSTREAMER_PLUGSS) GREGSET 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 Гбайт), но при мен конвейерът не стартира при друго разпределение, може да ви накара някои плагини да окажат ненужни - надо да тествате.

Препоръчано: