【Hi3566V100】自动删除录像时长较短的文件

一、前言

       本篇博文为大家带来自动删除录像时长较短的文件,在一些情况下如切换录像模式、突然停止录像、突然断电等会出现单个录像文件时长较短的现象,这些录像文件的帧数很少但却占用了较多的存储空间,如果存储空间紧张的话我们可以选择不存储这些文件,接下来就为大家介绍如何不存储这些信息量很少的文件,使用的 SDK 版本是 Hi3562V100_MobileCam_SDK_V2.0.0.2。

 

 二、获取录像文件的时长

2.1 在 MP4 模块获取

       要删除时长较短的文件,首先肯定就是得知道每个文件的时长是多少,在 Hi3566V100 的 SDK 中,有一个 MP4 封装和解封装模块,这个模块提供了一个 HI_MP4_Destroy 接口,这个接口是在 MP4 文件封装完成后调用的,用于销毁已经完成封装的文件实例,该接口说明如下:

 

图 2.1 HI_MP4_Destroy 接口


       可以看到,该接口会输出一个 MP4 文件录制时长 pu64Duration,是一个精确到毫秒的无符号长整型变量,在 reference 层中对该接口的调用在 recordmng_muxer_mp4.c 文件中的 RECMNG_Destroy_Mp4Muxer 函数,SDK 中原本是没有用到这个文件录制时长的,我们只需要改成以下这样即可:

 

图 2.2 获取录制时长


       这样就能在文件生成的第一时间获取其录制时长了。

 

 

三、删除文件

3.1 传递录制时长参数

       在新文件生成后,录像库会调用新文件生成的回调函数,即 hi_recordmng.c 文件中的RECMNG_PreProcRecEvent,这里面的 HI_REC_EVENT_NEW_FILE_END 和 HI_REC_EVENT_NEW_MANUAL_SPLIT_FILE_END 事件就是表示新文件生成结束的事件。

然后在这里会把该事件传递到 dashcam 的状态机里面,所以我们可以在这里把刚才得到的新文件录制时长也顺便传到 dashcam 状态机里,具体修改如下:



图 3.1 传递录制时长参数


3.2 在状态机判断并删除文件

       新文件生成事件在状态机里的位置是 product_statemng_msgproc_base.c 文件里的 PDT_STATEMNG_BaseStateProcFileEndMsg 接口,在这里只需要判断一下传进来的录制时长是否满足要求,然后选择是否删除就可以了,删除文件的接口是 HI_FILEMNG_RemoveFile,我这里是通过时间计算出文件的帧数来进行判断,总帧数少于 10 帧的文件就会被删除:


图 3.2 删除文件

 

 四、结果验证

        删除指定录制时长以下文件的方法已经介绍完了,下面为了方便测试,把删除的范围提高一点,设置为删除 70 秒以下的后摄文件,看是否能成功,修改的代码如下:

 

 

图 4.1 测试代码


        测试的结果如下:

图 4.2 测试结果

可以看出后摄文件的录制时长是60s 左右,少于 70s,在判断时被删除了,在目录中已无法找到被删除的文件。

 

 

参考资料:

【1】《HiMobileCam V2.0 参考设计开发指南.pdf》

【2】《Camera 中间件开发参考.pdf》

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论