Mam skompilowaną FFmpeg (libffmpeg.so) na Androida. Teraz muszę zbudować aplikację taką jak RockPlayer lub użyć istniejącej platformy multimediów Androida, aby wywołać FFmpeg.
Czy masz kroki / procedury / kod / przykład integracji FFmpeg na Androidzie / StageFright?
Czy możesz mi pomóc, jak korzystać z tej biblioteki do odtwarzania multimediów?
Mam wymaganie, w którym mam już strumienie transportu audio i wideo, które muszę przesłać do FFmpeg i dekodować / renderować. Jak mogę to zrobić na Androidzie, skoro interfejsy API IOMX są oparte na OMX i nie można tutaj podłączyć FFmpeg?
Nie mogłem też znaleźć dokumentacji dotyczącej interfejsów API FFmpeg, które należy wykorzystać do odtwarzania.
android
ffmpeg
stagefright
android-ffmpeg
Występ
źródło
źródło
Odpowiedzi:
Oto kroki, które przeszedłem, aby ffmpeg działał na Androidzie:
make
oddalone. Musisz także wyodrębnić bionic (libc) i zlib (libz) z kompilacji Androida, ponieważ biblioteki ffmpeg od nich zależą.Utwórz dynamiczną funkcję zawijania biblioteki ffmpeg za pomocą Androida NDK . Istnieje wiele dokumentacji na temat pracy z NDK. Zasadniczo musisz napisać trochę kodu C / C ++, aby wyeksportować funkcjonalność, której potrzebujesz z ffmpeg do biblioteki java, z którą może współpracować JNI. NDK pozwala łatwo łączyć się z bibliotekami statycznymi wygenerowanymi w kroku 1, wystarczy dodać wiersz podobny do tego do Android.mk:
LOCAL_STATIC_LIBRARIES := libavcodec libavformat libavutil libc libz
Użyj dynamicznej biblioteki owijającej ffmpeg ze źródeł Java. Jest wystarczająco dużo dokumentacji na temat JNI, powinieneś być w porządku.
Jeśli chodzi o używanie ffmpeg do odtwarzania, istnieje wiele przykładów (sam plik binarny ffmpeg jest dobrym przykładem), tutaj podstawowy samouczek. Najlepsza dokumentacja znajduje się w nagłówkach.
Powodzenia :)
źródło
Z różnych powodów Multimedia były i nigdy nie są łatwe do osiągnięcia, bez obniżenia wydajności. ffmpeg to wysiłek ulepszenia go z dnia na dzień. Obsługuje różne formaty kodeków i kontenerów.
Teraz, aby odpowiedzieć na pytanie, jak korzystać z tej biblioteki , powiedziałbym, że napisanie jej tutaj nie jest takie proste. Ale mogę cię poprowadzić w następujący sposób .
1) W katalogu ffmpeg kodu źródłowego masz plik_wyjściowy.c lub przykładowy_api . C. Tutaj możesz zobaczyć kod, w którym odbywa się kodowanie / dekodowanie. Dowiesz się, które API w ffmpeg powinieneś wywołać. To byłby twój pierwszy krok.
2) Dolphin player to projekt typu open source dla Androida. Obecnie występują błędy, ale programiści pracują nieprzerwanie. W tym projekcie masz przygotowaną całą konfigurację, której możesz użyć do kontynuowania dochodzenia. Oto link do projektu z code.google.com lub uruchom polecenie „ git clone https://code.google.com/p/dolphin-player/ ” w terminalu. Możesz zobaczyć dwa projekty o nazwach P i P86. Możesz użyć jednego z nich.
Dodatkową wskazówką, którą chciałbym zaoferować, jest to, że kiedy budujesz kod ffmpeg, wewnątrz build.sh musisz włączyć multipleksery / demuxery / kodery / dekodery formatów, których chcesz używać. W przeciwnym razie odpowiedni kod nie zostanie uwzględniony w bibliotekach. Zrozumienie tego zajęło mi dużo czasu. Więc pomyślałem o podzieleniu się tym z tobą.
Kilka podstaw: kiedy mówimy plik wideo, np. Avi, jest to połączenie zarówno audio, jak i wideo
Plik wideo = wideo + audio
Wideo = Kodek + Muxer + Demuxer
kodek = koder + dekoder
=> Wideo = koder + dekoder + Muxer + Demuxer (Mpeg4 + Mpeg4 + avi + avi - przykład dla kontenera avi)
Audio = Kodek + Muxer + Demuxer
kodek = koder + dekoder
=> Audio = koder + dekoder + Muxer + Demuxer (mp2 + mp2 + avi + avi - przykład dla kontenera avi)
Kodek (nazwa pochodzi od kombinacji en * co * der / * dec * oder) jest tylko częścią formatu, który definiuje algorytmy używane do kodowania / dekodowania ramki. AVI nie jest kodekiem, jest kontenerem, który wykorzystuje kodek wideo MPEG4 i kodek audio MP2.
Muxer / demuxer służy do łączenia / oddzielania ramek od pliku używanego podczas kodowania / dekodowania.
Więc jeśli chcesz używać formatu avi, musisz włączyć komponenty wideo + komponenty audio.
Np. Dla avi musisz włączyć następujące opcje. koder mpeg4, dekoder mpeg4, koder mp2, dekoder mp2, avi muxer, avi demuxer.
phewwwwwww ...
Programowo build.sh powinien zawierać następujący kod:
Mam nadzieję, że nie pomyliłem cię bardziej po tym wszystkim ...
Dzięki, Każda potrzebna pomoc, proszę dać mi znać.
źródło
Najłatwiejszą do zbudowania i łatwą w użyciu implementację, którą znalazłem, przygotował zespół projektu guguianian: https://github.com/guardianproject/android-ffmpeg
źródło
Zrobiłem mały projekt, aby skonfigurować i zbudować X264 i FFMPEG przy użyciu Androida NDK. Najważniejsze, czego brakuje, to przyzwoity interfejs JNI, aby był dostępny przez Javę, ale jest to łatwa część (stosunkowo). Kiedy zacznę przygotowywać interfejs JNI do własnych celów, wrzucę to.
Zaletą systemu kompilacji olvaffe jest to, że nie wymaga plików Android.mk do budowania bibliotek, po prostu używa zwykłych plików makefile i łańcucha narzędzi. To znacznie zmniejsza prawdopodobieństwo, że przestanie działać po wyciągnięciu nowej zmiany z FFMPEG lub X264.
https://github.com/halfninja/android-ffmpeg-x264
źródło
x264_param_parse': common.c:(.text+0x2864): undefined reference to
_DefaultRuneLocale 'collect2: ld zwrócił 1 status wyjścia make: *** [x264] Błąd 1Po wielu badaniach, obecnie jest to najbardziej zaktualizowana skompilowana biblioteka dla Androida, którą znalazłem:
https://github.com/bravobit/FFmpeg-Android
FFmpeg release n4.0-39-gda39990
źródło
Aby utworzyć aplikację FFMPEG, skorzystałem z tego projektu ( https://github.com/hiteshsondhi88/ffmpeg-android-java ), więc nie muszę niczego kompilować. Myślę, że to prosty sposób na użycie FFMPEG w naszych aplikacjach na Androida.
Więcej informacji na http://hiteshsondhi88.github.io/ffmpeg-android-java/
źródło
Zainspirowany wieloma innymi aplikacjami FFmpeg na Androida (głównie projekt guadian ) znalazłem rozwiązanie (również z obsługą Lame).
(lame i FFmpeg: https://github.com/intervigilium/liblame i http://bambuser.com/opensource )
aby zadzwonić do FFmpeg:
i do obsługi wyjścia konsoli:
źródło
Dziwne, że ten projekt nie został wspomniany: AndroidFFmpeg z Appunite
Ma dość szczegółowe instrukcje krok po kroku, aby skopiować / wkleić do wiersza poleceń, dla leniwych ludzi takich jak ja))
źródło
Miałem ten sam problem, większość odpowiedzi znalazłem tutaj z datą. Skończyło się na napisaniu opakowania na FFMPEG, aby uzyskać dostęp z Androida za pomocą jednego wiersza kodu.
https://github.com/madhavanmalolan/ffmpegandroidlibrary
źródło
Najpierw dodaj zależność biblioteki FFmpeg
Następnie załaduj aktywność
Użyj także innej funkcji FFmpeg
źródło