使用libx264 Android构建最新版本的FFMPEG

时间:2015-06-04 09:59:06

标签: android ffmpeg libx264

我能够成功使用libx264 Android构建FFMPEG,并在2个月之前运行良好。

我使用halfninja进行构建。

今天我从这里获取最新的ffmpeg和libX264来源。

git clone git://git.videolan.org/x264.git

git clone git://git.videolan.org/ffmpeg.git

尝试重建整个项目。但现在它会抛出以下错误。

 ffmpeg.c:2406: error: undefined reference to 'hwaccels'
 ffmpeg.c:3390: error: undefined reference to 'qp_hist'
 ffmpeg.c:3390: error: undefined reference to 'do_hex_dump'
 ffmpeg.c:3390: error: undefined reference to 'do_pkt_dump'
 ffmpeg.c:576: error: undefined reference to 'do_benchmark_all'
 ffmpeg.c:657: error: undefined reference to 'audio_sync_method'
 ffmpeg.c:1222: error: undefined reference to 'vstats_filename'
 ffmpeg.c:972: error: undefined reference to 'frame_drop_threshold'
 ffmpeg.c:1181: error: undefined reference to 'debug_ts'
 ffmpeg.c:2742: error: undefined reference to 'copy_tb'
 ffmpeg.c:2846: error: undefined reference to 'audio_volume'
 ffmpeg.c:2862: error: undefined reference to 'init_simple_filtergraph'
 ffmpeg.c:2863: error: undefined reference to 'configure_filtergraph'
 ffmpeg.c:2923: error: undefined reference to 'video_sync_method'
 ffmpeg.c:2538: error: undefined reference to 'frame_bits_per_raw_sample'
 ffmpeg.c:3258: error: undefined reference to 'sdp_filename'
 ffmpeg.c:2087: error: undefined reference to 'ist_in_filtergraph'
 ffmpeg.c:4069: error: undefined reference to 'ffmpeg_parse_options'
 ffmpeg.c:4074: error: undefined reference to 'show_usage'
 ffmpeg.c:3303: error: undefined reference to 'options'
 ffmpeg.c:3303: error: undefined reference to 'stdin_interaction'
 ffmpeg.c:2553: error: undefined reference to 'exit_on_error'
 ffmpeg.c:2553: error: undefined reference to 'do_pkt_dump'
 ffmpeg.c:2553: error: undefined reference to 'do_hex_dump'
 ffmpeg.c:3727: error: undefined reference to 'copy_ts'
 ffmpeg.c:3727: error: undefined reference to 'dts_delta_threshold'
 ffmpeg.c:268: error: undefined reference to 'dts_error_threshold'
 ffmpeg.c:3976: error: undefined reference to 'print_stats'
 ffmpeg.c:1694: error: undefined reference to 'do_benchmark'
 ffmpeg.c:1694: error: undefined reference to 'max_error_rate'

请帮我解决这个问题。

请看我的剧本。

build_android.sh

#!/bin/bash
#
# build_android.sh
# Copyright (c) 2012 Jacek Marchwicki
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

export NDK=/home/tasol/DEVELOPMENT/IJOOMER_DEVELOPMENT/NDK/android-ndk-r10d

if [ "$NDK" = "" ]; then
    echo NDK variable not set, exiting
    echo "Use: export NDK=/your/path/to/android-ndk"
    exit 1
fi

OS=`uname -s | tr '[A-Z]' '[a-z]'`
function build_x264
{
    PLATFORM=$NDK/platforms/$PLATFORM_VERSION/arch-$ARCH/
    export PATH=${PATH}:$PREBUILT/bin/
    CROSS_COMPILE=$PREBUILT/bin/$EABIARCH-
    CFLAGS=$OPTIMIZE_CFLAGS
#CFLAGS=" -I$ARM_INC -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=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID  -Wa,--noexecstack -MMD -MP "
    export CPPFLAGS="$CFLAGS"
    export CFLAGS="$CFLAGS"
    export CXXFLAGS="$CFLAGS"
    export CXX="${CROSS_COMPILE}g++ --sysroot=$PLATFORM"
    export AS="${CROSS_COMPILE}gcc --sysroot=$PLATFORM"
    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"
    #export LDFLAGS="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog"

    cd x264
    ./configure --disable-asm --prefix=$(pwd)/$PREFIX --host=$ARCH-linux --enable-static $ADDITIONAL_CONFIGURE_FLAG || exit 1

    make clean || exit 1
    make -j4 install || exit 1
    cd ..
}

