Build FFMPEG trong android.
I. FFMPEG dùng để làm gì FFmpeg là một nền tảng mã nguồn mở để ghi âm, chuyển đổi, chơi và streaming video và âm thanh. Nó bao gồm libavcodec, một video / audio codec phổ biến.Một vài ứng dụng Android phổ biến đều được xây dựng dựa trên FFmpeg, bao gồm cả RockPlayer, MoboPlayer, acrMedia, ...
I. FFMPEG dùng để làm gì
FFmpeg là một nền tảng mã nguồn mở để ghi âm, chuyển đổi, chơi và streaming video và âm thanh. Nó bao gồm libavcodec, một video / audio codec phổ biến.Một vài ứng dụng Android phổ biến đều được xây dựng dựa trên FFmpeg, bao gồm cả RockPlayer, MoboPlayer, acrMedia, vitalPlayer, V-Cut Express vv Nếu bạn đang phát triển các ứng dụng đa phương tiện mà cần một video / audio codec, ffmpeg là một lựa chọn tốt.
II.Làm thế nào để build FFMPEG
**1. Các tool cần thiết: **
_Android NDK: https://developer.android.com/tools/sdk/ndk/index.htm
_Android SDK: https://developer.android.com/sdk/index.html
_FFMPEG source: https://www.ffmpeg.org/download.html
Sao chép và dán các tập lệnh bash dưới đây vào một trình soạn thảo văn bản, và lưu nó tạo thành file build_android.sh dưới ffmpeg thư mục.
2. Confix file build
######################################################
######################################################
NDK=~/Desktop/android/android-ndk-r5b PLATFORM=$NDK/platforms/android-8/arch-arm/ PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 function build_one { ./configure --target-os=linux --prefix=$PREFIX --enable-cross-compile --extra-libs="-lgcc" --arch=arm --cc=$PREBUILT/bin/arm-linux-androideabi-gcc --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- --nm=$PREBUILT/bin/arm-linux-androideabi-nm --sysroot=$PLATFORM --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " --disable-shared --enable-static --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" --disable-everything --enable-demuxer=mov --enable-demuxer=h264 --disable-ffplay --enable-protocol=file --enable-avformat --enable-avcodec --enable-decoder=rawvideo --enable-decoder=mjpeg --enable-decoder=h263 --enable-decoder=mpeg4 --enable-decoder=h264 --enable-parser=h264 --disable-network --enable-zlib --disable-avfilter --disable-avdevice $ADDITIONAL_CONFIGURE_FLAG make clean make -j4 install $PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o $PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a }
CPU=armv7-a OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " PREFIX=./android/$CPU ADDITIONAL_CONFIGURE_FLAG= build_one
Note: chỉnh sửa các đường dẫn sau: NDK=<path trên máy> PLATFORM=$NDK/platforms/android-8/arch-arm/ PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/<platform system>-x86_64 Một khi các tập tin được lưu, hãy chắc chắn rằng file script được thực thi theo lệnh dưới đây: **sudo chmod + x build_android.sh**_ Sau đó thực hiện lệnh: ** ./build_android.sh**_
3. Xây dựng Output
Việc xây dựng có thể mất một thời gian để hoàn thành tùy thuộc vào tốc độ máy tính của bạn. Một khi nó được thực hiện, bạn sẽ có thể tìm thấy một thư mục $$NDK/source/ffmpeg/android, trong đó có arm/lib và arm/ include:
_Arm/lib chứa các thư viện chia sẻ, trong khi thư mục arm/include chứa các tập tin tiêu đề cho libavcodec, libavformat, libavfilter, libavutil, libswscale vv
_Lưu ý rằng thư mục arm / lib chứa cả các tập tin thư viện (ví dụ: libavcodec-55.so) và các liên kết tượng trưng (ví dụ: libavcodec.so) cho họ. Chúng ta có thể loại bỏ các liên kết tượng trưng để tránh nhầm lẫn.
4. Làm cho thư viện ffmpeg có sẵn cho các dự án của bạn
Bây giờ chúng tôi đã biên soạn các thư viện ffmpeg và sẵn sàng để sử dụng chúng. Android NDK cho phép chúng ta tái sử dụng một mô-đun được biên dịch thông qua việc include-module xây dựng lệnh.
_Lý do tôi xây dựng mã nguồn ffmpeg của chúng tôi trong thư mục NDK / source vì ndk_build hệ thống sẽ tìm kiếm các thư mục dưới con đường này cho các mô-đun bên ngoài tự động. Để khai báo các thư viện ffmpeg là module tái sử dụng, chúng ta sẽ cần phải thêm một tập tin có tên là NDK /source/ ffmpeg-version/android/armv/ Android.mk với các nội dung sau đây,
LOCAL_PATH: = $ (calll-my-dir) include $ (CLEAR_VARS) LOCAL_MODULE: = libavcodec LOCAL_SRC_FILES: = lib / libavcodec-55.so LOCAL_EXPORT_C_INCLUDES: = $ (LOCAL_PATH) / include include $ (PREBUILT_SHARED_LIBRARY) include $ (CLEAR_VARS) LOCAL_MODULE: = libavformat LOCAL_SRC_FILES: = lib / libavformat-55.so LOCAL_EXPORT_C_INCLUDES: = $ (LOCAL_PATH) / include include $ (PREBUILT_SHARED_LIBRARY) include $ (CLEAR_VARS) LOCAL_MODULE: = libswscale LOCAL_SRC_FILES: = lib / libswscale-2.so LOCAL_EXPORT_C_INCLUDES: = $ (LOCAL_PATH) / include include $ (PREBUILT_SHARED_LIBRARY) include $ (CLEAR_VARS) LOCAL_MODULE: = libavutil LOCAL_SRC_FILES: = lib / libavutil-52.so LOCAL_EXPORT_C_INCLUDES: = $ (LOCAL_PATH) / include include $ (PREBUILT_SHARED_LIBRARY) include $ (CLEAR_VARS) LOCAL_MODULE: = libavfilter LOCAL_SRC_FILES: = lib / libavfilter-3.so LOCAL_EXPORT_C_INCLUDES: = $ (LOCAL_PATH) / include include $ (PREBUILT_SHARED_LIBRARY) include $ (CLEAR_VARS) LOCAL_MODULE: = libwsresample LOCAL_SRC_FILES: = lib / libswresample-0.so LOCAL_EXPORT_C_INCLUDES: = $ (LOCAL_PATH) / include include $ (PREBUILT_SHARED_LIBRARY)
Dưới đây là một ví dụ về cách chúng ta có thể sử dụng các thư viện trong JNI file / Android.mk của một dự án Android native: LOCAL_PATH: = $$(call-my-dir)
include $ (CLEAR_VARS) LOCAL_MODULE: = tutorial03 LOCAL_SRC_FILES: = tutorial03.c LOCAL_LDLIBS: = -llog -ljnigraphics -lz -landroid LOCAL_SHARED_LIBRARIES: = libavformat libavcodec libswscale libavutil include $ (BUILD_SHARED_LIBRARY) $ (call-module, ffmpeg/android/arm)
_Lưu ý rằng chúng tôi gọi là call mô-đun với đường dẫn tương đối so với $$DK/source cho việc xây dựng hệ thống để xác định vị trí các thư viện ffmpeg thể tái sử dụng.