Ubuntu16.04编译ffmpeg

前端之家收集整理的这篇文章主要介绍了Ubuntu16.04编译ffmpeg前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

0x01. downlaod

https://ffmpeg.org/download.html

0x02. 解压

目录在ffmpeg-3.4.2中.

0x03. 配置编译脚本

文件名称随便取. 注意文件中的NDK相关配置修改为自己本机的.

  1. #! /bin/bash
  2. #NDK=D:/Android/sdk/ndk-bundle
  3. NDK=/home/iamcxl369/android/android-ndk-r13b
  4. SYSROOT=$NDK/platforms/android-23/arch-arm/
  5. TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
  6. cpu=arm
  7. PREFIX=~/Downloads/ffmpeg-3.4.2/ffmpeg-3.4.2/android/arm
  8. ADDI_CFLAGS="-marm"
  9.  
  10. function build_one
  11. {
  12. ./configure \
  13. --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-doc \ --disable-symver \ --enable-small \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --target-os=linux \ --arch=arm \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="-I$SYSROOT/usr/include" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG
  14.  
  15. make clean
  16. make
  17. make install
  18. }
  19.  
  20. build_one

注意:我是帮别人编译,这个文件来自windows所以,执行的时候报错了.
vi filename能看到没一行后面有个^M,把这个符号干掉.

0x04 修改配置文件

  1. emacs configure

替换下面几行配置:

  1. SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
  2. LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
  3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
  4. SLIB_INSTALL_LINKS='$(SLIBNAME)'

0x05 编译

  1. ./ffmpeg-compiling.sh
  1. libavcodec/aaccoder.c:803:25: error: expected identifier or '(' before numeric constant
  2. int B0 = 0,B1 = 0;
  3. ^
  4. libavcodec/aaccoder.c:865:28: error: lvalue required as left operand of assignment
  5. B0 += b1+b2;
  6. ^
  7. libavcodec/aaccoder.c:866:25: error: 'B1' undeclared (first use in this function)
  8. B1 += b3+b4;

解决办法:
找到这个文件把B0名字修改一下(随便改)

  1. libavcodec/hevc_mvs.c: In function 'derive_spatial_merge_candidates':
  2. libavcodec/hevc_mvs.c:208:15: error: 'y0000000' undeclared (first use in this function)
  3. ((y ## v) >> s->ps.sps->log2_min_pu_size))
  4. ^
  5. libavcodec/hevc_mvs.c:204:14: note: in definition of macro 'TAB_MVF'
  6. tab_mvf[(y) * min_pu_width + x]
  7. ^

解决办法:
在自己本机的ndk目录中找到asm/termbits.h或asm-generic/termbits.h把#define B0 #undef了.

0x06 make

  1. make clean
  2. make
  3. make install

然后就在.sh中配置的目录下生成了目标文件.
~/Downloads/ffmpeg-3.4.2/ffmpeg-3.4.2/android/arm

B0宏
ffmpeg开发之旅(5):详解ffmpeg编译与在Android平台上的移植

猜你在找的Ubuntu相关文章