基于Android架构行车记录仪的异常掉电可播放视频方法与流程
时间:2023-05-10 13:07:00
本发明涉及视频技术领域,特别是基于视频技术Android架构行车记录仪异常掉电可播放视频。
背景技术:
随着车联网概念的兴起和技术的积累,越来越多的智能设备接入车辆。行车记录仪作为一种非常重要的车载设备形式,越来越被车主所接受。
近年来,随着智能系统的兴起,记录仪系统也从Linux向Android系统切换形成了基于视频功能的智能行车记录仪Android的Camera和Stagefright架构,从摄像头获取的图像数据经过编码器压缩,码流最后通过封装形成可播放的视频格式。由于录像开始后需要实时写入,并且理论上应用并不知道录制结束时间,所以基于Android停止录像后,架构的行车记录仪最终写入封装moov格式。
由于记录仪主要有两种供电方式:一种是电池电源,优点是电压稳定,熄火后可以扔点,但安装麻烦;另一种是点烟器或USB取电的优点是安装简单,但熄火后电压立即断开,记录仪直接关闭。
无论采用何种取电方式,车辆事故引起的异常停电都可能导致停电时录制的视频无法播放,停电时录制的视频是最重要的现场视频,可以确定事故的原因或责任。
概括来说,moov封装了次级box该格式包含该视频的无数据信息,即文件重要属性信息的非视频内容,如媒体数据的全局描述、视频和音频track属性等moov如果包装未完成,则视频格式不完整,播放器无法正常播放。
当记录仪从车辆电池中取电时,由于记录仪可以获得常电,当发生熄火或异常时,记录仪会立即结束视频并完成最终包装,通常不会出现视频无法播放的问题。然而,当记录仪从点烟器中取电时,正常车辆熄火后,最终形成的视频没有时间包装,因此无法播放视频。目前,为了解决这种记录仪断电异常时视频无法播放的问题,我们应该找到一种方法在硬件上留下一点电,如设备设计成大电容器或放置小电池,以确保熄火后预留几秒钟进行最终包装,以确保视频的完整性,但硬件成本高。更重要的是,当车辆暴露在阳光下时,环境温度可达70°使用电池时,电池加速老化会带来一定的安全隐患。
技术实现要素:
本发明解决的主要技术问题是基于Android基于架构行车记录仪的异常断电,可以播放视频方法Android在不增加硬件成本的情况下,架构行车记录仪的异常断电可以播放视频,避免异常断电时无法播放视频。
为了解决上述问题,本发明提供一种基于Android基于架构行车记录仪的异常断电,可以播放视频方法Android可播放架构行车记录仪异常掉电的视频方法,包括:
创建用于录制视频容器的安卓对象,在安卓对象中创建文件句柄,然后开始录制;
通过平台通过安卓相机服务组件HAL层调用驱动代码,驱动访问硬件固件获取视频流,传输到多媒体编码解码组件,压缩后的代码流,代码流读取包装和记录文件的组件MP4格式包装,当停止录像或设置完成条件触发时,完成包装,形成MP4录像文件。
此外,在安卓对象的内部逻辑中创建一个用于编写数据流的句柄fd。
进一步说,获取数据MediaBuffer的线程会将Video/Audio的Track数据以Sample结构写入到ChunkBuffer在缓存中,并通知写文件的线程读取Chunk数据写入文件,两个线程通过循环同步连续读取和写入,以确保数据。moov和free的box内容,两个线程同步。
进一步说,写入moov和free封装步骤包括,
创建录像文件后,先写文件头ftyp,定义TimeSlice间隔为2s,即2s录制时间一到,就写一份文件;
TimeSlice一、保证依次写入VideoChunk和AudioChunk写入数据后,第一次处理WirteMoov,完成封装;
TimeSlice2,文件地址偏移到TimeSlice1写moov覆盖写入的位置Chunk第二次后处理数据WirteMoov;
循环处理,直到文件录制结束,完成最后一次WirteMoov;
本基于Android架构行车记录仪的异常断电可以播放视频,包括创建视频容器的安卓对象,在安卓对象中创建文件句柄,然后开始录制;安卓相机服务组件通过平台HAL层调用驱动代码,驱动访问硬件固件获取视频流,传输到多媒体编码解码组件,压缩后的代码流,代码流读取包装和记录文件的组件MP4格式包装,当停止录像或设置完成条件触发时,完成包装,形成MP视频文件MP4包装原理,只要确保每个时间段都在写入TF卡后,有相应的moov包装写入。也就是说,在设备不增加硬件成本的前提下,通过软件包装视频,解决记录仪异常断电导致视频无法播放的问题。同时,避免扩展新的视频包装格式,改变Android增加了框架带来的工作量。
附图说明
为了更清楚地解释本发明的实施例或现有技术中的技术方案,以下将简要介绍实施例或现有技术描述中需要使用的附图。显然,描述中的附图是本发明的一些实施例。对于本领域的普通技术人员,他们也可以根据这些附图获得其他附图,而付出创造性劳动。
图1为基于Android架构行车记录仪录像流程示意图。
图2为MP视频包装的结构示意图。
图3为MPEG4Writer形成FdMediaFile流程示意图。
图4为写入moov和free包装工艺示意图。
结合实施例,参照附图,进一步说明本发明目的的实现、功能特点和优
具体实施方法
为了使发明的目的、技术方案和优势更加清晰,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清晰、完整的描述。显然,所描述的实施例是本发明的一部分,而不是所有的实施例。基于本发明中的实施例,本领域普通技术人员在没有创造性劳动的情况下获得的所有其他实施例均属于本发明的保护范围。
如图1所示,图2所示,本发明提供了一个基础Android架构的异常掉电可播放的行车记录仪实施例。
基于Android行车记录仪、行车视频记录仪、记录过程如下:
创建用于录制视频容器的安卓对象,在安卓对象中创建文件句柄,然后开始录制;
通过平台通过安卓相机服务组件HAL层调用驱动代码,驱动访问硬件固件获取视频流,传输到多媒体编码解码组件,压缩后的代码流,代码流读取包装和记录文件的组件MP4格式包装,当停止录像或设置完成条件触发时,完成包装,形成MP4录像文件。
所述写入moov和free包装步骤包括,
创建录像文件后,先写文件头ftyp,定义TimeSlice间隔为2s,即2s录制时间一到,就写一份文件;
TimeSlice一、保证依次写入VideoChunk和AudioChunk写入数据后,第一次处理WirteMoov,完成封装;
TimeSlice2.文件地址偏移TimeSlice1写moov覆盖写入的位置Chunk第二次后处理数据WirteMoov;
循环处理,直到文件录制结束,完成最后一次WirteMoov;
具体地说,打开相机设备,如Camera,设置视频参数后,创建用于录制视频的容器安卓对象,如MediaRecorder,在MediaRecorder为写数据流创建句柄fd然后开始录制。相机操作的服务组件,如CameraService通过平台从驱动获取视频流HAL层调用驱动代码,驱动访问硬件固件,并由摄像头采集数据流,CameraService将获得的视频流传输到多媒体编解码组件,如OpenMax组件硬编码,压缩码流如H264格式,包装组件,如MPEG4Writer读取,进行MP4格式包装,格式包装是写的moov等待操作,创建一个容器,除了视频内容数据,还写入描述文件信息的内容,即由一个容器包装视频内容。当停止视频或设置完成条件触发时,完成包装,即完成容器文件的写入和形成MP4.视频文件,即在录制文件达到设定时间或设定尺寸等一定条件后,最终编写文件box内容。
封装组件MPEG4Writer该功能是Android提供的编写和录制文件的组件,具体是按照标准将硬编码的视频代码流封装成可播放的视频文件。
相机操作的服务组件CameraService安卓提供的可访问相机HAL(硬件抽象层)服务,如打开/关闭相机通过其传输到驱动;
所述多媒体编解码组件OpenMax该组件是多媒体接口标准协议,提供访问硬件编解码的接口。摄像头收集的原始数据流将通过多媒体编解码组件到达硬件Codec压缩编码。
获取数据MediaBuffer的线程会将Video/Audio的Track数据以Sample结构写入到ChunkBuffer在缓存中,并通知写文件的线程读取Chunk数据写入文件,两个线程通过循环同步连续读取和写入,以确保数据。moov和free的box内容。
被封装组件MPEG4Writer形成FdMediaFile具体流程原理如下图3所示,
获取数据MediaBuffer的线程会将Video/Audio的Track数据以Sample结构写入到ChunkBuffer在缓存中,并通知写文件的线程读取Chunk将数据写入文件中,通过循环连续读取和写入两个线程。当一段录制完成时,写入moov和free的box内容。
通过对这个过程的分析,如果我们在每个时间段模拟完成之前写的内容,即提前写入moov和free包装。然后可以保证文件的完整性,在突然断电时只损失最后一段。
实现过程如图4所示:
1)创建视频文件后,先写文件头ftyp,定义TimeSlice间隔为2s,即2s录制时间一到,就写一份文件;
2)TimeSlice一、保证依次写入VideoChunk和AudioChunk写入数据后,第一次处理WirteMoov,完成封装;
3)TimeSlice2,文件地址偏移到TimeSlice1写moov的位置,进行覆盖写入Chunk数据,后处理第二次WirteMoov;
4)依此循环处理,知道文件录制结束,完成最后一次WirteMoov;
通过以上步骤,控制代码逻辑,在框架中实现了以时间片段为单位内容的录像文件,当发生上述异常掉电的情况是,由于文件格式的完整性,可保证视频的正常播放。也就是说在设备不增加硬件成本的前提下,通过软件实现以时间片段为单位封装视频,以解决对记录仪异常掉电导致的视频无法播放的问题。同时也避免扩展新的视频封装格式,改动Android框架带来的工作量地增加。
以上实施例仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换,而这些修改或替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。