使用GPAC的原因 是 因为项目有录像的需求 ,将摄像头编码出来的在内存中的H264或者H265数据流存为MP4文件
之前海思平台用的是MP4V2 但是 MP4V2在RK1126平台编译的过程中出错了 没搞定
而且MP4V2 默认是不支持H265的 ,虽说网上有支持H265版本的但是 由于没有编译成功就放弃了
之后又尝试用FFMPEG 来解决这个问题,但是没有尝试成功
我们的项目录像只需要视频 不需要音频
网上搜的过程中 看到了GPAC 今天试了下 可以 了 支持H264 H265 录像都没有问题
下载到电脑上之后用vlc播放都没有问题
下面记录下过程
首先 编译zlib
zlib官网下载zlib
tar -zxvf 压缩包
之后 export CC=arm-linux-gnueabihf-gcc
新建一个编译脚本build.sh
./configure --prefix=$PWD/rk1126
make make install 之后 在rk1126目录下生成了对应的include 和lib库
刚忘记说了 之所以编译zlib 是因为 刚刚编译gpac的需要这个 如下图提示
下载gpac
解压之后 新建一个编译脚本内容如下:修改成对应自己的zib目录即可
./configure --prefix=$PWD/rk1126 --cc=arm-linux-gnueabihf-gcc --cxx=arm-linux-gnueabihf-g++ \
--extra-cflags=-fPIC -I/home/QMCY/zlib-1.2.12/rk1126/include \
--extra-ldflags=-L/home/QMCY/zlib-1.2.12/rk1126/lib \
--use-zlib=local
执行脚本之后
编译提示错误
网上搜了下 没有找到相关的错误 看名字感觉和GUI有关系 我们不需要GUI 所以 打算禁用掉这个特性 在configure文件里面搜x11 果然搜到了
编译脚本加上这几个选项
修改之后的脚本如下:
重新make 没有再提示错误
make install 提示错误:
网上搜了下说是 编译的gcc和strip不是一个架构的 搜索下config.mak 注释掉行 重新make install
没有再提示错误
对应的目录也生成了相应的文件 如上图
我使用的是静态库 需要将libz.a和 libgpac_static.a复制到工程目录
将头文件也复制过去
工程目录如下
用到了很多第三方的库
之后 用的是 网上搜到的 这个版本的 接口
可能楼主之前用的是老版本的 gpac
编译的时候有好几个错误 会报下面的两个函数找不到
gf_media_avc_read_sps
gf_media_hevc_read_vps
后来看了下 头文件 新版版的gpac 接口名字换了 改过来就可以
之后 调用相应的接口就可以了 一个循环中 不断写数据
调试的过程中还遇到了 H264可以正常保存 但是 保存 H265报错 如下图
后来对比了下 H264 和H265不一样的地方 改了下也可以了
时间戳 时常 格式都没问题 如下图