android 行车记录仪分析,基于Android架构行车记录仪的异常掉电可播放视频方法与流程...

4fe29272394a51e247e6e3f8c2852890.gif

本发明涉及摄录像视频技术领域,特别涉及一种基于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的录制时间一到就作一次文件写入;

TimeSlice1,保证依次写入VideoChunk和AudioChunk数据,写入完成后,处理第一次WirteMoov,完成封装;

TimeSlice2,文件地址偏移到TimeSlice1写moov的位置,进行覆盖写入Chunk数据,后处理第二次WirteMoov;

依此循环处理,直至文件录制结束,完成最后一次WirteMoov;

本基于Android架构行车记录仪的异常掉电可播放视频方法,包括创建用于录制视频容器的安卓类对象,在安卓类对象内创建文件句柄,后开始录制;安卓的相机服务组件通过平台HAL层去调用驱动代码,驱动去访问硬件固件获取视频流,传递到多媒体编解码组件,压缩后的码流,码流被封装写录制文件的组件读取,进行MP4格式封装,当停止录像或设置结束完成的条件触发后,完成封装,形成MP4录像文件。根据MP4封装原理,只要确保每一个时间片段在写入TF卡后,都有对应的moov封装写入。也就是说在设备不增加硬件成本的前提下,通过软件实现以时间片段为单位封装视频,以解决对记录仪异常掉电导致的视频无法播放的问题。同时也避免扩展新的视频封装格式,改动Android框架带来的工作量地增加。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见地,而描述中的附图是本发明的一些实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。

图1为基于Android架构行车记录仪录像流程示意图。

图2为MP4视频封装的结构示意图。

图3为MPEG4Writer形成FdMediaFile的过程中流程示意图。

图4为写入moov和free封装流程示意图。

下面结合实施例,并参照附图,对本发明目的的实现、功能特点及优点作进一步说明。

具体实施方式

为了使发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1和图2所示:所示,本发明提供一种基于Android架构的异常掉电可播放的行车记录仪实施例。

基于Android架构的异常掉电可播放的行车记录仪,行车视频记录仪,记录过程如下:

创建用于录制视频容器的安卓类对象,在安卓类对象内创建文件句柄,后开始录制;

安卓相机服务组件通过平台HAL层去调用驱动代码,驱动去访问硬件固件获取视频流,传递到多媒体编解码组件,压缩后的码流,码流被封装写录制文件的组件读取,进行MP4格式封装,当停止录像或设置结束完成的条件触发后,完成封装,形成MP4录像文件。

所述写入moov和free封装步骤包括,

录像文件创建后,先写文件头ftyp,定义TimeSlice间隔为2s,即2s的录制时间一到就作一次文件写入;

TimeSlice1,保证依次写入VideoChunk和AudioChunk数据,写入完成后,处理第一次WirteMoov,完成封装;

TimeSlice2,文件地址偏移到TimeSlice1写moov的位置,进行覆盖写入Chunk数据,后处理第二次WirteMoov;

依此循环处理,直至文件录制结束,完成最后一次WirteMoov;

具体地说,打开相机设备,如Camera,设置好录像参数后,创建用于录制视频的容器安卓类对象,例如MediaRecorder,在MediaRecorder创建一个用于写数据流的句柄fd后开始录制。相机操作的服务组件,如CameraService从驱动获取视频流,即通过平台HAL层去调用驱动代码,驱动去访问硬件固件,并由摄像头采集的数据流,CameraService将获取的视频流传递到多媒体编解码组件,如OpenMax组件进行硬编码,压缩后的码流如H264格式,被封装组件,如MPEG4Writer读取,进行MP4格式封装,其中所述格式封装就是写moov等操作,创建一个容器,除了有视频内容数据,还要写入描述文件信息的内容,也即由一个容器将视频内容封装起来。当停止录像或设置结束完成的条件触发后,完成封装,即完成容器文件写入,形成MP4录像文件,即录制文件达到一定条件如设定的时长到了或者设定的大小到了后,对文件最后写好box内容。

所述被封装组件MPEG4Writer作用是安卓提供的写录制文件的组件,具体是将经过硬编码的视频码流按照标准封装成可播放的视频文件。

所述相机操作的服务组件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)TimeSlice1,保证依次写入VideoChunk和AudioChunk数据,写入完成后,处理第一次WirteMoov,完成封装;

3)TimeSlice2,文件地址偏移到TimeSlice1写moov的位置,进行覆盖写入Chunk数据,后处理第二次WirteMoov;

4)依此循环处理,知道文件录制结束,完成最后一次WirteMoov;

通过以上步骤,控制代码逻辑,在框架中实现了以时间片段为单位内容的录像文件,当发生上述异常掉电的情况是,由于文件格式的完整性,可保证视频的正常播放。也就是说在设备不增加硬件成本的前提下,通过软件实现以时间片段为单位封装视频,以解决对记录仪异常掉电导致的视频无法播放的问题。同时也避免扩展新的视频封装格式,改动Android框架带来的工作量地增加。

