nano pi neo linux4.x 自行编译ffmpeg软编码 c库使用Ubuntu 16.04

来源:互联网 发布:淘宝开店成功后怎么做 编辑:程序博客网 时间:2024/05/22 08:13

 nano pi neo 使用linux4.x 自行编译ffmpeg[软编码 ]

使用Ubuntu 16.04

Linux-3.4.y内核为CPU芯片厂商全志科技官方提供的内核,全志为该内核做了十分多的定制开发,所以该内核完善度高
但是不够纯净,对应的系统固件发热量较大;
Linux-4.x.y内核仍在不断地完善中,并且尽可能地保持和Linus Torvalds主线内核一致,该内核拥有和主线内核一致
的特性,是一个比较纯净的内核,对应的系统固件发热量较小。如果产品不需要使用VPU和GPU功能,可以使用该内核;

nanopi-neo 使用linux 4.14 镜像文件nanopi-neo_FriendlyCore-Xenial_4.14.0_20171218.img.zip
使用ffmpeg 出现这个错误,应该是硬件编码 就不支持 虽然encoders列表里面有cedrus264 . 
[cedrus264 @ 0xf5a560] VE Open error.


所以直接使用软件编码 重新编译ffmpeg动态so库 加入alsa设备支持







源文件
alsa-lib-1.1.5.tar.bz2
ffmpeg-3.4.tar.bz2
last_x264.tar.bz2
lame-3.100.tar.gz
编译好的




一.ubuntu 16.04 编译x264
 


root@sun:/home/sun# arm-cortexa9-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-cortexa9-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/sun/nanopineo/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper
Target: arm-cortexa9-linux-gnueabihf
Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long
Thread model: posix
gcc version 4.9.3 (ctng-1.21.0-229g-FA) 










root@sun:/home/sun/nanopineo/x264-snapshot-20171128-2245# 
root@sun:/home/sun/nanopineo/x264-snapshot-20171128-2245# 
root@sun:/home/sun/nanopineo/x264-snapshot-20171128-2245# ./configure --host=arm-cortexa9-linux-gnueabihf --prefix=./x264-neo --enable-shared  --disable-asm
platform:      ARM
byte order:    little-endian
system:        LINUX
cli:           yes
libx264:       internal
shared:        yes
static:        no
asm:           no
interlaced:    yes
avs:           avxsynth
lavf:          no
ffms:          no
mp4:           no
gpl:           yes
thread:        posix
opencl:        yes
filters:       crop select_every 
lto:           no
debug:         no
gprof:         no
strip:         no
PIC:           yes
bit depth:     8
chroma format: all


You can run 'make' or 'make fprofiled' now.
root@sun:/home/sun/nanopineo/x264-snapshot-20171128-2245# vim config.mak 


SRCPATH=.
prefix=./x264-neo
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
libdir=${exec_prefix}/lib
includedir=${prefix}/include
SYS_ARCH=ARM
SYS=LINUX
CC=arm-cortexa9-linux-gnueabihf-gcc
CFLAGS=-Wno-maybe-uninitialized -Wshadow -O3 -ffast-math  -Wall -I. -I$(SRCPATH) -std=gnu99 -D_GNU_SOURCE -fPIC -fomit-frame-pointer -fno-tree-vectorize
COMPILER=GNU
COMPILER_STYLE=GNU
DEPMM=-MM -g0
DEPMT=-MT
LD=arm-cortexa9-linux-gnueabihf-gcc -o
LDFLAGS= -lm -lpthread -ldl
LIBX264=libx264.a
AR=arm-cortexa9-linux-gnueabihf-ar rc
RANLIB=arm-cortexa9-linux-gnueabihf-ranlib
STRIP=strip
INSTALL=install




root@sun:/home/sun/nanopineo/x264-snapshot-20171128-2245# make 
root@sun:/home/sun/nanopineo/x264-snapshot-20171128-2245# make install

文件都在./x264-neo文件夹下le
 
二.编译liblamemp3 ffmpeg 所需的编码器
 



root@sun:/home/sun/nanopineo/lame-3.100# ./configure --host=arm-cortexa9-linux-gnueabihf --prefix=/home/sun/nanopineo/lame-3.100/lame-neo --enable-shared --disable-static
root@sun:/home/sun/nanopineo/lame-3.100# make 
root@sun:/home/sun/nanopineo/lame-3.100# make install


文件都在./lame-neo文件夹下了
 
三.nano pi neo2 的Ubuntu core 缺少libasound.so文件 所以没有alsa设备
导致ffmpeg的alsa设备不能编译.
所以需要手动编译alsa-lib到工具链和板子上
 




