行车记录仪 - 录像 - 文件缓存

本文分析了基于ffmpeg录像时出现的丢帧现象,发现并非由SD卡性能引起,而是ffmpeg的av_write_frame接口耗时异常。通过日志定位到ffmpeg内部缓存机制被破坏,原因是不必要的seek和write操作。修复方案是取消特定条件下的flush操作,优化后av_write_frame耗时显著降低,录像性能得到改善。

背景

  • 基于ffmpeg实现录像功能,性能不理想,前后路摄像头视频码率相加只有28Mbps加上音频也只有4MB/s左右,使用class 10的sd卡 + 2秒 ringbuffer缓存的情况下,依然出现写卡不及时导致的丢帧现象,class 4 sd卡表现更差。

分析

  • 使用dd命令测试class 10 SD卡在该平台上的读写速度,写速度能达到7~8MB/s,因此丢帧问题不是SD卡写性能不足导致的,是录像逻辑的问题。
  • 通过测试定位到ffmpeg接口av_write_frame(写一帧数据)耗时异常,异常部分log如下:
01-01 00:01:13.064   139   310 I write_packet@CviMuxer.cpp:575 [/mnt/sd/CARDV/MOVIE/2022_01_01_000059_00.MOV]: av_write_frame take [19] ms
01-01 00:01:13.067   139   313 I write_packet@CviMuxer.cpp:575 [/mnt/sd/CARDV/MOVIE_b/2022_01_01_000059_00_b.MOV]: av_write_frame take [23] ms
01-01 00:01:13.170   139   313 I write_packet@CviMuxer.cpp:575 [/mnt/sd/CARDV/MOVIE_b/2022_01_01_000059_00_b.MOV]: av_write_frame take [102] ms
01-01 00:01:13.185   139   310 I write_packet@CviMuxer.cpp:575 [/mnt/sd/CARDV/MOVIE/2022_01_01_000059_00.MOV]: av_write_frame take [119] ms
01-01 00:01:13.187   139   313 I write_packet@CviMuxer.cpp:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值