J'ai compilé FFmpeg (libffmpeg.so) sur Android. Maintenant, je dois créer une application comme RockPlayer ou utiliser le cadre multimédia Android existant pour appeler FFmpeg.
Avez-vous des étapes / procédures / code / exemple sur l'intégration de FFmpeg sur Android / StageFright?
Pouvez-vous me guider sur la façon d'utiliser cette bibliothèque pour la lecture multimédia?
J'ai une exigence où j'ai déjà des flux de transport audio et vidéo, que je dois alimenter à FFmpeg et le décoder / rendre. Comment puis-je le faire sur Android, car les API IOMX sont basées sur OMX et ne peuvent pas plug-in FFmpeg ici?
De plus, je n'ai pas pu trouver de documentation sur les API FFmpeg qui doivent être utilisées pour la lecture.
Réponses:
Voici les étapes que j'ai suivies pour que ffmpeg fonctionne sur Android:
make
loin. Vous devrez également extraire bionic (libc) et zlib (libz) de la version Android, car les bibliothèques ffmpeg en dépendent.Créez une bibliothèque dynamique encapsulant la fonctionnalité ffmpeg à l'aide du NDK Android . Il y a beaucoup de documentation sur la façon de travailler avec le NDK. Fondamentalement, vous devrez écrire du code C / C ++ pour exporter les fonctionnalités dont vous avez besoin de ffmpeg dans une bibliothèque avec laquelle Java peut interagir via JNI. Le NDK vous permet de vous lier facilement aux bibliothèques statiques que vous avez générées à l'étape 1, il suffit d'ajouter une ligne similaire à celle d'Android.mk:
LOCAL_STATIC_LIBRARIES := libavcodec libavformat libavutil libc libz
Utilisez la bibliothèque dynamique ffmpeg-wrapping de vos sources java. Il y a suffisamment de documentation sur JNI, ça devrait aller.
Concernant l'utilisation de ffmpeg pour la lecture, il existe de nombreux exemples (le binaire ffmpeg lui-même en est un bon exemple), voici un tutoriel de base. La meilleure documentation se trouve dans les en-têtes.
Bonne chance :)
la source
Pour diverses raisons, le multimédia n'a pas été et n'est jamais facile à réaliser sans compromettre l'efficacité. ffmpeg est un effort pour l'améliorer de jour en jour. Il prend en charge différents formats de codecs et de conteneurs.
Maintenant, pour répondre à la question de l'utilisation de cette bibliothèque , je dirais que ce n'est pas si simple de l'écrire ici. Mais je peux vous guider de différentes manières .
1) Dans le répertoire ffmpeg du code source, vous avez output_example.c ou api_example.c . Ici, vous pouvez voir le code où l'encodage / décodage est effectué. Vous aurez une idée des API à l'intérieur de ffmpeg que vous devez appeler. Ce serait votre première étape.
2) Dolphin player est un projet open source pour Android. Actuellement, il a des bugs mais les développeurs travaillent en permanence. Dans ce projet, vous avez toute la configuration prête que vous pouvez utiliser pour poursuivre votre enquête. Voici un lien vers le projet à partir de code.google.com ou exécutez la commande " git clone https://code.google.com/p/dolphin-player/ " dans un terminal. Vous pouvez voir deux projets nommés P et P86. Vous pouvez utiliser l'un ou l'autre.
Un conseil supplémentaire que je voudrais offrir est que lorsque vous construisez le code ffmpeg, à l'intérieur de build.sh, vous devez activer les muxers / demuxers / encoders / decoders des formats que vous souhaitez utiliser. Sinon, le code correspondant ne sera pas inclus dans les bibliothèques. Il m'a fallu beaucoup de temps pour réaliser cela. Alors j'ai pensé à le partager avec vous.
Quelques notions de base: quand on dit un fichier vidéo, ex: avi, c'est une combinaison à la fois audio et vidéo
Fichier vidéo = vidéo + audio
Vidéo = Codec + Muxer + Demuxer
codec = encodeur + décodeur
=> Vidéo = encodeur + décodeur + Muxer + Demuxer (Mpeg4 + Mpeg4 + avi + avi - Exemple pour conteneur avi)
Audio = Codec + Muxer + Demuxer
codec = encodeur + décodeur
=> Audio = encodeur + décodeur + Muxer + Demuxer (mp2 + mp2 + avi + avi - Exemple pour conteneur avi)
Le codec (le nom est dérivé d'une combinaison de en * co * der / * dec * oder) n'est qu'une partie du format qui définit les algorithmes utilisés pour coder / décoder une trame. AVI n'est pas un codec, c'est un conteneur qui utilise le codec vidéo de Mpeg4 et le codec audio de mp2.
Muxer / demuxer est utilisé pour combiner / séparer les trames d'un fichier utilisé lors de l'encodage / décodage.
Donc, si vous souhaitez utiliser le format avi, vous devez activer les composants vidéo + composants audio.
Par exemple, pour avi, vous devez activer les éléments suivants. Encodeur mpeg4, décodeur mpeg4, encodeur mp2, décodeur mp2, avi muxer, avi demuxer.
phewwwwwww ...
Build.sh par programme doit contenir le code suivant:
J'espère que je ne vous ai plus confondu après tout cela ...
Merci, toute aide nécessaire, veuillez me le faire savoir.
la source
L'implémentation la plus facile à construire et à utiliser que j'ai trouvée est faite par l'équipe de gardianproject: https://github.com/guardianproject/android-ffmpeg
la source
J'ai fait un petit projet pour configurer et construire X264 et FFMPEG en utilisant le NDK Android. La principale chose qui manque est une interface JNI décente pour la rendre accessible via Java, mais c'est la partie facile (relativement). Quand j'arriverai à rendre l'interface JNI bonne pour mes propres utilisations, je l'enfoncerai.
L'avantage par rapport au système de construction d'Olvaffe est qu'il ne nécessite pas de fichiers Android.mk pour construire les bibliothèques, il utilise simplement les makefiles réguliers et la chaîne d'outils. Cela le rend beaucoup moins susceptible de cesser de fonctionner lorsque vous tirez un nouveau changement de FFMPEG ou X264.
https://github.com/halfninja/android-ffmpeg-x264
la source
x264_param_parse': common.c:(.text+0x2864): undefined reference to
_DefaultRuneLocale 'collect2: ld a renvoyé 1 état de sortie make: *** [x264] Erreur 1Après beaucoup de recherches, en ce moment, c'est la bibliothèque compilée pour Android la plus mise à jour que j'ai trouvée:
https://github.com/bravobit/FFmpeg-Android
FFmpeg release n4.0-39-gda39990
la source
Pour créer mon application FFMPEG, j'ai utilisé ce projet ( https://github.com/hiteshsondhi88/ffmpeg-android-java ) donc, je n'ai rien à compiler. Je pense que c'est le moyen facile d'utiliser FFMPEG dans nos applications Android.
Plus d'informations sur http://hiteshsondhi88.github.io/ffmpeg-android-java/
la source
Inspiré par de nombreux autres FFmpeg sur les implémentations Android (principalement le projet guadian ), j'ai trouvé une solution (avec le support de Lame également).
(lame et FFmpeg: https://github.com/intervigilium/liblame et http://bambuser.com/opensource )
pour appeler FFmpeg:
et pour gérer la sortie de la console:
la source
Étrange que ce projet n'ait pas été mentionné: AndroidFFmpeg d'Appunite
Il a des instructions pas à pas assez détaillées pour copier / coller sur la ligne de commande, pour les paresseux comme moi))
la source
J'ai eu le même problème, j'ai trouvé la plupart des réponses ici datées. J'ai fini par écrire un wrapper sur FFMPEG pour accéder à partir d'Android avec une seule ligne de code.
https://github.com/madhavanmalolan/ffmpegandroidlibrary
la source
Tout d'abord, ajoutez la dépendance de la bibliothèque FFmpeg
Chargez ensuite en activité
Utilisez également une autre fonctionnalité de FFmpeg
la source