qt for android从编译ffmpeg x264 aac 到在qtcreator上使用

首先编译ffmpeg x264 aac,在编译ffmpeg时一开始很没有头绪,后来看到网上各种使用ndk编译ffmpeg,大概意思我理解也就是使用交叉编译环境编译x264,aac,ffmpeg时会出现很多错误,在这就不多说了,自己试试就知道了。主要还交叉编译环境的配置,一定要看准。出现 C compliter not execuate 看看ndk gcc 配置对了没。

faac编译 bl.sh

#!/bin/bash
export VERSION=4.6
export NDK=/home/into/android/android-ndk-r9d
export PREBUILT=${NDK}/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86
export PLATFORM=$NDK/platforms/android-9/arch-arm
export FFMPEG_ROOT=../ffmpeg
export X264_ROOT=../x264 #上面的x264的源码目录
export ELIB="$PREFIX/lib"
export FAAC_ROOT=../fdk-aac
#export CROSS_COMPILE= $PREBUILT/arm-linux-androideabi/
#CC_PATH = $NDK/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86/arm-linux-androideabi-gcc
function build_faac
{
    #cd $FAAC_ROOT
    pwd
    CFLAGS="-fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv7-a -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -MMD -MP "
    #FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared --prefix=$HOME --enable-armv5e "
    CROSS_COMPILE=$PREBUILT/bin/arm-linux-androideabi-
    export CPPFLAGS="$CFLAGS"
    export CFLAGS="$CFLAGS"
    export CXXFLAGS="$CFLAGS"
    export CXX="${CROSS_COMPILE}g++ --sysroot=${PLATFORM}"
    export LDFLAGS="$LDFLAGS"
    export CC="${CROSS_COMPILE}gcc --sysroot=${PLATFORM}"
    export NM="${CROSS_COMPILE}nm"
    export STRIP="${CROSS_COMPILE}strip"
    export RANLIB="${CROSS_COMPILE}ranlib"
    export AR="${CROSS_COMPILE}ar"
    ./configure --prefix=$PREFIX  --host=arm-linux \
    --enable-shared \
    --without-mp4v2
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS=""
build_faac


x264编译 bl.sh

#!/bin/bash
export VERSION=4.6
export NDK=/home/into/android/android-ndk-r9d
export PREBUILT=${NDK}/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86
export PLATFORM=$NDK/platforms/android-9/arch-arm
export FFMPEG_ROOT=../ffmpeg
export X264_ROOT=../x264 #上面的x264的源码目录
export ELIB="$PREFIX/lib"
export FAAC_ROOT=../fdk-aac
function build_one
{
    ./configure \
    --prefix=$PREFIX \
    --enable-static \
    --enable-shared \
    --enable-pic \
    --disable-asm \
    --disable-cli \
    --host=arm-linux \
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
    --sysroot=$PLATFORM
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS=""
build_one


ffmpeg编译 bl.sh

#!/bin/bash
export VERSION=4.8
export NDK=/home/into/android/android-ndk-r9d
export PREBUILT=${NDK}/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86
export PLATFORM=$NDK/platforms/android-19/arch-arm
#export FFMPEG_ROOT=../ffmpeg
export X264_ROOT=../x264 #上面的x264的源码目录
export ELIB="./elib"
export FAAC_ROOT=../fdk-aac
function build_one  
    {
    ./configure \
    --prefix=$PREFIX \
    --enable-cross-compile \
    --enable-runtime-cpudetect \
    --disable-asm \
    --arch=arm \
    --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
    --disable-stripping \
    --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
    --sysroot=$PLATFORM \
    --enable-nonfree \
    --enable-version3 \
    --enable-gpl \
    --disable-doc \
    --enable-avresample \
    --enable-demuxer=rtsp \
    --enable-muxer=rtsp \
    --disable-ffplay \
    --disable-ffserver \
    --enable-ffmpeg \
    --disable-ffprobe \
    --enable-libx264 \
    --enable-encoder=libx264 \
    --enable-decoder=h264 \
    --enable-protocol=rtp \
    --enable-libfaac --enable-nonfree \
    --enable-encoder=aac \
    --enable-decoder=aac \
    --enable-hwaccels \
    --enable-zlib \
    --target-os=linux \
    --enable-shared \
    --extra-cflags="-Os -marm  -I./einclude -fPIC -DANDROID" \
    --extra-ldflags="-L$ELIB -lx264 -lfaac" \
    $ADDITIONAL_CONFIGURE_FLAG
    }
    CPU=arm
    PREFIX=$(pwd)/android/$CPU
 #   ADDI_CFLAGS="-marm -I../x264/android/arm/include -DANDROID "
 #   ADDI_LDFLAGS="-L../x264/android/arm/lib"
 #--enable-libfaac --enable-nofree
    build_one

编译完qt使用ffmpeg如果自己封装第三方动态库的话,需要使用编写android.mk 使用ndk编译第三方库,生成自己的动态库才能在qtcreator中使用。

直接使用qtcreator封装的第三方动态库会调用失败,找不到库。需要根据自己的情况编译生成自己的动态库。

Android.mk

#LOCAL_PATH := $(call my-dir)

#打包第三方库
#include $(CLEAR_VARS)
#LOCAL_MODULE := avcodec
#LOCAL_SRC_FILES := ffmpeg/lib/libavcodec-55.so
#include $(PREBUILT_SHARED_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE := avformat
#LOCAL_SRC_FILES := ffmpeg/lib/libavformat-55.so
#include $(PREBUILT_SHARED_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE := avutil
#LOCAL_SRC_FILES := ffmpeg/lib/libavutil-52.so
#include $(PREBUILT_SHARED_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE := swscale
#LOCAL_SRC_FILES := ffmpeg/lib/libswscale-2.so
#include $(PREBUILT_SHARED_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE := swresample
#LOCAL_SRC_FILES := ffmpeg/lib/libswresample-0.so
#include $(PREBUILT_SHARED_LIBRARY)

#编译共享库
#include $(CLEAR_VARS)
#LOCAL_MODULE    := ffmpeg
#LOCAL_SRC_FILES := com_example_jni_FfmpegJni.c
#LOCAL_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/include
#LOCAL_LDLIBS := -L$(LOCAL_PATH)/ffmpeg/lib -lavcodec-55 -lavformat-55 -lavutil-52 -lswscale-2 -lswresample-0
#include $(BUILD_SHARED_LIBRARY)

LOCAL_PATH := $(call my-dir)

#打包第三方静态库
include $(CLEAR_VARS)
LOCAL_MODULE := avcodec
LOCAL_SRC_FILES := ffmpeg/lib/libavcodec.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE := avformat
LOCAL_SRC_FILES := ffmpeg/lib/libavformat.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE := avutil
LOCAL_SRC_FILES := ffmpeg/lib/libavutil.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avfilter
LOCAL_SRC_FILES := ffmpeg/lib/libavfilter.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := swscale
LOCAL_SRC_FILES := ffmpeg/lib/libswscale.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE := swresample
LOCAL_SRC_FILES := ffmpeg/lib/libswresample.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := x264
LOCAL_SRC_FILES := ffmpeg/lib/libx264.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)

#编译共享库
include $(CLEAR_VARS)
LOCAL_MODULE   := ffmpeg
LOCAL_SRC_FILES := test.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/include
#LOCAL_LDLIBS   := -L$(LOCAL_PATH) -lm -lz -landroid
LOCAL_LDLIBS := -llog -lm -lc -ldl -lz -lstdc++
LOCAL_STATIC_LIBRARIES := avformat avcodec swresample swscale avutil avfilter x264
include $(BUILD_SHARED_LIBRARY)

根据自己情况修改andorid.mk 编号的动态库就可以在qtcreator上使用了。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值