Sadržaj:

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

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

Video: GStreamer I Android (GStreamer Android Studio Windows): 4 koraka
Video: Run : Gstreamer Android Tutorial 4 (Windows7) 2024, Srpanj
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šavam komandu «aptitude search gstreamer1.0» ona je dovela do dostupnih instalacijskih paketa;
  2. potrebno je minimalno uspostaviti sljedeć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-plugins-base-apps »,« gstreamer1.0- plugins-bad »i sve ovisnosti. 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 u kod, potrebno uključiti «#include», pri kompilaciji programa potrebno dobaviti «` pkg-config --cflags --libs gstreamer-1.0` », dobiva tak« 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 s RPI -jem kamera putem gstreamera na mrežama s korištenjem plag udpsink -a potrebno je u konzoli uložiti naredbu:

  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, width = 1920, height = 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 host-ip-adresa primatelja potoka (pametni telefon na androidu), što čini svaki plagin (fdsrc, h264parse, rtph264pay,…) Možete saznati pomoću pomoćnih naredbi «gst-inspect-1.0 fdsrc», «gst-inspect-1.0 h264parse» i t.d.

Za dobivanje videotoka na web stranici (nakon instalacije gstreamer-a) na mrežama s korištenjem plana udpsrc potrebno je u skladu s tim uložiti 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! videokonverzija! autovideosink sync = false »(u meni Windows 7 64 bit, GStreamer je instaliran u« c: / gstreamer / »).

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

2. korak: Android. Vvedenie. Stvaranje Priloga S NDK, JNI, Kompilacija Ndk-build