root@sun:/home/sun/nanopineo/alsa-lib-1.1.5#  ./configure --host=arm-cortexa9-linux-gnueabihf --prefix=/home/sun/nanopineo/alsa-lib-1.1.5/alsa-neo --enable-shared --disable-static
root@sun:/home/sun/nanopineo/alsa-lib-1.1.5# make
root@sun:/home/sun/nanopineo/alsa-lib-1.1.5# make install



四.编译ffmpeg


root@sun:/home/sun/nanopineo/ffmpeg-3.4# ./configure --cross-prefix=arm-cortexa9-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-cortexa9-linux-gnueabihf-gcc --arch=arm --prefix=./ffmpeg-neo --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-libx264 --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads  --enable-libmp3lame  --disable-stripping --extra-cflags=-I../x264-snapshot-20171128-2245/x264-neo/include --extra-ldflags=-L../x264-snapshot-20171128-2245/x264-neo/lib/ --extra-cflags=-I../lame-3.100/lame-neo/include --extra-ldflags=-L../lame-3.100/lame-neo/lib --extra-cflags=-I../alsa-lib-1.1.5/alsa-neo/include --extra-ldflags=-L../alsa-lib-1.1.5/alsa-neo/lib 

然后看下配置的结果有没有alsa


root@sun:/home/sun/nanopineo/ffmpeg-3.4# make 
root@sun:/home/sun/nanopineo/ffmpeg-3.4# make install

五.编译好的复制到板子上 运行看看
********************************************************

如果想用c库开发 还有把编译好的复制到交叉工具链里 

-----------------------------------------------------------------

删掉原来的
root@NanoPi-NEO:/usr/bin# rm ff
ffmpeg    ffprobe   ffserver  
root@NanoPi-NEO:/usr/bin# rm ff*




root@NanoPi-NEO:/usr/bin# rm ff
ffmpeg    ffprobe   ffserver  
root@NanoPi-NEO:/usr/bin# rm ff*




root@NanoPi-NEO:/usr/include# rm libav
libavcodec/  libavdevice/ libavfilter/ libavformat/ libavutil/   
root@NanoPi-NEO:/usr/include# rm libav* -rf


root@NanoPi-NEO:/usr/include# rm libpostproc -rf
root@NanoPi-NEO:/usr/include# rm libsw
libswresample/ libswscale/    
root@NanoPi-NEO:/usr/include# rm libsw* -rf






然后把编译好的 放到usr/lib  usr/bin usr/include


root@NanoPi-NEO:/# tar xf alsa-neo-1.1.5.tar 
root@NanoPi-NEO:/# tar xf ffmpeg-neo-3.4.tar 
root@NanoPi-NEO:/# tar xf x264-neo-20171128.tar 
root@NanoPi-NEO:/# tar xf lame-neo-3.100.tar 
root@NanoPi-NEO:/# cp -rf /alsa-neo/lib/* /usr/lib/
root@NanoPi-NEO:/# cp -rf /alsa-neo/include/* /usr/include/
root@NanoPi-NEO:/# cp -rf /x264-neo/lib/* /usr/lib/
root@NanoPi-NEO:/# cp -rf /x264-neo/include/* /usr/include/
root@NanoPi-NEO:/# cp -rf /lame-neo/lib/* /usr/lib/
root@NanoPi-NEO:/# cp -rf /lame-neo/include/* /usr/include/
root@NanoPi-NEO:/# cp -rf /ffmpeg-neo/lib/* /usr/lib/
^[[Aroot@NanoPi-NEO:/# cp -rf /ffmpeg-neo/include/* /usr/include/
root@NanoPi-NEO:/# cp -rf /ffmpeg-neo/bin/* /usr/bin/
root@NanoPi-NEO:/# 




测试下
root@NanoPi-NEO:/# ffmpeg -version
ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.3 (ctng-1.21.0-229g-FA)
configuration: --cross-prefix=arm-cortexa9-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-cortexa9-linux-gnueabihf-gcc --arch=arm --prefix=./ffmpeg-neo --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-libx264 --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --enable-libmp3lame --disable-stripping --extra-cflags=-I../x264-snapshot-20171128-2245/x264-neo/include --extra-ldflags=-L../x264-snapshot-20171128-2245/x264-neo/lib/ --extra-cflags=-I../lame-3.100/lame-neo/include --extra-ldflags=-L../lame-3.100/lame-neo/lib --extra-cflags=-I../alsa-lib-1.1.5/alsa-neo/include --extra-ldflags=-L../alsa-lib-1.1.5/alsa-neo/lib
libavutil      55. 78.100 / 55. 17.103
libavcodec     57.107.100 / 57. 24.102
libavformat    57. 83.100 / 57. 25.100
libavdevice    57. 10.100 / 57.  0.101
libavfilter     6.107.100 /  6. 31.100
libswscale      4.  8.100 /  4.  0.100
libswresample   2.  9.100 /  2.  0.101
libpostproc    54.  7.100 / 54.  7.100