web-dev-qa-db-fra.com

Exemples Gstreamer dans Android Studio

J'ai essayé de faire fonctionner Gstreamer dans Android Studio, en suivant leurs tutoriels, voir par exemple ici:

https://gstreamer.freedesktop.org/documentation/tutorials/Android/link-against-gstreamer.html

Mais dans le dernier studio Android, jni/Android.mk n'existe pas. Où dois-je mettre le code à la fin de cette page Web? 

Devrait-il aller dans le CMakeLists.txt? Ou est-ce que quelque chose de différent devrait y aller? 

Ou dois-je simplement créer un fichier Android.mk, et si oui, où (comme il n'y a pas de dossier jni, seulement un dossier cpp)? Et comment puis-je dire à Android studio où trouver mon fichier Android.mk?

Merci!

6
Josiki

Tous les tutoriels du site Gstreamer ont fonctionné, mais c'était très difficile. Pour aider une autre personne, je l'ai documenté. Voici le tutoriel pour linux (ubuntu) mais pourrait également fonctionner sous Windows. Si vous avez des questions à ce sujet, n'hésitez pas à demander:) ... je vais également lier un projet de gitlab prêt à fonctionner dans Android Studio : 
(tutoriel 5) https://gitlab.com/eduardoprado/gstreamer-tutorial5.git
(tutoriel 2) https://gitlab.com/eduardoprado/gstreamer-tutorial2.git

Utilisation de la bibliothèque sur Android Studio

Le meilleur moyen de comprendre et d’intégrer GStreamer au projet est de suivre les didacticiels de ce site: Désolé, vous devez trouver le lien par vous-même, je n’ai pas la réputation de publier le lien direct.
Cependant, ces tutoriels sont anciens et ont été conçus pour fonctionner dans Eclipse. Pour fonctionner avec Android Studio, vous devez:

1. Importez les didacticiels à l’aide de l’option Importer d’Android Studio. 
2. Configurez Android Studio pour utiliser NDK;
3. Définissez une variable dans le fichier «Android.mk»;
4. Définissez Gradle ne compiler que certaines architectures;
5. Copiez la classe Gstreamer dans le chemin correct.
6. Désactivez "Instante Run" dans Android Studio. (modification faite le 27/10/2017) 
7. Correction de "l'argument gold de l'éditeur de liens" (modification effectuée le 28/11/2017 utilisateurs de WINDOWS uniquement)

Chacune de ces instructions sera expliquée dans les sections suivantes:

1. Importez les didacticiels à l’aide de l’option Importer d’Android Studio

Android Studio dispose d'une option pour importer un projet à partir d'un autre IDE. Pour importer le projet de Gstreamer créé dans Eclipse, procédez comme suit:
1. Téléchargez tous les tutoriels de git:;
2. Dans Android Studio, sélectionnez Fichier -> Nouveau projet d'importation.
3. Dans le nouveau navigateur pour l'écran de fichier, allez à "gst-docs", sélectionnez le projet souhaité (dans mon cas, tutoriel 5) "Android-tutorial-5" et cliquez sur "OK".

 Selecting Project

2. Configurez Android Studio pour utiliser NDK

Maintenant que le projet a été importé, il est nécessaire d'informer Android Studio que le projet utilise le framework NDK. Ainsi, le Gradle sera en mesure d'importer et de gérer toutes les dépendances. Pour ce faire, nous devons associer le fichier Android.mk (déjà dans le dossier du didacticiel):
1. Faites un clic droit sur «app» dans l'onglet de navigation de gauche
2. Cliquez sur "Link C++ Project with Gradle"
3. Dans la nouvelle fenêtre:

  • Changez "Build System" de "CMake" en "ndk-build"
  • Cliquez sur "..." et accédez à l'emplacement de Android.mk "/AndroidStudioProjects/Android-studio-5/app/src/jni/Android.mk"
  • Hit OK 

Maintenant, les fichiers de construction externes apparaîtront dans l’onglet de gauche du projet. Quelques erreurs apparaîtront aussi, c'est normal et seront corrigées dans les prochaines sections.

3. Définissez une variable dans le fichier «Android.mk»

La dernière erreur de section se produit car «Android.mk» ne trouve pas le chemin d’extraction de GStreamer. Définissons donc la variable GSTREAMER_ROOT_Android sur le chemin d’extraction de GStreamer. Pour ce faire:
1. Parcourez l'onglet de gauche et développez "Champs de construction externes";
2. Double-cliquez sur Android.mk pour ouvrir le fichier.
3. À la ligne 10, sous "include $ (BUILD_SHARED_LIBRARY)", tapez: 
- "GSTREAMER_ROOT_Android: = chemin
-NOguillemets
- chemin est le chemin (évidemment) où GStreamer a été extrait.
Après cela, Gradle se synchronisera et une erreur "*** ABI cible Arch Arch non pris en charge: mips. Stop" sera affichée.

 Setting GSTREAMER_ROOT_Android

4. Définissez Gradle ne compiler que certaines architectures

La dernière erreur de section se produit car Grade tente de créer différentes architectures mais ne trouve pas le fichier à créer dans MIPS. Pour résoudre ce problème, nous allons spécifier les architectures à construire en excluant MIPS:
1. Dans l'onglet de gauche du navigateur, développez Scripts Gradle;
2. Double-cliquez sur "build.gradle (Module: app)"
3. Dans la ligne sous "nom_module", tapez:
(pour lancer le tutoriel 5)
- abiFilters 'x86', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
(pour lancer le tutoriel 2)
- filtres abi 'x86', 'armeabi-v7a', 'arm64-v8a'
]
(edit 3/29/2018: J'ai compris qu'il pourrait être nécessaire de supprimer davantage d'architecture en fonction de votre version de Gstreamer et de votre gestionnaire NDK. Si cela ne fonctionne pas, essayez différentes combinaisons de suppression) 

 enter image description here

5. Copiez la classe Gstreamer dans le chemin correct.

La dernière configuration nécessaire concerne une importation de package dans la classe Main.

 Class import error

L’erreur montrée ci-dessus est due au fait qu’aucune classe GStreamer n’a la fonction «.init». Pour résoudre ce problème, nous devons copier la classe GStreamer à partir du fichier où elle a été extraite et la coller dans le chemin spécifié:

  1. Naviguez, à l'aide du gestionnaire de fichiers de votre système, jusqu'au fichier où vous avez extrait GStreamer.
  2. À partir du fichier extrait, accédez à l'emplacement de la classe GStreamer. Il se trouve dans /arm/share/gst-Android/ndk-build/GStreamer.JavaCopy GStreamer.Java. 
  3. Retournez dans Android Studio et créez le chemin d'importation auquel la classe Main tente d'accéder en commençant par/app/Java dans l'onglet de gauche du navigateur. Donc, pour l'image ci-dessus, nous devons créer le chemin org.freedesktop.gstreamer et y coller le fichier GStreamer.Java:
  4. Faites un clic droit sur le dossier Java
  5. Nouveau-> Forfait
  6. Tapez org.freedesktop.gstreamer
  7. Cliquez avec le bouton droit de la souris sur org.freedesktop.gstreamer et collez . 5. L'erreur d'importation est maintenant résolue, mais la nouvelle classe contient des erreurs. Pour les résoudre, tout ce que vous avez à faire est d’effacer de la classe copiée le «@» et tout ce qui se trouve entre «@».

6. Désactivez "Instante Run" dans Android Studio. (modification effectuée le 27/10/2017)
Cette fonctionnalité d'Android Studio peut poser des problèmes lors de la tentative d'exécution du projet. Il est donc judicieux de la désactiver.
Désactivation de "Instante Run":

1. Sous Android Studio, sélectionnez "Fichier" -> "Paramètres ..." (Ctrl + Alt + S). 
2. "Construction, exécution, déploiement" -> "Exécution instantanée"
3. Décochez la case "Activer la modification instantanée du code/des ressources lors du déploiement (remplacement par défaut) (activé par défaut)" 
4. Appuyez sur "Appliquer"

7. Correction de "l'argument doré de l'éditeur de liens" (utilisateurs de Windows uniquement)

En essayant de Windows, vous obtiendrez l'erreur: 
Error:error: invalid linker name in argument '-Fuse-ld=gold' 
Réparer: 
1. Go to Android NDK Linker (GStreamer) - nom du lieur non valide -Fuse-ld = gold
2. Suivez les instructions de Antoine Zambelli .

15
Eduardo Fernando

Après quelques jours de difficultés, j'ai constaté que les documents du didacticiel gstreamer ont été mis à jour pour utiliser le système de génération Gradle. Vous pouvez voir un exemple de travail complet dans https://cgit.freedesktop.org/gstreamer/gst-docs/ , voir la validation à partir du 14 juin 2018, 'Tutoriels Android: ajouter un système de construction gradle'

1
avlacatus