H264Android 程序编译

H264Android 搜索名字可以知道了,不知道哪位高人编写的程序,还提供了 一些测试的。github上面下载的

下载后发现一个问题,就是编译失败。这可能是很多人会遇到的问题,而且就算直接拿lib下面的so文件,运行后也会有问题的。

于是,在这段日子的研究积累后,决定这次要把它编译成功。
下载工程解压:
直接ndk-build会有问题,因为jni目录下的Android.mk文件需要指定ndk的目录,要一些小的修改。
发现修改完目录还是无法成功, 因为lib找不到的原因,这是因为有一句没有指定目录。#LOCAL_C_INCLUDES +=$(LOCAL_PATH)/libx264/include少了前面的$(LOCAL_PATH)会不知道在哪里。

这是我修改后的文件:我把原来的libx264替换了,因为在编译时出现一个问题,所以又下载了最新版的x264,再编译。
LOCAL_PATH := $(call my-dir)
ARM_ROOT = $ANDROID_NDK
ARM_INC=$(ARM_ROOT)/build/platforms/android-8/arch-arm/usr/include/
ARM_LIB=$(ARM_ROOT)/build/platforms/android-8/arch-arm/usr/lib/


include $(CLEAR_VARS)
#LOCAL_C_INCLUDES +=$(LOCAL_PATH)/libx264/include
#LOCAL_MODULE := H264Android
#LOCAL_SRC_FILES := H264Android.c cabac.c common.c dsputil.c golomb.c h264.c h264utils.c mpegvideo.c

#LOCAL_LDFLAGS += libx264/lib/libx264.a -nostdlib -Bdynamic -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$(ARM_LIB),-dynamic-linker=/system/bin/linker -L$(ARM_LIB) -nostdlib -lc -lm -ldl -lgcc
#LOCAL_LDFLAGS += -L$(LOCAL_PATH)libx264/lib
#LOCAL_STATIC_LIBRARIES := libx264

#LOCAL_LDFLAGS += $(LOCAL_PATH)/libx264/lib/libx264.a
#LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -lgcc
#include $(BUILD_SHARED_LIBRARY)

#------------------------------
LOCAL_C_INCLUDES +=$(LOCAL_PATH)/x264lib/include
LOCAL_MODULE := H264Android
LOCAL_SRC_FILES := H264Android.c cabac.c common.c dsputil.c golomb.c h264.c h264utils.c mpegvideo.c
LOCAL_LDFLAGS += $(LOCAL_PATH)/x264lib/lib/libx264.a
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -lgcc
include $(BUILD_SHARED_LIBRARY)


下载git版本名字为x264进入目录,建一个文件:compile.sh

#!/bin/bash
NDK=$ANDROID_NDK
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86

function configure_one(){
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--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="-I$PLATFORM/usr/include" \
--enable-pic \
--disable-asm \
$ADDITIONAL_CONFIGURE_FLAG
}

function make_one(){
make clean
make -j4 install

$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}

function build_one
{
if test ! -s "../configure" ; then
echo "configure"
#../bootstrap
configure_one
fi

#configure_one

make_one
}

function build_arm_v7_vfp
{
#arm v7vfp
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG="--arch=armv7-a --enable-armv5te --enable-armv6 --enable-armvfp --enable-memalign-hack"
build_one
}


function main
{
build_arm_v7_vfp
}


main

强调一下:ANDROID_NDK是一个环境变量,定义好的,在/root/.bashrc文件中
然后就可以运行了./compile.sh一分钟就成功了,生成了libx264.a文件与x264文件在x264目录下。

然后依样,建立与libx264一样的目录x264lib,把对应的文件放进去,文件都在这里,自己找了,注意,x264.h还需要一个x264_config.h,复制过去就可以了。
然后再回到上层目录开始ndk-build。一会就成功了。生成的so大约是1m,原来的是400k左右,然后把/home/dev/H264Android/libs/libH264Android.rar这个文件移到别处去,就可以打包apk 了。

运行工程,生成的/sdcard/camera.h264是可以播放的,我在手机里用VLC(官方的sdk我下载修改的java部分)程序可以播放的,放到pc上用smplayer也可以播放,但与原来的相比,速度快很多。

具体这货如何使用,还得研究研究。
顺便提供一整个附件工程吧,环境是ubuntu 12.04 update to 2012.7.18。顺便说一下,gedit真不能用,kate算是linux下不错的东西了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值