function build_ffmpeg
{
    PLATFORM=$NDK/platforms/$PLATFORM_VERSION/arch-$ARCH/
    CC=$PREBUILT/bin/$EABIARCH-gcc
    CROSS_PREFIX=$PREBUILT/bin/$EABIARCH-
    PKG_CONFIG=${CROSS_PREFIX}pkg-config
    if [ ! -f $PKG_CONFIG ];
    then
        cat > $PKG_CONFIG << EOF
#!/bin/bash
pkg-config \$*
EOF
        chmod u+x $PKG_CONFIG
    fi
    NM=$PREBUILT/bin/$EABIARCH-nm
    cd ffmpeg
    export PKG_CONFIG_LIBDIR=$(pwd)/$PREFIX/lib/pkgconfig/
    export PKG_CONFIG_PATH=$(pwd)/$PREFIX/lib/pkgconfig/
    ./configure --target-os=linux \
        --prefix=$PREFIX \
        --enable-cross-compile \
        --extra-libs="-lgcc" \
        --arch=$ARCH \
        --cc=$CC \
        --cross-prefix=$CROSS_PREFIX \
        --nm=$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 \
        --disable-stripping \
        --enable-static \
        --enable-runtime-cpudetect \
        --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib  -nostdlib -lc -lm -ldl -llog -L$PREFIX/lib" \
        --extra-cflags="-I$PREFIX/include" \
            --enable-gpl \
        --enable-encoder=libx264 \
        --enable-libx264 \
        --enable-parser=mjpeg \
        --enable-demuxer=image2 \
        --enable-hwaccel=h264_vaapi \
        --enable-hwaccel=h264_vaapi \
        --enable-hwaccel=h264_dxva2 \
        --enable-hwaccel=mpeg4_vaapi \
        --enable-demuxer=mov \
        --enable-demuxer=h264 \
        --enable-demuxer=mpegvideo \
        --enable-demuxer=h263 \
        --enable-demuxer=mpegps \
        --enable-demuxer=mjpeg \
        --enable-demuxer=rtsp \
        --enable-demuxer=rtp \
        --enable-demuxer=hls \
        --enable-demuxer=matroska \
        --enable-muxer=rtsp \
        --enable-muxer=mp4 \
        --enable-muxer=mov \
        --enable-muxer=mjpeg \
        --enable-muxer=matroska \
        --enable-protocol=crypto \
        --enable-protocol=jni \
        --enable-protocol=file \
        --disable-network \
            --enable-filter=buffer \
        --enable-filter=buffersink \
        --enable-filter=scale \
        --enable-protocol=rtp \
        --enable-protocol=tcp \
        --enable-protocol=udp \
        --enable-protocol=applehttp \
        --enable-protocol=hls \
        --enable-protocol=http \
        --enable-decoder=xsub \
        --enable-decoder=jacosub \
        --enable-decoder=dvdsub \
        --enable-decoder=dvbsub \
        --enable-decoder=subviewer \
        --enable-decoder=rawvideo \
        --enable-encoder=rawvideo \
        --enable-decoder=mjpeg \
        --enable-encoder=mjpeg \
        --enable-decoder=h263 \
        --enable-decoder=mpeg4 \
        --enable-encoder=mpeg4 \
        --enable-decoder=h264 \
        --enable-encoder=h264 \
        --enable-decoder=aac \
        --enable-encoder=aac \
        --enable-parser=h264 \
        --enable-encoder=mp2 \
        --enable-decoder=mp2 \
        --enable-encoder=libvo_amrwbenc \
        --enable-decoder=amrwb \
        --enable-muxer=mp2 \
        --enable-bsfs \
        --enable-decoders \
        --enable-encoders \
        --enable-parsers \
        --enable-hwaccels \
        --enable-muxers \
        --enable-avformat \
        --enable-avcodec \
        --disable-demuxer=v4l \
        --disable-demuxer=v4l2 \
        --disable-indev=v4l \
        --disable-indev=v4l2 \
        --disable-ffplay \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-ffserver \
        --enable-nonfree \
        --enable-version3 \
        --enable-memalign-hack \
        --disable-asm \
        $ADDITIONAL_CONFIGURE_FLAG \
        || exit 1
    make clean || exit 1
    make -j4 install || exit 1

    cd ..
}

function build_one {
    cd ffmpeg
    cd ..
}

#arm v5
EABIARCH=arm-linux-androideabi
ARCH=arm
CPU=armv5
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=../ffmpeg-build/armeabi
OUT_LIBRARY=$PREFIX/libffmpeg.so
ADDITIONAL_CONFIGURE_FLAG=
SONAME=libffmpeg.so
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/$OS-x86_64
#PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/$OS-x86
PLATFORM_VERSION=android-5
build_x264
build_ffmpeg
build_one


