Sadržaj:

GStreamer I Android (GStreamer Android Studio za Windows): 4 koraka
GStreamer I Android (GStreamer Android Studio za Windows): 4 koraka

Video: GStreamer I Android (GStreamer Android Studio za Windows): 4 koraka

Video: GStreamer I Android (GStreamer Android Studio za Windows): 4 koraka
Video: Run : Gstreamer Android Tutorial 1 (Windows7) 2024, Novembar
Anonim
GStreamer I Android (GStreamer Android Studio Windows)
GStreamer I Android (GStreamer Android Studio Windows)
GStreamer I Android (GStreamer Android Studio Windows)
GStreamer I Android (GStreamer Android Studio Windows)

Verzija biblioteke GStreamer:

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

Verzija Android Studio 4.1.2, OS Windows 7 x86-64.

Korak 1: GStreamer na Raspbian

Postavite gstreamer (https://gstreamer.freedesktop.org/documentation/installing/index.html) na Raspberry Pi:

  1. izvršava komandu «aptitude search gstreamer1.0» ona nudi dostupne instalacijske pakete;
  2. potrebno je minimalno uspostaviti sledeće pakete: «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-dodaci-baza-aplikacija »,« gstreamer1.0- plugins-bad »i sve zavisnosti. Komanda će biti «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. za uključivanje gstreamer-a u kod, potrebno uključiti «#include», pri kompilaciji programa potrebno je dodati «« pkg-config --cflags --libs gstreamer-1.0` », dobija se« gcc `pkg-config --cflags --libs gstreamer -1.0` basic-tutorial-1.c -o basic-tutorial-1 »;
  4. za dobivanje ishodnika primjera gstreamer može izvršiti komandu «git clone

Za dobivanje slika sa RPI kamerom putem gstreamer -a na mrežama pomoću platforma udpsink je potrebno ako konsolidujete komandu:

  1. za kamere 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 port = 5000 »;
  2. za USB MJPEG kamere: «gst-launch-1.0 v4l2src device =/dev/video0 do-timestamp = true! image/jpeg, širina = 1920, visina = 1080, framerate = 30/1! avdec_mjpeg! omxh264enc control-rate = 1 target-bitrate = 8000000! h264parse! rtph264pay config-interval = 1 pt = 96! udpsink host = 192.168.1.223 port = 5000 »,

gdje je host-ip-adresa primatelja potoka (pametni telefon na androidu), koja radi svaki plan (fdsrc, h264parse, rtph264pay,…) Možete saznati pomoću pomoćnih komandi «gst-inspect-1.0 fdsrc», «gst-inspect-1.0 h264parse» i t.d.

Za dobivanje video prijenosa na web stranici (nakon instalacije gstreamer-a) na mrežama s korištenjem platforma udpsrc potrebno je da zajedno uložite naredbu: «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! videoconvert! autovideosink sync = false »(u meniju Windows 7 64 bit, GStreamer je instaliran u« c: / gstreamer / »).

Zapamtite prvi put da skenirate nešto za Samsung S7 polučeće video potoke na androidu (isporučuje se pomoću udpsrc) «udpsrc port = 5000! application/x-rtp, encoding-name = H264! rtph264depay! h264parse! amcviddec-omxexynosavcdec! videoconvert! autovideosink ».

Korak 2: Android. Vvedenie. NDK, JNI, Kompilacija Ndk-build

Da biste započeli, morate normalno stvoriti aplikaciju s NDK-om, JNI-om uz kompilaciju uz pomoć ndk-build (https://developer.android.com/ndk/guides,

  • instalira u Windows varijabilnu sredinu «GSTREAMER_ROOT_ANDROID», značenje - pošaljite kataloge sa raspakovanim (instaliranim) bibliotekama gstreamer (unaprijed izgrađen) https://gstreamer.freedesktop.org/data/pkg/android/1.18.3/ (u ovom slučaju « C: / gstreamer », poslednji korak nije potrebno postaviti);
  • instalira NDK, CMake, LLDB (ovde se nalaze samo galički diskovi);
  • kreiran novo izdanje s tipkom «Native C ++» (najbolji popis), dodaje sve procese;
  • u levom oknu izaberete prikaz „Project“(pojavljujući spisak u gornjem gornjem uglu), otvorivši prozor do kataloga „app“, uključite unosno, nadzirajte „app“na tasterima miša i izaberite stavku „New-> Folder-> JNI Folder», u pojavljuju se okne sa svim glavnim stavkama «Promijeni lokaciju mape», u pojavljivoj liniji «Nova lokacija mape» ostavljamo stroku «jni/», pritiskom na gumb «Završi», u katalogu «aplikacija» pojavljuje se element «jni»;
  • Žmëm pravoj tipki miša na elementu «jni», izbornik tačaka «Novo-> C/C ++ izvorna datoteka», u kojem se pojavljuju okne za odabir proširene datoteke i naziv naslova (ako ništa ne možete planirati, na primjer, dajte ime «lutka»), pritisnite dugme «OK» i bit će stvorena datoteka;
  • Žmëm pravoj tipkovnici miša u elementu «jni», izbornik stavki «Novo-> Datoteka», pojavit će se oknom sa imenom «Android.mk», minimalnim sadržajem, ako ste stvorili «dummy.c» može biti ovako:

LOCAL_PATH: = $ (nazovi moj-dir)

uključuje $ (CLEAR_VARS) LOCAL_MODULE: = lažna LOCAL_SRC_FILES: = dummy.c uključuje $ (BUILD_SHARED_LIBRARY)

Žmëm pravoj tipki miša na elementu «jni», izbornik stavki «Novo-> Datoteka», u pojavljivom oknu sa imenom «Application.mk», minimalno sadržaje može biti ovako:

APP_ABI: = sve

sada u levom oknu odaberite "Android" (popis koji se nalazi u gornjem desnom uglu), otvara "Gradle Script" i otvara datoteku "build.gradle Module: app", u datotekama koje su uključene uključujući takve stavke:

ExternalNativeBuild {

CMake…}

  • zadržava i žmëm «sync gradle» u gornjem desnom uglu, ždëm kada proces spokojno završi;
  • nakon svih ovih postupaka potrebno je isključiti glavnu tipku miša na elementu „aplikacija“i pokrenuti izbornik koji će se pojaviti tako nužnom stavkom izbornika „Link C ++ Project s Gradle“, nadimajte ga.
  • Pojavljuje se ok, u roku od trenutka u „Build System“umjesto „CMake“potrebno je da izaberete „ndk-build“, nakon čega u „Project Path“postavite datoteku na „Android.mk“(u oknu u kojoj se nalazi datoteka koja uključuje kombinaciju tipki « Ctrl + 2 », razrađuje katalog projekata, više« app/jni », odabire stvorenu datoteku« Android.mk », nadgleda« OK »), pokreće sinhronizaciju procesa, bilo da inicira svoj« File-> Sync Project with Gradle Files ».
  • U našem stanu, u katalogu «cpp» pojavljuju se dopunjene datoteke s datotekama, ali samo glavno - to je to, što znači da se u potpunosti provode programi ako ste na pogrešnoj stranici (https://developer.android.com/ndk /sample/sample_hellojni#java).

Korak 3: Prikručivaem GStreamer

Proces prikručivanja biblioteka gstreamer (verzija biblioteke 1.18.3, verzija Android Studio 4.1.2):

  • Napravljen projekat sa NDK, JNI, kompilacija ndk-build (Korak 2).
  • Podržava «Android.mk» preuzeto iz «tutorial_1» primjenom gstreamera i modificiranim, otvarajući biblioteke za android u katalogu «C: / gstreamer \», datoteka na jezicima je nazvana (i prethodno je dodana u mapu «jni» projekta) «gst_tut_01.c », odgovarajuća zajednička biblioteka (koja će biti sakupljena iz ove datoteke) nazvana je« gst_tut_01 »(ja sam biblioteka datoteka, koja će se odgovarajuće zvati« libgst_tut_01.so »).

LOCAL_PATH: = $ (nazovi moj-dir)

uključuju $ (CLEAR_VARS) LOCAL_MODULE: = gst_tut_01 LOCAL_SRC_FILES: = gst_tut_01.c LOCAL_SHARED_LIBRARIES: = gstreamer_android LOCAL_LDLIBS: = -llog uključuju $ (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 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 ife ($ (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 GSTREMER_LUEX GSTREAMER_NDK_BUILD_PATH) /gstreamer-1.0.mk

Obratite pažnju, što je u «Android.mk», ne zavisi od platformi (Windows, Linux), pa se propisuje kroz «/».

Nužno stvorite blok «externalNativeBuild {…}» u datotekama «build.gradle Modul: aplikacija» u odjeljku «defaultConfig» (prikazuje se s početnom blokom, kako biste mogli vidjeti na ekranu)

defaultConfig {

applicationId "com.example.test_gst_01" minSdkVersion 23 targetSdkVersion 28 versionCode 1 verzijaIme "1.0" testInstrumentationRunner "android.support.test.runner. AndroidJUnitRunner" externalNativeBuild {ndkBuild {def gstRoot '(project) = project (project), MIPS i MIPS64 su podržani abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'}}}

Ostale postavke za ovo opisivanje: https://stackoverflow.com/questions/45044210/gstreamer-examples-in-android-studio. Ako rezimirate, tako ćete dobiti:

  1. stvorioëm kod na si;
  2. traži se u opštem slučaju, ako android studio nije uvek uobičajeno, podrazumevano pribavlja biblioteku «libc ++ _ shared.so», stoga je bolje da na vašem «Android.mk» umesto stroki «LOCAL_SHARED_LIBRARIES: = gstreamer_android» će biti «LOCAL_SHARED_LIBRARIES: = gstreamer_ », U Android Studio 3.5.1 takođe u datotekama« Application.mk »dodaju stročku« APP_STL: = c ++ _ shared »;
  3. pre nego što započnete pisanje koda na Javi, za isključivanje problema sa uvozom «org.freedesktop.gstreamer. GStreamer» kataloga sa raspakovanim unapred dostupnim sopstvenim bibliotekama (u meniju je «C: / gstreamer / arm64 / share / gst-android / ndk-build / ») Skopirajte datoteku« GStreamer.java »(ove datoteke na svim arhitektonskim verzijama) i umetnite je u projekt u paketu« org.freedesktop.gstreamer », u svom sljedećem programu za ovaj studio u Androidu potrebno je uključiti drvenu sliku na« Android », klikanjem pravih tipki miša na elementu «java» i odabirom izbornika točaka «Novo-> Paket», pojavljuje se dijalog «Odaberite odredišni direktorij», odabire «… / app / src / main / java», žmëm «OK», pojavljuje se dijalog « Novi paket », u stroke za uvođenje morate unijeti« org.freedesktop.gstreamer », u drvetu će se pojaviti stvoreni element, nakon čega je potrebno pritisnuti novu tipku na novom elementu i odabrati izbornik« Zalijepi ». U datoteci «GStreamer.java» bit će prikazane pogreške, ako ih želite popraviti potrebno je izbrisati sve riječi vidljive « @… što je napisano… @»;
  4. ako planirate koristiti androidmedia plaginu (a to je skoro 100 %), potrebno je iz kataloga sa raspakovanim prethodnim, potpuno besplatnim bibliotekama (u meniju je ovo «C: / gstreamer / arm64 / share / gst-android / ndk-build \») skopirajte katalog «androidmedia »(U roku od 3 datoteke.java) i postavite ga u paket« org.freedesktop.gstreamer »;
  5. U procesu stvaranja kode na "si" android studiju radit će se, ali ne može se pronaći "#include", ali se ovo mora ponoviti ako se izvrši naredba "Datoteka-> Poništi predmemoriju/ponovno pokretanje", što je sasvim dovoljno za jedan način, pozvaće ga potpuno ravnopravno na ovom «#include» no sborka će normalno ići (u slučaju da je potrebno 1 put da izvršite proceduru, nakon što ste učitali ruganj android studio na metode iz «gst/gst.h»);
  6. ako zbirka završi grešku, na primjer «android studio gstreamer make: *** Nema pravila za postavljanje cilja tutorial_02.c, potrebno tutorial_02.o», samo pažljivo provjerite vaš «Android.mk» koji prikazuje sve u najnovijem simbolu (u konceptu ne dolžno bytʹ probelov);
  7. Preporučujemo označavanje sa ovom člankom: https://habr.com/ru/post/270479/, u njenoj prilogu «Metode liječenja različitih pogrešnih programa u Android Studiju za razvoj projekta».

Korak 4: Konvejer GStreamer u Kode *.c Android Studio

Itak, GStreamer nudi zarabotalan rad, krajnje mere koje rade tutorial_1… tutorial_3 iz dokumentacije «GStreamer Android Tutoriali» (ne gledaju se na to, što su u pametnim telefonima oni pustili, moja varijanta, zasnovana na tutorial_3 u emulatornim verzijama).

No, evo s konvejerom, u skladu s ovom informacijom: https://gstreamer.freedesktop.org/documentation/installing/for-android-development.html#using-androidstudio u androidu postoji vaš dekoder videa, koji se naziva "androidmedia" i nalazi se u kategorijama «GSTREAMER_PLUGINS: = $ (GSTREAMER_PLUGINS_CODECS)», takav program za plaćanje u biblioteci 1.15.2 GStreamer za Android Studio ima, ali aplikacija će biti dostupna za pronalaženje (androidmedia) ne može. A ne može se pronaći jer se traži da se zove S druge strane (https://www.ohandroid.com/67892.html), upravo (u najboljem slučaju za telefon Samsung S7) «amcviddec-omxexynosavcdec», gdje se nalazi «amcviddec-» uvijek i za svaki telefon (za sve telefone)), ali naimenovane druge dijelove možete sastaviti iz informacija u datotekama «/etc/media_codecs.xml» (datoteka se nalazi u pametnim telefonima, ja sam pokretao pomoću Total Commander -a), posebno za mobitel u datotekama koje sadrže sadržaj «<MediaCodec name =”OMX. Exynos.avc.dec” type =”video/avc”> », (avc - ovaj kodek h264, za kodeku h265 će biti hevc, a za h263 - h263) u skladu s tim koristi imeničke kodeke tačke i zapisuje sve male mačke bukvicama koji dobijaju «omxexynosavcdec», sada smo identificirali sa imenom platina - dekodera «amcviddec -omxexynosavc.

Daleko je potrebno uspostaviti prava na priloge za programe:

Plaginy u «Android.mk»:

LOCAL_PATH: = $ (nazovi moj-dir)

(CLEAR_VARS) LOCAL_MODULE uključuju $: = gstvideoget LOCAL_SRC_FILES: = gstvideoget.c LOCAL_SHARED_LIBRARIES: = gstreamer_android C ++ _ dijeli LOCAL_LDLIBS: = -llog -landroid uključuju $ (BUILD_SHARED_LIBRARY) ifndef GSTREAMER_ROOT_ANDROID $ (! Greška GSTREAMER_ROOT_ANDROID nije definiran) endif ($ ifeq (TARGET_ARCH_ABI), armeabi-v7a) GSTREAMER_ROOT: = $ (GSTREAMER_ROOT_ANDROID)/armv7 else ifeq ($ (TARGET_ARCH_ABI), arm64-v8a) GSTREAMER_ROOT: = $ (GSTREABER_ROORE_TROFER_TRO) = $ (GSTREAMER_ROOT_ANDROID)/x86 else ifeq ($ (TARGET_ARCH_ABI), x86_64) GSTREAMER_ROOT: = $ (GSTREAMER_ROOT_ANDROID)/x86_64 else $ (greška Ciljni luk ABI nije podržan: $ (TARGET_ARCH_ABI) GI) GI dijeljenje/gst-android/ndk-build uključuje $ (GSTREAMER_NDK_BUILD_PATH) /plugins.mk GSTREAMER_PLUGINS: = $ (GSTREAMER_PLUGINS_CORE) $ (GSTREAMER_PLUGINS_PLAYBACK) $ (GSTREAMER_PLUGSS) GRESTER UGINS_CODECS_RESTRICTED) $ (GSTREAMER_CODECS_GPL) $ (GSTREAMER_PLUGINS_ENCODING) $ (GSTREAMER_PLUGINS_VIS) $ (GSTREAMER_PLUGINS_EFFECTS) $ (GSTREAMER_PLUGINS_NET_RESTRICTED) GSTREAMER_EXTRA_DEPS: = gstreamer-player-1.0 gstreamer-video-1.0 glib-2.0 uključuju $ (GSTREAMER_NDK_BUILD_PATH) /gstreamer-1.0.mk

Podržava «Application.mk» (https://developer.android.com/ndk/guides/cpp-support):

APP_ABI: = allAPP_STL: = c ++ _ podijeljeno

Posljednje: moguće je previše plagiranja (pri kompilaciji veličine papira projekcija izražava do 1, 9 GB), ali u mom konvejeru se ne startuje na drugim rakladama, može se desiti da neke ploče ne budu potrebne - potrebno je testirati.

Preporučuje se: