编译ffmpeg问题整理

export TMPDIR=F:/xxx/FFmpeg-master/temp
export NDK=D:/android-ndk-r9d-windows-x86_64/android-ndk-r9d
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt
export PLATFORM=$NDK/platforms/android-8/arch-arm
export PREFIX=F:/xxx/FFmpeg-master
export INCLUDE_DIR=F:/xxx/FFmpeg-master/include

export LIB=F:/xxx/FFmpeg-master/elib   


创建temp在cygwin下 chomd 777 temp


./configure --target-os=linux --prefix=$PREFIX \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/windows-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/windows-x86_64/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/windows-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-nonfree \
--disable-everything \
--enable-version3 \
--enable-gpl \
--disable-doc \
--enable-avresample \
--enable-demuxer=rtsp \
--enable-muxer=rtsp \
--enable-muxer=mp4 \
--enable-demuxer=mp4 \
--enable-encoders \
--enable-decoders \
--disable-ffplay \
--disable-ffserver \
--enable-ffmpeg \
--disable-ffprobe \
--enable-neon   \
--enable-protocol=file \
--enable-hwaccels \
--enable-zlib \
--disable-devices \
--enable-avdevice \
--enable-avfilter \
--enable-filter=movie \
--enable-avfilter \
--enable-filter=tnegate \
--disable-shared \
--enable-static \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
--extra-ldflags="-L${LIB}"


make -j4 install


执行顺序:先export  configure make 



libavfilter/libavfilter.a
D:\android-ndk-r9d-windows-x86_64\android-ndk-r9d\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ranlib.exe: '-D': No such file

解决办法:改掉config.mak 的 
RANLIB=D:/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-ranlib -D 改成-t


没有vector<char *> argv 没有argv.data() member 则改为 &argv[0]


将.a文件转化为 txt文件的命令
 nm libavfilter.a>1.txt


config.log 报这个错误Unable to create temporary file in E:/ffpmeg/FFmpeg-master/temp.  是没有给temp创建权限 chmod 777 temp

将多个a文件编译成so文件

将生成include下边的所有文件拷贝到jni下边,将lib也拷贝到jni下

编写android.mk

LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)




LOCAL_MODULE    := ffmpeg


LOCAL_ARM_MODE := arm
#LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
LOCAL_PRELINK_MODULE := false
LOCAL_CPPFLAGS := -UBANANA -DBANANA=300 -DLINUX -DANDROID


STL_PATH := \
        $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include \
   


LOCAL_C_INCLUDES := \
$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/include \


LOCAL_LDLIBS := -ldl -llog -lz  -lm  -L$(STL_PATH) 




LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS -Wl,-Map=test.map -g


# -lUtils                 
LOCAL_LDFLAGS += -L$(LOCAL_PATH)/lib \
-lavformat \
-lavfilter              \
-lavcodec \
-lswresample            \
-lswscale               \
-lavutil \
 


LOCAL_C_INCLUDES+ := \
$(LOCAL_PATH)/libavutil \
$(LOCAL_PATH)/libavformat \
$(LOCAL_PATH)/libavcodec \
$(LOCAL_PATH)/libavfilter \
$(LOCAL_PATH)/libswresample \
$(LOCAL_PATH)/libswscale \






LOCAL_SRC_FILES := cmdutils.c \
                   ffmpeg_filter.c \
                   ffmpeg_opt.c \
                   ffmpegi.cpp \
  ffmpegx.c \
                   FFmpegJni.cpp \
                   
include $(BUILD_SHARED_LIBRARY)


Application.mk

APP_ABI := armeabi
# mips x86 armeabi-v7a
APP_STL :=gnustl_static
APP_PLATFORM:=android-15
NDK_TOOLCHAIN_VERSION = 4.8

