• Android camera采集视频 X264编码


    参考 http://blog.csdn.net/zblue78/article/details/6058147 感谢 ExperiencesOfCode

    硬件平台:CPU Intel G630 @2.7GHz,4GB内存

    软件平台:Ubuntu 12.04, GCC4.6.3 , android-ndk-r8e ,  Android Developer Tools Build: v22.0.1-685705

    1. 编译X264

    下载最新版X264,x264-snapshot-20131209-2245-stable

    编译选项为:

    1. ~$ ./configure --enable-pic --enable-strip --enable-static --cross-prefix=/home/gong/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi- --sysroot=/home/gong/android/android-ndk-r8e/platforms/android-14/arch-arm --host=arm-linux --prefix=./build --extra-cflags="-march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__"

    2. ~$ make STRIP=

    3. ~$ make install

    第二步如果不用STRIP=,就会报一个警告。

    "cannot scan executable section 1 of libx264.a(dct-a.o) for Cortex-A8 erratum because it has no mapping symbols"

    搜索得到的解决方法,详见http://code.google.com/p/android/issues/detail?id=40794。

    STRIP的含义是当最终的可执行程序不需要包含调试信息时,可使用“strip”去掉可执行程序中的调试符号以减小最终的程序大小。configure的时候已经加了strip,这里make也要加。

    2. 编译JNI

    下载参考文档里面的工程。

    将编译得到的build文件夹下三个文件夹替换原来工程/jni/libx264/里对应的文件夹。

    在jni文件夹目录下运行

    1. ~$ ndk-build clean

    2. ~$ ndk-build

    就得到了./lib/armeabi/libH264Android.so

    3.  测试工程

    eclipse clean工程以后。运行该工程。录制几秒钟,崩溃了。

    4. 发现内存泄露

    调试LOG显示,发现内存溢出,崩溃。位置大约在jni层。

    查看./jni/目录下 H264Android.c

    在方法jint Java_h264_com_H264Encoder_CompressBuffer 里,前面两次使用GetByteArrayElements,后面没有对应的release

    jbyte * Buf = (jbyte*)(*env)->GetByteArrayElements(env, in, 0);
    jbyte * h264Buf = (jbyte*)(*env)->GetByteArrayElements(env, out, 0);

    修改方法:

    在该方法return前面加上两句释放,就搞定了。

    (*env)->ReleaseByteArrayElements(env, in, Buf, 0);

    (*env)->ReleaseByteArrayElements(env, out, h264Buf, 0);

    5. 修改完毕

    运行正常,接下来就是调试分辨率和X264编码质量。然后就是稳定性和兼容性测试。

    附上工程 H264AndroidEncoder

  • 相关阅读:
    mysql架构篇之复制模式
    mysql架构篇之一主从从结构
    mysql架构篇之主从结构
    架构师的成长之路初片~Nginx篇~平滑升级
    架构师之成长之路~ceph~报错集
    架构师的成长之路初片~DNS
    python3.x~安装第三方模块
    架构师的成长之路初片~Ceph-object存储~及ceph常用命令
    架构师的成长之路初片~Ceph-block存储
    C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解
  • 原文地址:https://www.cnblogs.com/zzugyl/p/3478841.html
Copyright © 2020-2023  润新知