参考
- Hi3559AV100 下gpac交叉编译
- 海思3516A 运行mp4box工具,移植gpac 0.4.0
- 使用gpac封装mp4
- 无法解决R_AARCH64_ADR_PREL_PG_HI21重定向于符号__stack_chk_guard@GLIBC_2.17
背景
传统MP4封装,大部分都只是使用libmp4v2库,H264+libmp4v2网上教程也很多,但8012年和H265一起来了,技术应更好的兼容后续拓展,Mp4v2目前是无人维护的状态也不支持H265,所有我们选择了gpac作为新的MP4封装的轮子,盘它!
编译环境
主机:Ubuntu-16.04
目标机器:海思3559A
编译工具链:aarch64-himix100-linux-
zlib交叉编译
zlib是一个压缩库,gpac依赖zlib,我们首先编译一个libz.a
下载
使用最新版本:zlib-1.2.11
zlib官网下载地址:点我
交叉编译zlib
- 解压进入文件夹zlib-1.2.11
- 指定编译器
export CC=aarch64-himix100-linux-gcc
- 配置生成Makefile
./configure --prefix=$PWD/_install
- 编译生成
make -j$(nproc) make install
生成目录
在本目录_install下会生成如下三个目录:
include lib share
gpac交叉编译
下载
git clone [https://github.com/gpac/gpac.git](https://github.com/gpac/gpac.git)
添加zlib
将zlib-1.2.11/_install/lib目录下libz.a拷贝到gpac/extra_lib/lib/gcc/目录下
交叉编译gpac
- 配置生成Makefile
./configure --prefix=$PWD/_install --cc=aarch64-himix100-linux-gcc --cxx=aarch64-himix100-linux-g++ --extra-cflags=-fPIC -I$PWD/extra_lib/include/zlib --extra-ldflags=-L$PWD/extra_lib/lib/gcc --use-zlib=local --disable-x11 --disable-x11-shm --disable-x11-xv
--cc、--cxx是指定编译器
--extra- --use-zlib 指定zlib库
--disable 这个是界面相关的,我用不到可以先去掉,根据自己情况,去留随意
- 修改config.mak
这一步不一定需要,因为看有些工具没改过来,安全起见修改最好
将config.mak中几个工具全部替换成交叉编译链工具
CC=@aarch64-himix100-linux-gcc
AR=@aarch64-himix100-linux-ar
RANLIB=@aarch64-himix100-linux-ranlib
STRIP=@aarch64-himix100-linux-strip
- 编译生成
make -j$(nproc) make install
生成目录
在本目录_install下会生成如下目录:
bin include lib man share
bin下 MP4Box可以用来测试
目标板测试
环境变量增加库路径搜索
将zlib下的lib和gpac下的lib库放到nfs目录的同一个文件夹
将gpac下的bin目录也拷贝到nfs目录
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/nfs_share/gpac/lib
MP4封装测试
进入gpac/bin目录,使用MP4Box工具测试将H265数据封装成Mp4
~/nfs_share/gpac/bin # ./MP4Box -add ../../video_hayson.h265 test.mp4
HEVC import - frame size 1280 x 720 at 25.000 FPS
HEVC Import results: 103 samples (115 NALUs) - Slices: 4 I 99 P 0 B - 0 SEI - 4 IDR
Saving to test.mp4: 0.500 secs Interleaving
播放
chmod 777 test.mp4
VLC和ffplay均可以播放
创作不易,欢迎点赞!海星出品,转载请注明出处!