#arm v7vfpv3
#EABIARCH=arm-linux-androideabi
#ARCH=arm
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
#PREFIX=../ffmpeg-build/armeabi-v7a
#OUT_LIBRARY=$PREFIX/libffmpeg.so
#ADDITIONAL_CONFIGURE_FLAG=
#SONAME=libffmpeg.so
#PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/$OS-x86_64
#PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/$OS-x86
#PLATFORM_VERSION=android-5
#build_x264
#build_ffmpeg
#build_one

#arm v7 + neon (neon also include vfpv3-32)
EABIARCH=arm-linux-androideabi
ARCH=arm
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8 -mthumb -D__thumb__ "
PREFIX=../ffmpeg-build/armeabi-v7a
#PREFIX=../ffmpeg-build/armeabi-v7a-neon
OUT_LIBRARY=../ffmpeg-build/armeabi-v7a/libffmpeg-neon.so
ADDITIONAL_CONFIGURE_FLAG=--enable-neon
SONAME=libffmpeg-neon.so
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/$OS-x86_64
#PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/$OS-x86
PLATFORM_VERSION=android-9
build_x264
build_ffmpeg
build_one

#x86
EABIARCH=i686-linux-android
ARCH=x86
OPTIMIZE_CFLAGS="-m32"
PREFIX=../ffmpeg-build/x86
OUT_LIBRARY=$PREFIX/libffmpeg.so
ADDITIONAL_CONFIGURE_FLAG=--disable-asm
SONAME=libffmpeg.so
PREBUILT=$NDK/toolchains/x86-4.8/prebuilt/$OS-x86_64
#PREBUILT=$NDK/toolchains/x86-4.6/prebuilt/$OS-x86
PLATFORM_VERSION=android-9
build_x264
build_ffmpeg
build_one

#mips
EABIARCH=mipsel-linux-android
ARCH=mips
OPTIMIZE_CFLAGS="-EL -march=mips32 -mips32 -mhard-float"
PREFIX=../ffmpeg-build/mips
OUT_LIBRARY=$PREFIX/libffmpeg.so
ADDITIONAL_CONFIGURE_FLAG=""
SONAME=libffmpeg.so
PREBUILT=$NDK/toolchains/mipsel-linux-android-4.8/prebuilt/$OS-x86_64
#PREBUILT=$NDK/toolchains/mipsel-linux-android-4.6/prebuilt/$OS-x86
PLATFORM_VERSION=android-9
build_x264
build_ffmpeg
build_one

build_all.sh

#!/bin/bash
#
# build_all.sh

export NDK=/home/tasol/DEVELOPMENT/IJOOMER_DEVELOPMENT/NDK/android-ndk-r10d
sudo ./build_android.sh
$NDK/ndk-build

echo "Done Dona Done!!!"

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE  := videokit
# These need to be in the right order
FFMPEG_LIBS := $(addprefix ffmpeg-build/$(TARGET_ARCH_ABI)/lib/, \
 libavdevice.a \
 libavformat.a \
 libavfilter.a \
 libavcodec.a \
 libswscale.a \
 libavutil.a \
 libswresample.a \
 libpostproc.a )
# ffmpeg uses its own deprecated functions liberally, so turn off that annoying noise
LOCAL_CFLAGS += -g -Iffmpeg -Ivideokit -Wno-deprecated-declarations 
LOCAL_LDLIBS += -llog -lz $(FFMPEG_LIBS) ffmpeg-build/$(TARGET_ARCH_ABI)/lib/libx264.a
LOCAL_SRC_FILES := videokit/uk_co_halfninja_videokit_Videokit.c videokit/ffmpeg.c videokit/cmdutils.c
include $(BUILD_SHARED_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE  := ffmpeg
FFMPEG_LIBS := $(addprefix ffmpeg-build/$(TARGET_ARCH_ABI)/lib/, \
 libavdevice.a \
 libavformat.a \
 libavfilter.a \
 libavcodec.a \
 libswscale.a \
 libavutil.a \
 libswresample.a \
 libpostproc.a )
LOCAL_CFLAGS += -g -Iffmpeg -Ivideokit -Wno-deprecated-declarations 
LOCAL_LDLIBS += -llog -lz $(FFMPEG_LIBS) ffmpeg-build/$(TARGET_ARCH_ABI)/lib/libx264.a
LOCAL_SRC_FILES := ffmpeg/ffmpeg.c ffmpeg/cmdutils.c
include $(BUILD_EXECUTABLE)

Application.mk

APP_ABI := armeabi,armeabi-v7a,x86,mips
APP_PLATFORM := android-10
APP_STL := gnustl_static

更新

终于取得了成功

0 个答案:

没有答案