执法记录仪录像模块的设计

本文介绍了执法记录仪录像模块的设计,包括文件完整性、分辨率、码率、帧率等关键参数的设置,以及录像分段、重要文件标记、文件管理和录像时抓拍等功能。采用ffmpeg库确保视频文件的完整性,通过主进程和Muxer进程分离来降低错误风险。文章还探讨了预录和延录功能的实现,并分享了性能与功耗的考量。
摘要由CSDN通过智能技术生成

录像功能是执法仪的核心功能.为满足执勤要求,长时间稳定摄录是关键.根基我个人几年的执法仪开发经验,总结出如下的设计指引,希望能对读者有所启发.如有不完善之处欢迎讨论.

录像模块架构如下:
在这里插入图片描述
整个架构分为两个进程,主进程和Muxer进程.

  • 主进程

    主进程就是数据采集和编码进程,从摄像头和mic采集到视音频数据,再通过MediaCodec编码器,分别编码成视频和音频媒体帧.

    为了保证媒体帧流畅和逻辑简单,将这两个媒体做线程隔离,音频编码和视频编码分别运行在各自线程.

  • Muxer进程

    Muxer进程的工作应保证最简化,这样才能最大程度保证视频文件的完整性.其工作就是写入视频帧到录像文件.

    为了可控,我们没有使用安卓原生的MediaMuxer类来操作,而是选择编译ffmpeg库实现.

    注:我们测试,安卓远程的MediaMuxer在一些设备上,即便整个录像过程一切顺利,也有可能产生无法播放的媒体文件,偶然性大,原因未知,不好排查.我们最终放弃了MediaMuxer,转而使用ffmpeg库来封装.

我们通过下面的系列问题和功能点加以详述.

文件完整性

MP4文件合流(mux)需要遵循:

写入头(Header)->持续写入媒体帧(Frame)->写入尾(Tail)

的完整过程,只有该过程正常执行,文件才能播放.整个过程由唯一录像句柄串联,如果Mux中遇到异常,Mux过程中断,句柄丢失,录像文件会损坏,无法播放.

因此Mux过程非常重要,这就是分进程的目的.通过一个Muxer进程来单独执行mux过程,该进程逻辑简单,不会出bug导

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值