前言:
大家好,我是txp,今天给大家分享的内容是工作当中经常会遇到的一个功能,那就是mp4录像,正确来说,录像功能,录像可以有很多种容器格式,比如:ts、mp4、mkv等,但是由于mp4格式跨平台兼容性和seek操作,比较好,所有我们就以mp4录像来展开讲讲!
方案选型:
首先我们在做mp4格式录像,如果自己把整个mp4标准去实现的话,难度会有点大,就算可以,我们时间没有那么多,实现起来考虑没有那么全面,对于我们在企业里面开发项目的时候,不太合适,所以我们就需要去了解很多开源的mp4库,哪种比较合适嵌入式平台上进行。
在做录像的时候,同时也要考虑后期做回放的业务要求,比如回放最多的就是seek操作和倍速播放。
别的废话就不多说了,下面汇总常见做mp4的开源mp4项目库:
1、ffmpeg
2、mp4v2
3、bento4
4、gpac
首先来谈谈ffmpeg来做mp4录像的一些准备,首先如果产品的内存不是很大的话,需要对ffmpeg做模块剪切,我们在soc上进行编码和解码,所以只需要封装和解封装功能,不要ffmpeg的编码器和解码器;不过在实际项目中,没测试过利用ffmpeg录制大码率的视频流,但是ffmpeg兼容行肯定是没得说的,很全面!
然后就是mp4v2,他纯cpp实现;这个库做录像的话,个人觉得不是很合适,主要是官网给的库,不支持h265封装,网上倒是有大神自己开发支持了h265,不过我在实际使用过程中,他的兼容性不是特别好,比如说,解封装带h265码流的mp4视频,有些视频会出现解封装不了,所以要考虑好这个风险,不过做seek的时候,到时候有现成的接口,非常方便,以下是mp4v2的仓库:
https://github.com/enzo1982/mp4v2
还有一个致命缺陷就是,如果你使用mp4v2做解封装的时候,如果考虑到非常全面,比如用户自己放一个fmp4格式的mp4视频文件到硬盘和sd卡里面,去解封装也是不行的,同时编译出来的库大小有十几兆,同时看仓库,作者基本没有维护了。
然后就是bento4,这个也是纯cpp实现的,而且里面兼容性非常好,下面是官方的介绍:
https://www.bento4.com/
对于录制h264/h265+aac都是支持的,而且作者还在不断维护,同时这个工具进行转码也是非常的nice,支持命令行操作,临时测试非常的方便;同时支持fmp4分段录制的mp4视频文件,也支持非分段的mp4视频文件。
还有我们之前用上位机mp4info这个工具,在bento4里面也是支持的,有快速的sdk下载和文档使用说明。

下面是官方给的测试执行程序:

mp4info命令解析mp4视频文件:

还有就是在实际使用过程中,需要自己懂c++,总之这个库很强大,开发会比较灵活,需要自己看懂代码才行,门槛稍微高一点,兼容性也好,录制大码率的码流目前使用体验,也没啥问题,关键是体积也不是很大,编译出来几M.
最后一个gpac,实际没真正使用过,不太好做评价!

被折叠的 条评论
为什么被折叠?



