`
phenom
  • 浏览: 406204 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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下不错的东西了。


分享到:
评论
1 楼 乐拐749316598 2014-01-22  
你好这位大神,我对这块不了解,我下了你的附件,然后运行ok,想请教两个问题:
1、将编码后的文件camera.h264放到电脑去播放,感觉播放速度很快,请问是正常现象么?
2、请问代码里有解码过程么?还有下面这是显示的编码后的还是解码后的:
   public void updateImage(Bitmap bitmap) {
        displayer.setImageBitmap(bitmap);
    }
期待大神的解答,谢谢哦!

相关推荐

    在Native层实现MediaCodec H264 编码.zip

    对应的文章《【Android 视频硬件编码】在Native层实现MediaCodec H264 编码 Demon》 压缩包中含源代码,转换前后的图片,编译后的可执行程序

    按照RFC3984协议实现H264视频流媒体源代码

    在h264.h的#define DEST_IP "192.168.0.30"和#define DEST_PORT 1234这两行修改就行了。同时w.sdp文件里也要改成一致的IP和端口号,不然VLC是接受不到数据的。在c=IN IP4 192.168.0.30 和m=video 1234 RTP/AVP 96这...

    音视频编码解码资料(花钱购买)

    |---------h264的编解码库和头文件,采用ffmpeg和x264编译(h264交叉编译ffmpeg) |--------- H264Player.rar(H264播放器源代码纯C++) |--------- |--------- H264的经典算法优化 |--------- JM H264解码程序 ...

    Android_RTMP博客资料

    【Android RTMP】安卓直播推流总结 ( 直播服务器搭建 | NV21 图像采集 | H.264 视频编码 | PCM 音频采集 | AAC 音频编码 | RTMP 包封装推流 ) https://hanshuliang.blog.csdn.net/article/details/106863889 001_...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    Android 会同一系列核心应用程序包一起发布,该应用程序包包括 email 客户端, SMS 短消息程序,日历, 地图,浏览器,联系人管理程序等。所有的应用程序都是使用 JAVA 语言编写的。 应用程序框架 开发人员也可以...

    新版Android开发教程.rar

    支持视频格式: H.264 、流媒体、 3GPP 、 MPEG4 和 Codec 3GP ;支持音频格式: MP3 、 AAC 、 AAC+ 、 W MA 、 MPEG4 、 WAV 、 MIDI 、 REAL 、 AUDIO 和 OGG ;支持墙纸格式: JPG 、 BMP 、 PNG 和 GIF ;铃声 ...

    Android应用程序的补丁方法.pdf

    能完成这篇文章,打心底里十分高兴,一直在研究Android程序的逆向与解密方法,每次都使用传统的反编译与回编APK,这样需要花费大量时间去测试,而且很多时候反编译出的程序无法回编回去,这着实让我郁闷了好些日子。...

    Android 代码分析

    1 Android build system 4 1.1 Basic 4 1.2 Executable 6 1.3 Shared Library 9 2 Android Initialization Process 11 3 Android JAVA AIDL Analysis 15 4 Android JAVA Binder IPC ...31 编译Native C的helloworld 118

    LibVNCAndroid:[Libvncserver]的Android客户端库(https:github.comLibVNClibvncserver)

    使用它,您可以轻松地将其组合到您的程序中。 仅支持target 22您需要使用它们,例如: theme="@android:style/Theme.Holo.Light"如何使用摇动步骤1.将JitPack存储库添加到您的构建文件中将其添加到存储库末尾的root...

    完结5章C/C++音视频实战-gb28181系列-pjsip-sip栈-h264安防流媒体服务器

    Fmpeg 是一款流行的开源...3. 程序的编译、链接和加载机制:了解源代码如何编译成机器码,链接过程以及加载到内存中的过程。 4. C/C++语言特性背后的思想:深入了解语言的设计哲学,掌握指针、内存管理、虚函数等特

    java反编译泄露源码-MobiLogLeak:一种用于检测由于不良日志记录而导致Android应用程序中敏感数据泄漏的工具

    它结合反编译技术和污点流分析来分析应用程序的内容,寻找可能泄露敏感数据的日志语句。 有关详细信息,请参阅以下论文。 如果您使用该工具,也请引用这篇论文: R. Zhou、M. Hamdaqa、H. Cai 和 A. Hamou-Lhadj,In...

    dryrun:尝试任何Android库的演示项目

    等待几秒钟,该应用程序现在已在您的手机上打开 :grinning_face_with_big_eyes: $ dryrun -h Usage: dryrun GIT_URL [OPTIONS] Options -m, --module MODULE_NAME Custom module to run -b, --branch BRANCH_...

    GB28181设备SDK

    支持H264,H265和PS封装。 支持订阅,通知功能。 支持录音播放,录音下载,支持语音通话和音频广播。 它通过GB28181自动测试工具进行了测试,已经通过海康威视,华为,大华,Uniview等大多数知名制造商的GB28181...

    29.[开源][安卓]ignition-master

    ignition location 一个可以直接编译到应用程序中的Android AspectJ库项目 能够让定位应用在不需要Activity位置更新处理的情况下获取到最新的位置信息 ">29 [开源][安卓]ignition master 在编写Android应用时 通过...

    高焕堂<应用框架原理与程序设计>源代码(Eclipse)

    Windows下编译.so文件步骤(这里我使用NDK(android-ndk-1.6_r1)加Cygwin 在windows下编译,如果没有请安装, 注:android-ndk-1.6_r1只支持android 1.6或更早版本,所以这里必须将你的android工程的Target设为1.6): ...

    轻巧的Android库,可通过RxJava2和Kotlin帮助检测键盘的打开/关闭状态-Android开发

    maven {url“ h Rx键盘检测器简单的Android库,以使用RxJava2检测键盘的打开/关闭状态。下载Project build.gradle allprojects {存储库{... maven {url” https://jitpack.io“}}}应用程序build.gradle依赖项{......

    groupalarm:为提前开会的团体提供的 Android 唤醒闹钟

    使用 Android Studio 将项目编译为应用程序并在手机上运行 依赖关系 Java 6 SE 开发环境 安卓SDK 一个(虚拟)Android 设备 ## Android SDK 目标 最低 SDK:16 目标 SDK:16 测试 可以使用 Android Studio 并右键...

    Windows调用ADB库获取Android手机序列号

    头文件:adb_api.h 库:AdbWinApi.lib 来源:使用VS2010编译adb源码后提取的内容,可自行下载adb源码编译 使用例子:Manager.cpp,通过USB枚举得到的设备路径后,使用adb接口获取手机序列号。

    java反编译class源码-unbox:unbox-解压并反编译$h*!出事了

    $h*! 出事了 拆箱 Unbox是一个方便的一键式解包和反编译工具,它封装了现有的 3rd 方应用程序,如IDA Pro、JD-Cli、Dex2Src等,以提供方便的存档器类似命令行界面来解压和反编译各种类型的文件。 它目前支持编译的二...

    termux-mono:在Termux上构建单声道(Android终端)

    是一个Android终端应用程序和Linux环境。 是.Net Framework在包括Android在内的各种平台上的实现。 是Mono(和.Net)中的默认构建系统。 如果要使用预构建的二进制文件,请转到最后一部分。 从源代码构建Mono ...

Global site tag (gtag.js) - Google Analytics