Za početak potrebno je normalno stvoriti aplikaciju s NDK-om, JNI-om uz kompilaciju uz pomoć ndk-build (https://developer.android.com/ndk/guides,

  • instalira u Windows promjenjivu sredinu «GSTREAMER_ROOT_ANDROID», značenje - pošaljite do kataloga s raspakiranim (instaliranim) bibliotekama gstreamer (unaprijed izgrađen) https://gstreamer.freedesktop.org/data/pkg/android/1.18.3/ (u ovom slučaju « C: / gstreamer », posljednji sléš postaviti ne treba);
  • instaliraem NDK, CMake, LLDB (tut tolʹko galočki rasstavitʹ);
  • stvorio novo priopćenje s tipkom «Native C ++» (najbolji niz spisa), dodajući sve procese dovršava;
  • u lijevom oknu odabirete prikaz «Project» (pojavljujući popis u gornjem gornjem uglu), otkriva vjetku do kataloga «app» uključuje uvršno, nadzire ga u «app» pravoj tipkovnici miša i odabirete izbornik stavki «New-> Folder-> JNI Folder», u pojavljuju se okne sa svim glavnim stavkama «Promijeni lokaciju mape», u pojavljivoj stroke «Nova lokacija mape» ostavljamo stroku «jni/», pritiskom na gumb «Završi», u katalogu «aplikacija» pojavljuje se element «jni»;
  • Žmëm pravoj tipkovnici miši na elementu «jni», odabirom izbornika točaka «Novo-> C/C ++ izvorna datoteka», u pojavljivom oknu odabirom proširene datoteke i uvođenjem naziva (ako ništa ne planirate, može, na primjer, ime «lutka»), pritisnite gumb «OK» i bit će stvorena datoteka;
  • Žmëm pravoj tipkovnici miša u elementu «jni», izbornik stavki «Novo-> Datoteka», u pojavljivom oknu uvodi ime «Android.mk», minimalno sadržaj, ako ste stvorili «dummy.c» može biti ovako:

LOCAL_PATH: = $ (nazovi moj-dir)

uključuju $ (CLEAR_VARS) LOCAL_MODULE: = lažne LOCAL_SRC_FILES: = lažne.c uključuju $ (BUILD_SHARED_LIBRARY)

Žmëm pravoj tipkovnici miša na elementu «jni», izbornik stavke «Novo-> Datoteka», u pojavljivom oknu uvedeno ime «Application.mk», minimalno sadržaje može biti tako:

APP_ABI: = sve

sada u levom oknu odaberite "Android" (popis koji se nalazi na gornjem vrhu), otkrijte "Gradle Script" i otvorite 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 pravom uglu, ždëm kad proces spokojno zaveršitsâ;
  • nakon svih ovih postupaka potrebno je isključiti glavnu tipku miša na elementu "app" i zaključati to u izborniku koji će se pojaviti tako nužnim nam stavkom izbornika "Link C ++ Project with Gradle", nadgledajte ga.
  • Pojavljuje se ok, u roku od točke «Build System» umjesto «CMake» potrebno je u spisku odabrati «ndk-build», nakon čega u «Project Path» unesite put do datoteke «Android.mk» (u oknu za odabir datoteke 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 projekt« Datoteka-> Sinkroniziraj projekt s datotekama Gradle ».
  • U našem stambenom prostoru, u katalogu «cpp» pojavljuju se dopunjene datoteke s nama, ali samo glavno - to je to, što znači da se normalno provode, ako ste na pogrešnoj stranici (upute za načine: https://developer.android.com/ndk /sample/sample_hellojni#java).

Korak 3: Prikručujemo GStreamer

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

  • Napravljen projekt s NDK, JNI, kompilacija ndk-build (Korak 2).
  • Podržava «Android.mk» preuzeto iz «tutorial_1» primjenom gstreamera i modificirano, raspakiralo je biblioteke za android u katalogu «C: / gstreamer \», datoteka na jezicima je nazvana (i prethodno je dodano u mapu «jni» projekta) «gst_tut_01.c », u skladu s tim dijeljena biblioteka (koja će biti sakupljena iz ove datoteke) nazvana je« gst_tut_01 »(ja sam biblioteka datoteka, odgovarajuće će se 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 iFek ($ (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 GSTREAMER_REUX GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk

Obratite pažnju, što je u «Android.mk», ne ovisi o platformama (Windows, Linux), put se propisuje kroz «/».

Nužno stvorite blok «externalNativeBuild {…}» u datotekama «build.gradle Module: app» u odjeljku «defaultConfig» (prikazuje se na početku bloka, kako bi bilo vidno kuda umetati)

defaultConfig {

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

Ostale postavke na ovom opisanju: 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ćenitom slučaju, ako android studio nije uvijek uobičajeno prema zadanim postavkama primao biblioteku «libc ++ _ shared.so», stoga bolje ako na vašem «Android.mk» umjesto stroki «LOCAL_SHARED_LIBRARIES: = gstreamer_android» će biti «LOCAL_SHARED_LIBRARIES: = gstreamer_ », U Android Studio 3.5.1 također u datotekama« Application.mk »dodaju stročku« APP_STL: = c ++ _ shared »;
  3. prije nego što započnete pisati kod na Javi, za isključivanje problema s uvozom «org.freedesktop.gstreamer. GStreamer» kataloga s raspakiranim prethodnim mogućnostima prilagođenim bibliotekama (u meniju je «C: / gstreamer / arm64 / share / gst-android / ndk-build / ») Skopirajte datoteku« GStreamer.java »(ove datoteke na svim arhitektonskim verzijama) i postavite je u projekt u paketu« org.freedesktop.gstreamer », u svom sljedećem programu za ovaj studio u Androidu potrebno je isključiti prikaz drvenih projekata na« Androidu », klikanjem pravih tipki miša na elementu «java» i odabirom stavke izbornika «Novo-> Paket», pojavljuje se dijalog «Odaberite odredišni direktorij», odabire «… / app / src / main / java», žmëm «OK», pojavljuje se dijalog « Novi paket », u stroke uvoda morate uvesti« org.freedesktop.gstreamer », u drvetu će se pojaviti stvoreni element, a zatim je potrebno pritisnuti novu tipku na novom elementu i odabrati izbornik« Zalijepi ». U datotekama «GStreamer.java» bit će prikazane pogreške, kako bi ih se moralo ukloniti sve riječi vidljive « @… što je napisano… @»;
  4. ako planirate koristiti androidmedia plaginu (a to je gotovo 100 %), to je nužno iz kataloga s raspakiranim prethodnim, potpuno sigurnim bibliotekama (u meniju je ovo «C: / gstreamer / arm64 / share / gst-android / ndk-build \») skopirati 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 bit će rugatʹsâ, što ne može pronaći «#include», ali ako se izvrši naredba «Datoteka-> Poništi predmemoriju/ponovno pokretanje», to znači da će sve biti ravnopravno. na ovom «#include» no sborka će normalno ići (u slučaju da je dovoljno 1 put izvršiti proceduru, nakon što ste na ruganj android studio stali na metode iz «gst/gst.h»);
  6. ako se zbirka završava greškom, 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 je sve u najnovijoj verziji (u koncertu ne dolžno bytʹ probelov);
  7. preporučujemo oznakomiti se s ovom člankom: https://habr.com/ru/post/270479/, u njezinoj prilogu «Metode liječenja različitih pogrešaka u Android Studiju pri razvoju projekta».

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

Itak, GStreamer ubraja zarabotal, krajnje mjere rade na tutorial_1… tutorial_3 iz dokumentacije «GStreamer Android Tutoriali» (ne gledaju se na to, što su u pametnim telefonima oni pustili, moja varijanta, temeljena na tutorial_3 u émulatorom vyletaet).

No, evo s konvejerom, u skladu s ovom informacijom: https://gstreamer.freedesktop.org/documentation/installing/for-android-development.html#using-androidstudio u androidu postoji svoj dekoder videa, koji se naziva «androidmedia» i nalazi se u kategorijama «GSTREAMER_PLUGINS: = $ (GSTREAMER_PLUGINS_CODECS)», takav plan u biblioteci 1.15.2 GStreamer za Android Studio postoji, ali će aplikacija biti dostupna za pronalaženje njega (androidmedia) ne može. A ne može se pronaći jer se traži drugo (https://www.ohandroid.com/67892.html), a upravo (u najboljem slučaju za telefon Samsung S7) «amcviddec-omxexynosavcdec», gdje prefiks «amcviddec-» uvijek odin i to že (za sve telefone), ali naimenovani drugi dijelovi mogu se sastaviti iz informacija u datotekama «/etc/media_codecs.xml» (datoteka se nalazi u pametnim telefonima, a mi smo ih pokrenuli uz pomoć Total Commander), posebno za mobitel u datotekama koje sadrže zapise «<MediaCodec name =”OMX. Exynos.avc.dec” type =”video/avc”> », (avc - ovaj kodek h264, za kodeku h265 bit će hevc, a za h263 - h263) u skladu s tim ubirate ime kodeka točaka i zapisujete sve malene bukvice dobivate «omxexynosavcdec», sada smo se odredili s imenom plagina - dekodera «amcviddec -omxexynosavc.

Daleko je potrebno uspostaviti prava u prilozima za programe:

Plaginy u «Android.mk»:

LOCAL_PATH: = $ (nazovi moj-dir)

uključuju $ (CLEAR_VARS) LOCAL_MODULE: = 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 $ (! pogreš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_ROTROG_TROJEK) $ dijeljenje/gst-android/ndk-build uključuje $ (GSTREAMER_NDK_BUILD_PATH) /plugins.mk GSTREAMER_PLUGINS: = $ (GSTREAMER_PLUGINS_CORE) $ (GSTREAMER_PLUGINS_PLAYBACK) $ (GSTREER_ER_REGSTINS) 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 da previše plagira (pri kompilaciji veličina papira projekta izražava do 1, 9 Gbajta), ali u mom konvejeru ne startuje na drugom mjestu, može se dogoditi da neki plagini ne ometaju - potrebno je testirati.

Preporučeni: