Saya mendapatkan FFmpeg yang dikompilasi (libffmpeg.so) di Android. Sekarang saya harus membuat aplikasi seperti RockPlayer atau menggunakan kerangka kerja multimedia Android yang ada untuk menjalankan FFmpeg.
Apakah Anda memiliki langkah / prosedur / kode / contoh tentang mengintegrasikan FFmpeg di Android / StageFright?
Bisakah Anda membimbing saya tentang bagaimana saya bisa menggunakan perpustakaan ini untuk pemutaran multimedia?
Saya memiliki persyaratan di mana saya sudah memiliki stream transportasi audio dan video, yang perlu saya beri makan ke FFmpeg dan mendapatkannya diterjemahkan / dirender. Bagaimana saya bisa melakukan ini di Android, karena API IOMX berbasis OMX dan tidak dapat plug-in FFmpeg di sini?
Juga saya tidak dapat menemukan dokumentasi tentang API FFmpeg yang perlu digunakan untuk pemutaran.
sumber
Jawaban:
Berikut adalah langkah-langkah yang saya lalui dalam mendapatkan ffmpeg untuk bekerja di Android:
make
jauh. Anda perlu mengekstrak bionik (libc) dan zlib (libz) dari Android build juga, karena pustaka ffmpeg bergantung padanya.Buat pustaka dinamis yang membungkus fungsionalitas ffmpeg menggunakan Android NDK . Ada banyak dokumentasi di luar sana tentang cara bekerja dengan NDK. Pada dasarnya Anda harus menulis beberapa kode C / C ++ untuk mengekspor fungsionalitas yang Anda butuhkan dari ffmpeg ke perpustakaan yang dapat berinteraksi dengan java melalui JNI. NDK memungkinkan Anda untuk dengan mudah menautkan pustaka statis yang Anda buat pada langkah 1, cukup tambahkan baris yang mirip dengan ini ke Android.mk:
LOCAL_STATIC_LIBRARIES := libavcodec libavformat libavutil libc libz
Gunakan pustaka dinamis pembungkus ffmpeg dari sumber java Anda. Ada cukup dokumentasi tentang JNI di luar sana, Anda harus baik-baik saja.
Mengenai menggunakan ffmpeg untuk pemutaran, ada banyak contoh (biner ffmpeg itu sendiri adalah contoh yang baik), inilah tutorial dasar. Dokumentasi terbaik dapat ditemukan di header.
Semoga berhasil :)
sumber
Karena berbagai alasan, Multimedia dulu dan tidak pernah mudah dalam hal mencapai tugas tanpa mengorbankan efisiensi. ffmpeg adalah upaya meningkatkannya dari hari ke hari. Ini mendukung berbagai format codec dan wadah.
Sekarang untuk menjawab pertanyaan tentang bagaimana menggunakan perpustakaan ini , saya akan mengatakan bahwa tidak mudah untuk menulisnya di sini. Tapi saya bisa membimbing Anda dengan cara berikut .
1) Di dalam direktori ffmpeg kode sumber, Anda memiliki output_example.c atau api_example.c . Di sini, Anda dapat melihat kode di mana pengkodean / decoding dilakukan. Anda akan mendapatkan gagasan tentang ffmpeg API mana yang harus Anda panggil. Ini akan menjadi langkah pertama Anda.
2) Dolphin player adalah proyek sumber terbuka untuk Android. Saat ini sedang mengalami bug tetapi pengembang bekerja terus menerus. Dalam proyek itu Anda memiliki seluruh pengaturan yang siap yang dapat Anda gunakan untuk melanjutkan penyelidikan Anda. Berikut ini tautan ke proyek dari code.google.com atau jalankan perintah " git clone https://code.google.com/p/dolphin-player/ " di terminal. Anda dapat melihat dua proyek bernama P dan P86. Anda bisa menggunakan keduanya.
Kiat tambahan yang ingin saya tawarkan adalah bahwa ketika Anda sedang membangun kode ffmpeg, di dalam build.sh Anda perlu mengaktifkan muxers / demuxers / encoders / decoder dari format yang ingin Anda gunakan. Jika tidak, kode yang sesuai tidak akan disertakan dalam perpustakaan. Butuh banyak waktu bagi saya untuk menyadari hal ini. Jadi pikirkan untuk membaginya dengan Anda.
Beberapa Dasar-Dasar: Ketika kita mengatakan file video, mis: avi, itu adalah kombinasi dari audio dan video
File video = Video + Audio
Video = Codec + Muxer + Demuxer
codec = encoder + Decoder
=> Video = encoder + decoder + Muxer + Demuxer (Mpeg4 + Mpeg4 + avi + avi - Contoh untuk wadah avi)
Audio = Codec + Muxer + Demuxer
codec = encoder + Decoder
=> Audio = encoder + decoder + Muxer + Demuxer (mp2 + mp2 + avi + avi - Contoh untuk wadah avi)
Codec (nama adalah deriverd dari kombinasi en * co * der / * dec * oder) hanyalah bagian dari format yang mendefinisikan algoritma yang digunakan untuk menyandikan / mendekodekan sebuah frame. AVI bukan codec, ini adalah wadah yang menggunakan codec Video Mpeg4 dan Audio codec dari mp2.
Muxer / demuxer digunakan untuk menggabungkan / memisahkan frame dari file yang digunakan saat encoding / decoding.
Jadi jika Anda ingin menggunakan format avi, Anda harus mengaktifkan komponen Video + komponen Audio.
Misalnya, untuk avi, Anda harus mengaktifkan yang berikut ini. mpeg4 Encoder, mpeg4 decoder, mp2 encoder, mp2 decoder, avi muxer, avi demuxer.
phewwwwwww ...
Secara pemrograman build.sh harus berisi kode berikut:
Semoga saya idid tidak membingungkan Anda lagi setelah semua ini ...
Terima kasih, Setiap bantuan yang diperlukan, harap beri tahu saya.
sumber
Implementasi yang paling mudah dibangun, mudah digunakan yang saya temukan dibuat oleh tim theguardianproject: https://github.com/guardianproject/android-ffmpeg
sumber
Saya telah melakukan sedikit proyek untuk mengonfigurasi dan membangun X264 dan FFMPEG menggunakan Android NDK. Hal utama yang hilang adalah antarmuka JNI yang layak untuk membuatnya dapat diakses melalui Java, tetapi itu adalah bagian yang mudah (relatif). Ketika saya mencoba membuat antarmuka JNI baik untuk keperluan saya sendiri, saya akan mendorongnya.
Keuntungan dari sistem build olvaffe adalah tidak memerlukan file Android.mk untuk membangun perpustakaan, hanya menggunakan makefile biasa dan toolchain. Ini membuatnya jauh lebih kecil kemungkinannya untuk berhenti bekerja ketika Anda menarik perubahan baru dari FFMPEG atau X264.
https://github.com/halfninja/android-ffmpeg-x264
sumber
x264_param_parse': common.c:(.text+0x2864): undefined reference to
_DefaultRuneLocale 'collect2: ld mengembalikan 1 status keluar make: *** [x264] Kesalahan 1Setelah banyak penelitian, sekarang ini adalah pustaka terkompilasi paling terbaru untuk Android yang saya temukan:
https://github.com/bravobit/FFmpeg-Android
FFmpeg release n4.0-39-gda39990
sumber
Untuk membuat aplikasi FFMPEG saya, saya menggunakan proyek ini ( https://github.com/hiteshsondhi88/ffmpeg-android-java ) jadi, saya tidak perlu mengkompilasi apa pun. Saya pikir ini cara mudah untuk menggunakan FFMPEG di aplikasi Android kami.
Info lebih lanjut tentang http://hiteshsondhi88.github.io/ffmpeg-android-java/
sumber
Terinspirasi oleh banyak FFmpeg lain pada implementasi Android di luar sana (terutama proyek guadian ), saya menemukan solusi (dengan dukungan Lame juga).
(lumpuh dan FFmpeg: https://github.com/intervigilium/liblame dan http://bambuser.com/opensource )
untuk memanggil FFmpeg:
dan untuk menangani output konsol:
sumber
Aneh bahwa proyek ini belum disebutkan: AndroidFFmpeg dari Appunite
Ini memiliki petunjuk langkah-demi-langkah yang cukup rinci untuk menyalin / menempel ke baris perintah, untuk orang malas seperti saya))
sumber
Saya memiliki masalah yang sama, saya menemukan sebagian besar jawaban di sini keluar. Saya akhirnya menulis bungkus pada FFMPEG untuk diakses dari Android dengan satu baris kode.
https://github.com/madhavanmalolan/ffmpegandroidlibrary
sumber
Pertama, tambahkan dependensi library FFmpeg
Kemudian muat dalam aktivitas
Juga gunakan fitur lain oleh FFmpeg
sumber