`
phenom
  • 浏览: 408901 次
  • 性别: 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);
    }
期待大神的解答,谢谢哦!

相关推荐

    X264静态库 android平台编译

    **X264静态库在Android平台上的编译详解** X264是一个开源的H.264视频编码库,广泛应用于视频编码、转码和流媒体领域。在Android平台上,为了在不同架构(如ARM32, ARM64, x86)上运行,需要将X264编译为静态库。...

    android H264解码库,三种数据类型输出

    项目提供的`android_h264_decoder-master`包含了源代码和编译指南。开发者可以通过Android Studio或其他构建工具(如Gradle)导入项目,按照指示配置和编译解码库。在初始化解码器时,可以选择所需的输出数据类型,...

    android H264编码动态链接库和源代码

    3. **封装为Android.mk**: 对于动态链接库,你需要编写一个名为`Android.mk`的构建脚本,这个脚本告诉NDK如何将编译好的X264库与你的应用程序链接。通常,你需要指定库的路径、名称以及依赖项。 4. **集成到Android...

    在Native层实现MediaCodec H264 编码.zip

    编译后的可执行程序可以在设备上运行,实时编码视频流,这对于测试和性能优化非常有帮助。 在实际应用中,Native层的MediaCodec H264编码常用于实时视频通信、视频录制等场景,对于提升性能、减少CPU负载有着显著...

    android h264 编码 解码 encode decode模块(演示)

    在Android平台上,H264编码与解码是多媒体处理中的关键环节,广泛应用于视频通话、直播、视频会议等场景。H264是一种高效、压缩比高的视频编码标准,能够在保证画质的同时减少数据传输量,对于移动设备来说尤其重要...

    如何在Android下编译C程序

    include $(BUILD_EXECUTABLE) 表示要将程序编译成一个可执行文件。如果想编译成动态库,则可以使用 BUILD_SHARED_LIBRARY,相关信息可以在$(YOUR_ANDROID)/build/core/config.mk中找到。 4. 完成Android.mk文件编写...

    MediaRecorder获取H264数据

    在Android开发中,`MediaRecorder` 是一个非常重要的类,用于录制音频、视频或同时录制。在本场景中,我们关注的是如何通过 `MediaRecorder` 获取到H264编码的视频...这些文件对于构建和运行Android应用程序至关重要。

    android h264编解码库 源码

    在这个项目中,Android.mk文件配置了编译H264库所需的所有依赖项、编译选项和目标设置,使得开发者可以在Android环境下直接编译生成动态库(.so文件)。通常,Android.mk会指定源码目录、库的依赖、优化级别等关键...

    x264 android 32位和64位 静态库

    x264是一种开源的H.264视频编码库...总之,这个资源为Android开发者提供了便捷的x264集成方案,无论是直接使用预编译库还是自行编译,都能有效支持H.264编码功能,从而在各种Android设备上实现高效、高质量的视频处理。

    android ffmepg+x264 编译好的库

    6. **测试和集成**:编译完成后,将生成的SO库添加到Android项目的jniLibs目录下,并在应用程序中通过JNI(Java Native Interface)调用这些库进行音视频处理。编写必要的Java接口来与C/C++代码交互,进行解码、编码...

    android ffmpeg+libx264+libx265

    在Android上集成libx264,可以直接编译进FFmpeg的动态库(ffmpeg.so),这样可以减少应用程序的体积,提高加载和运行效率。 H.265,又称HEVC(High Efficiency Video Coding),是H.264的下一代标准,其目标是在...

    openh264 android demo

    【标题】"openh264 android demo"是一个基于OpenH264库的Android应用程序示例,它展示了如何在Android设备上实现H264视频编码和解码功能。OpenH264是由思科系统开发并开源的一个高效、高质量的H.264编解码器,适用于...

    H264播放器的小例子

    在压缩包文件名称 "H264Player" 中,我们可以推断出这是播放器程序的主程序文件,可能包含了播放器的全部源代码或编译后的可执行文件。用户可以通过查看和分析这个文件来学习如何在Windows平台上实现H264视频的播放...

    官方Launcher3可以在Android Studio上编译

    【标题】"官方Launcher3在Android Studio上的编译方法" Android Studio是Google为Android开发者提供的集成开发环境(IDE),它提供了全面的工具集,用于构建、调试和发布Android应用程序。本话题聚焦于如何将官方的...

    x264 android 动态库

    在Android平台上,为了实现本地视频处理和编码,通常需要将x264库编译为适用于Android系统的动态链接库(Dynamic Link Library,即.so文件)。动态库的优势在于可以被多个应用程序共享,减少了内存占用,并且方便...

    FFmpeg android 相关资料,包含H264,fdk-acc

    1. **库的编译和链接**:首先,你需要将FFmpeg库编译为适用于Android的不同架构的.so文件,并将它们添加到项目的jniLibs目录下。 2. **权限设置**:由于FFmpeg可能会涉及到读写文件或访问摄像头,所以需要在...

    librtmp 拉取rtmp流保存为flv或者h264

    《使用librtmp库拉取RTMP流并保存为FLV或H264格式》 在数字媒体传输领域,RTMP(Real Time Messaging Protocol)协议广泛用于实时音视频流的传输,尤其在网络直播和在线视频服务中。而librtmp库是一个开源项目,...

    H264编码库很有用的

    在提供的“H.264编码库”压缩包中,可能包含了源代码、头文件、示例程序、文档等资源,开发者可以通过阅读文档理解库的使用方法,参考示例程序进行快速上手,并根据实际需求进行二次开发和移植。在移植过程中,确保...

    H.264视频编解码.zip

    `H264Android.apk`和`H264AndroidDecoder.apk`是编译完成的Android应用程序,用户可以直接在Android设备上安装运行。`resources.ap_`文件是Android资源打包文件,包含了应用的非代码资源。 6. **Java和原生代码...

    android h265 so库 静态库,还有头文件

    在Android平台上,开发涉及到视频编码和解码的应用时,H265(也称为HEVC,高效视频编码)是一个常见的标准,因为它提供了比H264更高的压缩效率,能够在同样的带宽下传输更高质量的视频。这个压缩包提供的资源是针对...

Global site tag (gtag.js) - Google Analytics