<think>好的,我现在需要帮助用户找到在RK3588平台上交叉编译FFmpeg的教程或配置方法。首先,用户提到了参考的引用内容,里面有关于交叉编译OpenCV和FFmpeg的信息,但需要仔细分析哪些部分相关。 首先,查看引用[1],里面提到将FFmpeg生成的文件复制到交叉编译工具的usr目录下,这可能涉及FFmpeg的交叉编译步骤。引用[2]的标题明确提到了RK3588交叉编译FFmpeg-4.2.9,看起来有详细的步骤,比如下载、编译动态库和静态库,以及配置环境。引用[3]则提到需要注意OpenCV交叉编译是否带FFmpeg,但用户可能需要的是单独的FFmpeg编译,所以重点可能在引用[2]。 接下来需要整理用户可能的步骤。通常交叉编译FFmpeg需要配置交叉编译工具链,设置环境变量,配置FFmpeg编译选项,指定目标平台架构(如aarch64),以及安装必要的依赖库。用户提供的引用[2]中提到了编译x264,这可能是一个依赖项,所以可能需要先编译x264,再编译FFmpeg。 需要确保步骤中的路径正确,例如交叉编译器的位置,头文件和库文件的路径是否正确。引用[2]中提到的目录结构可能很重要,比如将x264和FFmpeg的源码放在特定位置,然后配置编译参数。此外,检查pkg-config的输出是否正确,确保FFmpeg能找到依赖库。 可能遇到的常见问题包括配置选项错误、依赖库缺失或路径不正确,以及交叉编译工具链未正确设置。用户可能需要按照引用[2]中的步骤,先安装必要的环境,然后逐步编译x264和FFmpeg,注意修改detect_ffmpeg.cmake这样的配置文件,以确保正确链接库。 最后,生成相关问题时要考虑用户可能的后续问题,比如如何验证FFmpeg是否正确编译,如何处理依赖项,或者如何将FFmpeg集成到其他项目中如OpenCV。需要确保回答结构清晰,分步骤说明,并引用正确的参考资料。</think>### RK3588交叉编译FFmpeg的步骤说明 #### 1. 准备交叉编译工具链 首先需安装适用于RK3588(ARM架构)的交叉编译工具链。建议使用官方推荐的`aarch64-linux-gnu`工具链,并确保路径已加入`PATH`环境变量: ```bash export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ ``` #### 2. 编译依赖库x264 FFmpeg依赖x264编码器,需先交叉编译x264: ```bash # 下载x264源码 git clone https://code.videolan.org/videolan/x264.git cd x264 # 配置交叉编译参数 ./configure --prefix=/opt/x264_arm \ --host=aarch64-linux-gnu \ --enable-shared \ --enable-static make -j$(nproc) && make install ``` #### 3. 编译FFmpeg 配置FFmpeg时需指定交叉编译参数和依赖库路径: ```bash # 下载FFmpeg-4.2.9源码 wget https://ffmpeg.org/releases/ffmpeg-4.2.9.tar.gz tar -zxvf ffmpeg-4.2.9.tar.gz && cd ffmpeg-4.2.9 # 配置编译选项 ./configure \ --prefix=/opt/ffmpeg_arm \ --arch=aarch64 \ --target-os=linux \ --enable-cross-compile \ --cross-prefix=aarch64-linux-gnu- \ --enable-shared \ --disable-static \ --enable-gpl \ --enable-libx264 \ --extra-cflags="-I/opt/x264_arm/include" \ --extra-ldflags="-L/opt/x264_arm/lib" make -j$(nproc) && make install ``` #### 4. 验证与移植 编译完成后,检查`/opt/ffmpeg_arm`目录下的`bin`、`lib`、`include`文件,将其复制到RK3588设备的对应路径中。通过`file`命令验证二进制文件架构: ```bash file ffmpeg # 应显示"ARM aarch64" ``` #### 关键配置说明 - `--cross-prefix`:指定交叉编译工具前缀。 - `--extra-cflags`和`--extra-ldflags`:指向交叉编译的x264库路径。 - 若需其他编解码器(如libmp3lame),需预先交叉编译并添加对应参数[^2][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值