Агуулгын хүснэгт:

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 алхам
Видео: Настройка и руководство Streamlabs obs 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- plugins-bad »и все зависимости. Команда "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-ugly »;
  3. для включения gstreamer в код, необходимо включить «#include», програм хангамжийн програмууд нь "pkg-config --cflags --libs gstreamer-1.0`", получится так «gcc` pkg-config --cfreams --libs-gflags --libs -1.0` үндсэн-хичээл-1.c -o үндсэн-заавар-1 »;
  4. жишээ нь gstreamer "команд клитийг https://gitlab.freedesktop.org/gstreamer/gst-docs" дээр дарж болно.

Дэлгэрэнгүй үзэх камерын 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 тохиргооны интервал = 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 тохиргооны интервал = 1 pt = 96! udpsink хост = 192.168.1.223 порт = 5000 »,

хост хост-ip-адрес получателя потока (смартфон на андроид), энэ товчлуурыг дарна уу (fdsrc, h264parse, rtph264pay,…) Та gst-inspect-1.0 fdsrc-1.0 "fstrparse", "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,

  • устанавливаем в Windows переменную среды «GSTREAMER_ROOT_ANDROID», значение - путь до каталога с распакованными (установленными) библиотеками gstreamer (урьдчилан бүтээсэн) https://gstreamer.freedesktop.org/data/pte «elove.com) C: / gstreamer », последний слэш ставить не нужно);
  • устанавливаем NDK, CMake, LLDB (хадгалах только галочки расставить);
  • "Native C ++" програмыг шинэ хувилбараар боловсруулж, шинэ процессыг эхлүүлэх;
  • "Төсөл" (програм хангамж) нь "апп" програмыг нээхийн тулд "апп" програмыг нээхийн тулд "Шинэ-> Фолдер-> хавтас-" хавтас-> файлыг хавсаргана уу. "Хавтасны байршлыг өөрчлөх", "Шинэ хавтасны байршил" гэсэн товчлуурыг "jni/", "дуусгах", "апп" гэсэн каталоги "jni" гэсэн бичээсийг дарна уу;
  • "jni", "Шинэ-> C/C ++ Эх Файл" гэсэн томъёолол, мөн "шинэ файлууд", мөн өөр бусад файлуудын эх сурвалжийг "шинэ" гэж хэлж болно., "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: = бүгд

"Андройд" (програм хангамжийн хувилбарууд), "Gradle Scripts" болон "build.gradle Module: app" файлуудыг устгана уу:

ExternalNativeBuild {

CMake…}

  • сохраняемся и жмём «sync gradle» програм хангамжийн процесс, жодомын процессыг даван туулах;
  • "програм" болон "програмын" элементүүдийг ашиглахын тулд "Gradle -тэй C ++ төслийг холбох" товчийг дарна уу.
  • "Системийг бий болгох" хэсэгт "CMake" -ийг "ndk-build" дээр дарж, "Project Path" -ийг "Android.mk" дээр дарж уншина уу. Ctrl + 2 », том каталоги програм," app/jni "," Android.mk "файлын файлыг үүсгэх," ОК "гэх мэт файлуудыг томъёолох, файлын процессыг синхронизацид оруулах," File-> Төслийг Gradle Files-тэй синхрончлох. ».
  • В нашем дереве, в каталоге «cpp» появятся добавленные нами файлы, гэхдээ самое главное - это то, что теперы проект нормально соберётся, если у Вас в коде ошибок нет (урок для начинающих: https://developer.android.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 \" файлын андроид библиотеки, файлын эх сурвалж (мөн урьдчилсан шинж чанартай).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 / АРМви7 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 GSTRESER_START_PLUES 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/ 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_brend" », Android Studio 3.5.1 файлыг" Application.mk "дээр дарна уу" APP_STL: = c ++ _ хуваалцсан ";
  3. эхний сэдэв как начать писать код на Java, для исключения с импортом «org.freedesktop.gstreamer. GStreamer» каталога с распакованними предварительно собранными библиотеками (у меня это «C: / gstreamer / arm64 / n / share / gststocker / »)" GStreamer.java "файлыг дарна уу (энэ нь архитектурын нэг хэсэг болно) ба" org.freedesktop.gstreamer "програмыг нээнэ үү., "java" болон "Шинэ" багцыг сонгох "" багцыг сонгох "товчлуурыг дарж," Очих газрын лавлахыг сонгоно уу "," … / app / src / main / java "," ОК ", появится диалог« "Шинэ багц", "org.freedesktop.gstreamer" товчлуурууд, мөн хамгийн сүүлийн үеийн элементүүд, хамгийн сүүлийн үеийн элементүүд болон элементүүдийг "Paste" дээр дарна уу. "GStreamer.java" файлыг нээгээд үзэхэд " @… что то написано… @";
  4. если планируется использование androidmedia плагина (а это почти 100 %), гэхдээ энэ нь "C: / gstreamer / arm64 / share / gst-android / ndkirov" каталога с распакованнимийн урьдчилсан библиотеками юм. »(В нём 3 файла.java) ба вставить его в пакет« org.freedesktop.gstreamer »;
  5. "процессын" явцад Android студи ажиллахгүй болно, гэхдээ "#include", "файл"> "Кэшийг хүчингүй болгох/дахин эхлүүлэх" командын командууд, мөн эдгээр файлуудыг ашиглах боломжтой болно. на этот «#include» гэхдээ сборка шаардлагагүй прораммит (ердийн журмын дагуу 1 үе шаттай, дараа нь Android студи дээр "gst/gst.h" дээр бичигдсэн);
  6. если сборка заканчивается ошибкой жишээ: «android studio gstreamer make: *** tutorial_02.o -д хэрэгтэй зорилтот хичээл_02.c -ийг хийх дүрэм байхгүй», внимательно проверьте ваш «Android.mk» скорее всего в нём лишний символ не должно быть пробелов);
  7. рекомендую ознакомиться с этой статьяй: https://habr.com/ru/post/270479/, "Методик лечения различных ошибок в Андроид стри при разработке проекта" вэбсайтаас үзнэ үү.

Алхам 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) энэ кодын кодын точки ба записывая всё маленькими буквами получаем «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 өөр ifeq ($ (TARGET_ARCH_ABI), arm64-v8a) GSTREAMER_ROOT: = $ (GSTREAMER_RO_ARRO_T_RORO) = $ (GSTREAMER_ROOT_ANDROID)/x86 өөр ifeq ($ (TARGET_ARCH_ABI), x86_64) GSTREAMER_ROOT: = $ (GSTREAMER_ROOT_ANDROID)/x86_64 өөр $ (алдаа зорилтот нуман хаалганы ABI дэмжигдээгүй: $ (TARGET_ARif_STAR_BAR_TARF_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 Гбайт), гэхдээ у конвейер не стартует при другом раскладе, может у Вас некоторые плагины окажутся неизужны.

Зөвлөмж болгож буй: