orangepi-zero2交叉编译libx264
最近项目用到了视频压缩,所以就使用到lx264的库。
本文使用环境:
电脑:Ubuntu 18.04.5 LTS
开发板:orangepi-zero2
交叉编译器:aarch64-none-linux-gnu-
一、编译
1、下载开源库文件,链接如下:
链接: link.
2、解压文件,并进入到目录文件夹:
如图:
因为本文需要在开发板上使用,因此需要交叉编译。
4、首先,需要配置文件,如下:
./configure --prefix=./build --host=arm-linux --enable-static --disable-asm --cross-prefix=aarch64-none-linux-gnu-
./config:执行文件夹下的config脚本
–prefix:指定文件路径(本文为当前文件夹中的build文件)
–host:指定平台
–enable-static:使能静态库(如果想使用动态库:–enable-shared)
–disable-asm:关闭汇编
–cross-prefix:指定交叉编译器(这个需要根据自己的情况选择)
5、编译文件
make -j16
make install
执行完成后会在当前文件下生成build文件,如图:
include和lib文件就是需要的头文件和动态(静态库)。
二、测试(为了简便本文使用静态库)
测试参考雷神的教程:
https://blog.csdn.net/leixiaohua1020/article/details/42078645
代码下载链接:
http://git.oschina.net/leixiaohua1020/simplest_encoder
1、下载上述代码到ubuntu。同时将上一步骤生成的include和lib文件夹拷贝到当前目录下:
只需要simplest_x264_encoder文件夹即可。注意:还需要将上级目录的视频文件:cuc_ieschool_640x360_yuv420p.yuv
拷贝到simplest_x264_encoder文件。
(lib_a中存放的是libx264.a静态库文件,lib中存放的是动态库文件libx264.so.164,也就是说,编者已经动态和静态分别编译了一次,生成了静态库和动态库,include是一样的所有没变。读者可以按照需求进行选择。)
2、编写makefile文件:
新建Makefile文件:
TARGET= h264-main
EXEC= obj-m
COMMON= -I ./
COMMON+= -I ./include
#shared #共享库,最好不要使用共享库,需要配置库环境。
#LIBARY =-lx264
#LDFLAGS= -L ./lib $(LIBARY)
#static #本文使用静态库文件
LIBARY =-lx264 -lpthread -lm -ldl
LDFLAGS= -L ./lib_a $(LIBARY)
CC :=aarch64-none-linux-gnu-g++
SRC = simplest_x264_encoder.cpp
OBJS = $(SRC:%.c=%.o)
all:$(OBJS)
$(CC) -o $(TARGET) $(SRC) $(COMMON) $(LDFLAGS)
clean :
rm -rf *.o
rm -rf h264-main
文件很简单,主要是加载静态库(使用动态库可以将静态库的代码注释掉)。
3、修改源文件
打开simplest_x264_encoder.cpp文件,做如下修改:
修改路径为当前文件夹。
FILE* fp_src = fopen("./cuc_ieschool_640x360_yuv444p.yuv", "rb");
4、make一下:
生成h264-main文件:
5、使用scp命令将可执行文件和视频文件拷贝到开发板上:
开发板内容如下:
直接执行:
./h264-main
就会生成cuc_ieschool.h264文件。压缩后的文件。
题外话:本文只是用于测试,并未谈到性能、cpu压缩视频本就很慢,意义有限。