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

article/2025/4/8 7:55:09

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框架带来的工作量地增加。

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


http://chatgpt.dhexx.cn/article/qoF59A6j.shtml

相关文章

行车记录仪android,车叮咚:一款搭载 Android 系统的行车记录仪是怎样的?

市面上关于行车记录仪、OBD 盒子以及车机系统的产品有很多品类,但是大多功能单一,可是如果将以上三种功能进行整合并且以后视镜形态出现的话,会有人感兴趣吗? 这款产品叫做车叮咚,创始人张昊告诉雷锋网(公众号&#xf…

嵌入式系统在物联网中的应用及架构

如果说其他技术涉及到的是物联网的某个特定方向,如感知、计算、通信等。嵌入式系统则是物联网中各种物品的表现形式。 首先要谈一下关于架构 在接触嵌入式之后,就出现了一系列的XX架构之类的狼虎之词,什么物联网架构、互联网架构、智能手机的…

【毕设项目】 基于stm32的四轴飞行器设计 - 物联网 嵌入式 单片机

1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目 基于stm32的四轴飞行器设计 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/12540…

【毕业设计】基于 stm32 的病房呼叫系统 - 物联网 嵌入式 单片机

文章目录 1 简介2 绪论2.1 课题背景 3 系统设计3.1 系统架构3.2 主程序设计3.3 语音模块程序设计3.4 显示模块程序设计3.5 键盘模块程序设计3.6 无线传输模块程序设计3.7 部分实现代码 4 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介…

嵌入式物联网软件开发实战系列(STM32+FreeRTOS)

一、使用STM32CubeMx 创建物联网项目软件工程 二、STM32CubeMx 配置时钟 三、STM32CubeMx 配置GPIO 及 GPIO 相关接口在软件工程中的形式及使用 四、STM32CubeMx 配置USART 串口 五、USART 串口在物联网项目中的使用之不定长数据接收(DMA空闲中断方式&#xff0…

【毕业设计】基于单片机的智能饮水控制系统 - 物联网 嵌入式 stm32 c51

文章目录 1 简介2 功能要求3 相关器件4 实现效果5 部分实现代码6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目,不过这个项目是帮助企业研发的 基于单片机的智能饮水控制系统 大家可用于 毕业设…

对嵌入式开发方向的一些思考:在物联网方向

学习知识就是为了应用,我们学习了嵌入式硬件和软件、具备一定的基础之后,是不是很想找一些简单的项目练练手?如果你有这种非常强烈的感觉的话,我相信你已经具备一定的嵌入式开发技术基础了。 接下来,你可能要犯愁了&am…

毕业设计 基于stm32的居民小区火灾检测报警系统 - 物联网 嵌入式

基于stm32的居民小区火灾检测报警系统 由 STM32F103C8T6单片机最小系DHT11LCD1602显示模块蜂鸣器MQ-2ESP8266噪声模块按键3个。 系统内可以通过1602来显示温湿度值和烟雾浓度和噪声值和它们的阈值,可以通过按键设置阈值,当任意一个实际值大于阈值时蜂鸣…

物联网嵌入式系统开发应用软件公司怎么选择

软件开发已经不是新鲜词汇,而成为当下智能科技新潮流,对于不同的企业,嵌入式软件开发会有更针对性的需求,纵观整个软件开发行业,做APP小程序网站开发的多如牛毛,而物联网应用嵌入式技术开发公司并不多&…

聊一聊物联网嵌入式芯片的内容结构

摘要:物联网嵌入式芯片,存储是数据核心之一,这个对于编程和设计的人来说又比较陌生,今天来说说MCU中的内存结构。 本文分享自华为云社区《漫谈嵌入式系统的内存》,作者:o0龙龙0o 。 前言 物联网嵌入式芯片…

5G+边缘计算 物联网嵌入式边缘计算平台

伴随着5G的来临,物联网技术的发展趋势让互连机器设备和信息量猛增,调研机构Gartner公司预测,到2025年,75%的企业生成的数据将在边缘计算设施而不是在传统数据中心创建和处理。 为满足市场对高性能边缘计算平台的应用需求&#xff…

嵌入式物联网软件开发实战

一、使用STM32CubeMx 创建物联网项目软件工程 二、STM32CubeMx 配置时钟 三、STM32CubeMx 配置GPIO 及 GPIO 相关接口在软件工程中的形式及使用 四、STM32CubeMx 配置USART 串口 五、USART 串口在物联网项目中的使用之不定长数据接收(DMA空闲中断方式) 六…

视频教程-物联网嵌入式技术应用-物联网技术

物联网嵌入式技术应用 10年计算机网络行业经验,精通计算机网络;孰悉C、C、Java、C#等语言,熟悉tcp/IP协议结构;精通华为产品,思科产品,熟悉Linux操作平台,讲解条理清晰,对知识有自己独到见解,善于发散学生的…

物联网嵌入式STM32资料大全,超100G

物联网嵌入式 STM32资料大全,超100G 本文是提供物联网,嵌入式, stm32等资料大全的,都是各类资料大全,下面图片只是网盘链接的截图,已经是有生之年系列了,别要求那么高了,自己到…

物联网嵌入式开发人员面临的5大挑战

​  开发嵌入式软件并不像以前那样“简单”。对于许多开发团队来说,创建一个独立的设备仍然经常是具有挑战性的。在物联网时代,我们开始将一切都连接起来,系统的复杂性正在飙升,传统的嵌入式开发人员发现,他们面临着…

嵌入式与物联网的特点分析,它们有什么关系?

虽然嵌入式系统已经有30多年的历史,但是原来一直隐藏在背后的,自从物联网上升为国家战略后,嵌入式系统也从后台走到前台。本文主要介绍的是嵌入式与物联网之间的关系,其次介绍了嵌入式及物联网的特点及特征,具体的跟随…

嵌入式物联网系统软硬件基础知识大全

关注、星标公众号,直达精彩内容 来源:网络素材 本文主要介绍嵌入式系统的基础知识,涉及嵌入式软件和硬件的方方面面,希望对各位有帮助。 嵌入式系统基础 1、嵌入式系统的定义 (1)定义:以应用为中…

嵌入式系统与物联网的关系

嵌入式系统与物联网的关系 一、物联网与嵌入式的基本概念物联网定义定义 1定义 2定义 3定义 4 嵌入式定义IEEE 的定义 嵌入式与物联网的区别和联系 二、从构成模型看物联网与嵌入式三、物联网时代嵌入式系统的华丽转身从计算机的历史说起嵌入式应用环境物联应用本质 从单片机到…

PHP反序列化笔记

目录 文章目录 目录private变量与protected变量序列化后的特点序列化后的字段长度前面可以加 题目解题步骤 CVE-2016-7124漏洞介绍演示代码题目解题步骤 PHP Session 反序列化PHP的3种序列化处理器安全问题当 session.auto_start=Off 时测试Demo 题目解题步骤 phar反…

2022/3/28 PHP反序列化

小迪 参考: https://www.bilibili.com/video/BV1JZ4y1c7ro?p36&spm_id_from333.880.my_history.page.click https://blog.csdn.net/Hardworking666/article/details/122373938 https://blog.csdn.net/Hardworking666/article/details/112725423 补充&#xff…