Firefly开源社区

打印 上一主题 下一主题

使用NDK编译ffmpeg,x264库

122

积分

1

威望

0

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
122

使用NDK编译ffmpeg,x264库

发表于 2014-10-24 15:23:55      浏览:18770 | 回复:9        打印      只看该作者   [复制链接] 楼主
本帖最后由 error结构体 于 2014-10-24 15:23 编辑

1、在 http://developer.android.com/tools/sdk/ndk/index.html 下载 android-ndk-r10c-linux-x86_64.bin
   然后热行如下命令安装NDK,我是在ubuntu 12.04下安装的,在WIN下要装cygwin,会麻烦很多,不推荐。

  On Linux and Mac OS X (Darwin):
   1. Download the appropriate package from this page.
   2. Open a terminal window.
   3. Go to the directory to which you downloaded the package.
   4. Run chmod a+x on the downloaded package.
   5. Execute the package. For example:





         ndk$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
         ndk$ ./android-ndk-r10c-darwin-x86_64.
      bin


      2、进入X264的官网下载最新版本,http://www.videolan.org/developers/x264.html
         我下载的是x264-snapshot-20141022-2245,更新比较快。
         创建build_x264.sh
              
      1. #!/bin/bash
      2. NDK=/home/cxx/ndk/android-ndk-r10c
      3. SYSROOT=$NDK/platforms/android-9/arch-arm/
      4. TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64

      5. function build_one
      6. {
      7. ./configure \
      8.     --prefix=$PREFIX \
      9.     --enable-shared \
      10.     --disable-asm \
      11.     --enable-pic \
      12.     --enable-strip \
      13.     --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
      14.     --host=arm-linux-androideabi \
      15.     --sysroot=$SYSROOT \
      16.     --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
      17.     --extra-ldflags="$ADDI_LDFLAGS" \
      18.     $ADDITIONAL_CONFIGURE_FLAG
      19. }
      20. CPU=arm
      21. PREFIX=$(pwd)/android/$CPU
      22. ADDI_CFLAGS=""
      23. build_one
      复制代码
      另外修改.configure中的
      1.         echo "SOSUFFIX=so" >> config.mak
      2.         echo "SONAME=libx264.so.$API" >> config.mak
      3.         echo "SOFLAGS=-shared -Wl,-soname,\$(SONAME) $SOFLAGS" >> config.mak
      复制代码
      去掉  echo "SONAME=libx264.so.$API" >> config.mak 其中的红色部分。

      然后执行:

   $ chmod a+x build_x264.sh
   $ ./
build_x264.sh      
   $ make
   $ make install

3、进入ffmpeg官网,http://ffmpeg.org/ 下载最新版的ffmpgeg压缩包。
   我下的是 ffmpeg-2.4.2
   (1)修改 configure 文件
   
将该文件中的如下四行:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
替换为:
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'


   (2)在源码目录下创建,build_ffmpeg.sh
  1.            #!/bin/bash  
  2. NDK=/home/cxx/ndk/android-ndk-r10c
  3. SYSROOT=$NDK/platforms/android-19/arch-arm/
  4. TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64

  5. function build_one  
  6. {
  7. ./configure \
  8.     --prefix=$PREFIX \
  9.     --enable-shared \
  10.     --disable-static \
  11.     --disable-doc \
  12.     --disable-ffserver \
  13.     --enable-gpl\
  14.     --enable-libx264 \
  15.     --enable-encoder=libx264 \
  16.     --enable-decoder=h264 \
  17.     --enable-cross-compile \
  18.     --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
  19.     --target-os=linux \
  20.     --arch=arm \
  21.     --sysroot=$SYSROOT \
  22.     --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
  23.     --extra-ldflags="$ADDI_LDFLAGS" \
  24.     $ADDITIONAL_CONFIGURE_FLAG
  25. }
  26. CPU=arm
  27. PREFIX=$(pwd)/android/$CPU
  28. ADDI_CFLAGS="-marm -I../x264/android/arm/include -DANDROID "
  29. ADDI_LDFLAGS="-L../x264/android/arm/lib"
  30. build_one
复制代码
(3)编译运行
    $ ./build_ffmpeg.sh
    $ make
    $ make install


回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-6 10:11:52        只看该作者  沙发
好像4.1 以后都不需要 ffmpeg 了吧, 除非是硬件不支持的格式,新版本的都支持 MediaCodec 硬件解码码流
回复

使用道具 举报

122

积分

1

威望

0

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
122
发表于 2014-11-6 13:06:11        只看该作者  板凳
是不需要了,但硬编再传数据到PC的代码我还没有调通过。
回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-7 09:32:34        只看该作者  地板
硬编没试过, 以前看过一个网页, 说硬编出来的直接播放也不行, 每一帧没加h264头部 四字节. 自己加上就可以了
回复

使用道具 举报

9

积分

0

威望

0

贡献

技术小白

积分
9
发表于 2014-11-12 22:14:00        只看该作者  5#
error结构体 发表于 2014-11-6 13:06
是不需要了,但硬编再传数据到PC的代码我还没有调通过。

版主,你是要用x264做摄像头信号的编码吗?如果是,那是取mipi的还是usb的?
回复

使用道具 举报

122

积分

1

威望

0

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
122
发表于 2014-11-13 10:18:38        只看该作者  6#
数据是JAVA采的,我测试时是用USB摄像头,开发板上没有自带的摄像头。
回复

使用道具 举报

11

积分

0

威望

0

贡献

游客

积分
11
发表于 2014-11-19 13:20:50        只看该作者  7#
大神~~~
回复

使用道具 举报

6

积分

0

威望

0

贡献

游客

积分
6
发表于 2015-4-23 18:52:38        只看该作者  8#
大神,请问在mac os x上面编译x264时要怎么修改so文件名?

“去掉  echo "SONAME=libx264.so.$API" >> config.mak其中的红色部分。”这个在ubuntu上生效,在mac os x上面会编译报错
回复

使用道具 举报

122

积分

1

威望

0

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
122
发表于 2015-4-24 11:45:55        只看该作者  9#
在mac os x上我编过应用程序,但没有编过SO库。不知道有什么问题。
回复

使用道具 举报

12

积分

0

威望

0

贡献

技术小白

积分
12
发表于 2015-8-13 14:19:21        只看该作者  10#
error结构体 发表于 2014-11-6 13:06
是不需要了,但硬编再传数据到PC的代码我还没有调通过。

兄弟,请问你PAD和PC通信的代码能share下吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表