以上实施例仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换,而这些修改或替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android非凡行车记录仪源码,适用于所有类似行车记录仪的应用,包含后台录像、录音等强大功能。录像方案有基于camera2的实现、基于opengles的实现,非常适合相关项目开发者进行参考和复用,也可直接基于此项目进行二次开发。 此APP已经上架到华为应用商城,链接https://appgallery.huawei.com/#/app/C101080713,大家可以去看看。 如需答疑,请在csdn上给我留言。 应用简介: 这是一个非常好用的行车记录仪APP,当然除了行车记录外,也可用于日常的录像录音。主要功能有 1. 录音录像及拍照 此APP支持后台录音录像,所以不需要再录音录像时请及时停止录像,录音录像都可设置分段时间,可根据自行设置; 2. 文件浏览 录音录像及拍照文件会存储在本机上,可在文件浏览界面中查看。如需要批量删除文件,请到设置里面删除; 3. 轨迹回放 如果设置中的GPS开关处于打开状态,那么在录像时,APP就会定时记下当前位置,并绑定到对应录像文件的对应时间点上,点击地图上的坐标点,可跳转到对应视频的对应时间点开始进行播放; 4. 文件清理 APP每次启动时,都会自动检测过期文件和剩余存储空间大小,如有过期文件或存储空间不足,则自动进行文件删除操作。默认优先删除非重点文件,在剩余存储空间不足时,重点文件也会被删除。如果存储空间不足,那么即使文件没过期,也会被自动删除,请及时将重要文件拷贝到PC等其他地方保存; 5. 视频剪辑 可对手机上的视频进行任意裁剪,裁剪的视频可应用多种滤镜效果。
特色: (1)循环录像 (2)自动影片分段 (3)影片播放功能 依日期时间搜寻影片 播放/暂停/前进/后退/上一段/下一段/选择影片 等完整播放功能 (4)紧急电话 快速拨打接口 紧急联络人列表管理 (5)显示目前时间 (6)显示目前速度 (需要开启GPS) (7)自定义功能 预留可使用的录像空间 可选择影片分段时间 可选择不同的分辨率及录像质量(android 2.2 or higher) 320x240 (QVGA) 480x320 (HVGA) 640x480 (VGA) 800x480 (WVGA) 1280x720 (WXGA) 屏幕休眠时间 速度单位选择 是否使用GPS功能 (8)行车轨迹记录 (需要开启GPS) (9)提供地图显示目前位置 (需要开启GPS及网络) (10)播放行车记录档时也会同步播放轨迹记录(requires GPS and network) (11)透过Email或Youtube分享您的影片 (12)可对重要的影片进行标记,标记后的影片将置于"\MyCarRecorder\Marked records"集中管理,不会被循环覆盖 (13)背景录像功能,可让您同时开启其他程序进行多任务作业。 (14)实时标记功能,让您将目前录像存至标记目录 请注意!! 切换至背景录像功能进行多任务作业时需耗损大量系统资源,请视您的手机效能斟酌使用。 如果您对iPhone或iPad上的行车录像有兴趣,可以在iTune上的搜寻输入MyCar Recorder,找到此软件的iPhone/iPad版本。 注: (1)行车录像档将置于SD卡的/MyCarRecorder/目录下 (2)有些机器只支持部份的影片分辨率及质量。如果您的机器不支持您所选的影片分辨率而导致摄影镜头运作有问题,请重新启动并选择其他分辨率。
Android行车记录仪是一种应用程序,用于记录和保存手机或平板电脑在车辆行驶过程中所获取的各种数据。这些数据包括车辆的位置、行驶速度、行驶里程等信息。 关于Android行车记录仪的开源性质,我们可以从两个方面来考虑。首先,对于开源社区来说,有许多开源项目可以作为Android行车记录仪的基础。开源意味着这些项目的源代码可以被公开访问和修改,任何人都可以自由地使用、学习和改进。这为开发者提供了很大的灵活性和自由度,使得他们可以根据自己的需求来定制和优化Android行车记录仪的功能和性能。 其次,针对Android行车记录仪本身的开源性,目前市面上已有一些开源的行车记录仪应用程序。这些应用程序的源代码可以被公开访问和获取,开发者可以在此基础上进行二次开发。开源行车记录仪能够带来更多的创新和发展机会,开发者可以根据用户的需求进行定制和改进,这让Android行车记录仪具备了更强大的功能和更好的用户体验。 总结来说,Android行车记录仪在开源社区中拥有广阔的发展空间。开源的行车记录仪应用程序为开发者提供了更多的选择和灵活性,同时也为用户带来了更好的功能和体验。通过开源,Android行车记录仪能够迅速响应市场需求,不断提升性能和功能,为用户提供更加精准和可靠的行车记录服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值