Мазмұны:

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 1 (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

Raspberry Pi қолданбасы (https://gstreamer.freedesktop.org/documentation/installing/index.html):

  1. командалық «aptitude 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 --cstreamer --lib -1.0` негізгі-оқулық-1.c -o негізгі-оқулық-1 »;
  4. для получения исходников примеров gstreamer команданы «git clone https://gitlab.freedesktop.org/gstreamer/gst-docs» арқылы өзгертуге болады.

RPI -ді қарау камерасы RPG -ді басқару үшін қажет:

  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, ені = 1920, биіктігі = 1080, кадр жиілігі = 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-1.0», «gst-inspect» и т.д.

Дәлірек айтсақ, видео потока на винде (после установки gstreamer) командалары: «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 / »арқылы жүктеледі).

Samsung S7 смартфоны үшін Android видеоларының толық нұсқасы (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/): нормально создавалось приложение

  • «GSTREAMER_ROOT_ANDROID» Windows жүйесіндегі нұсқаулықтар, жаңартулар - библиотеками gstreamer (алдын ала салынған) https://gstreamer.freedesktop.org/data/patse.com C: / gstreamer », последний слэш ставить не нужно);
  • NDK, CMake, LLDB (тұтас галочки расставить);
  • «Native C ++» типті жаңа нұсқасы (барлық нұсқалар), барлық процестерді жаңарту;
  • «Жоба» («жаңа»> Папка- »Қалтасы-» қосымшасы »қосымшасы» қосымшасы »қосымшасы бойынша« жоба »(« жаңартылған »папкасында). «Қалтаның орнын өзгерту» папкасында, «Жаңа қалтаның орналасуы» папкасында «jni/», «Аяқтау», «каталогтағы» «каталогтағы» элементтегі «jni» папкаларындағы «жаңа қалтаның орны»;
  • «jni» элементтері, «New-> C/C ++ бастапқы файлдары» тармағын таңдаңыз, «видио файла» мен вводим название «ескі пока ничего не планируется диможно» мүмкін емес., «OK» түймесін басыңыз және файлды жасаңыз;
  • «jni» элементінің элементтері «New-> Файл» бөлімінде, «Android.mk» терезесінде, «қарапайым», «қарапайым» сөздермен бірге «dummy.c» мүмкін болатын элементтерді қосуға болады:

LOCAL_PATH: = $ (my-dir-ге қоңырау шалыңыз)

$ (CLEAR_VARS) LOCAL_MODULE қосу: = жалған LOCAL_SRC_FILES: = dummy.c қамтиды $ (BUILD_SHARED_LIBRARY)

«jni» элементтерінің тізімі, «New-> File» тармақтары мен «Жаңа файлдар» бөлімінде, «Application.mk» қосымшасында, минимальное содержимое может быть таким:

APP_ABI: = барлығы

«Android» бағдарламасын жүктеу («нұсқаулықтар», «Gradle Scripts») және файлдарды «build.gradle модулі: қолданба», файлдарды жүктеу:

ExternalNativeBuild {

CMake…}

  • сохраняемся и жмём «синхрондау дәрежесі»;
  • «app» және «app» мен «менеджменттің» элементтері «Gradle -мен C ++ жобасын байланыстыру» керек -жарақтары мен ережелерін сақтамау керек.
  • «System System құру» бөлімінде «ndk-build» «CMake» бөлімінде «Project Path» бөлімінде «Android.mk» файлын орналастыру керек («файлдарды жинау» комбинацияланған клавиште) Ctrl + 2 »,« каталогтар »,« app/jni »файлдары,« Android.mk »файлдары,« OK »), файлдарды тазарту процесі синхронизации,« 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 »(файлдардың библиотеки,« либгст_тут_01.so »).

LOCAL_PATH: = $ (my-dir-ге қоңырау шалыңыз)

= 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 $ (CLEAR_VARS) LOCAL_MODULE қамтиды: = 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 GSTRESER_START_PLI 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 нұсқасыКод 1 нұсқасыАтау «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 = $ gstREAM» 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_LIBRARIES_android_briveli»: », Android Studio 3.5.1 файлында« Application.mk »қосымшасы бар« APP_STL: = c ++ _ ортақ »;
  3. «Java» мен «org.freedesktop.gstreamer. / ») Файлды« GStreamer.java »(эфи файлы на всех архитектурах одинаковые) және« org.freedesktop.gstreamer »пакетін ашыңыз, Android студиясында необходимо переключитов видеводы», «java» және «New-> Package» тармақтары мен элементтерін таңдаңыз, «Баратын жер каталогын таңдаңыз» пәрменін таңдаңыз, «… / app / src / main / java», «ОК», появится диалог « «Жаңа пакет», «org.freedesktop.gstreamer» керек -жарақтары, жаңа элементтердің жаңа элементтері мен элементтері «Қою» пәрменін таңдау керек. «GStreamer.java» файлын жүктеу қажет болса, « @… что то написано… @»;
  4. ескі планируется использование androidmedia плагина (а это почти 100 %), необходимо из каталога с распакованными предварительные собранными библиотеками (у меня это «C: / gstreamer / arm64 / share / gst-android / ndk-md«) »(В нём 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 оқулықтары» құжаттамасынан (смартфонның они запустились, мой вариант, основанный на 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 -ға арналған, бірақ бұл мүмкін емес (Androidmedia) мүмкін емес. по другому (https://www.ohandroid.com/67892.html), а именно (Samsung S7 телефоны үшін) «amcviddec-omxexynosavcdec», префикс «amcviddec-» всегда один и тот же (для всехов) «,» /etc/media_codecs.xml «ақпаратынан басқа файлдарды жүктеу мүмкін емес (Total Commander файлдары мен файлдары)”OMX. Exynos.avc.dec” type =”video/avc”> », (avc - это кодек h264, d2 кодека h265 керек hevc, а для h263 - h263) «омхексиносавцедек» - вот велосипедінен велосипедпен айналысыңыз.

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

«Android.mk» желісінің желісі:

LOCAL_PATH: = $ (my-dir-ге қоңырау шалыңыз)

GSTREAMER_ROOT_ANDROID $ (! Қате GSTREAMER_ROOT_ANDROID анықталған жоқ) ENDIF ifeq ($ ifndef $ (BUILD_SHARED_LIBRARY) қамтиды = -llog -landroid: = gstvideoget LOCAL_SRC_FILES: = gstvideoget.c LOCAL_SHARED_LIBRARIES: = gstreamer_android C ++ _ ортақ LOCAL_LDLIBS $ (CLEAR_VARS) LOCAL_MODULE қамтиды (TARGET_ARCH_ABI), armeabi-v7a) GSTREAMER_ROOT: = $ (GSTREAMER_ROOT_ANDROID)/armv7 else ifeq ($ (TARGET_ARCH_ABI), arm64-v8a) GSTREAMER_ROOT: = $ (GSTREAMER_RO_AR_64) = $ (GSTREAMER_ROOT_ANDROID)/x86 басқа ifeq ($ (TARGET_ARCH_ABI), x86_64) GSTREAMER_ROOT: = $ (GSTREAMER_ROOT_ANDROID)/x86_64 басқа $ (қате мақсатты арқа ABI қолдамайды: $ (TARGET_ARif_STAR_BAR_TARG_ARF_BAR)) үлесі / GST-Android / 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 Гбайт), бірақ ол конвейер емес стартует при другом раскладе, может у Вас некоторые плагины окажутся неизужны -.

Ұсынылған: