四路录像,行车记录仪

news/2025/2/12 1:51:48/

MediaRecorderDemo

4路摄像头录制 MediaRecorder+TextureView+setMaxDuration 后台服务+悬浮窗+定时长循环+存储自动清理 基于高通

1.项目简介

出租车项目,行车记录仪部分,需求:4路摄像头同录,后台运行,可调出预览画面,定时长循环录制,存储满自动清理。

2.功能实现

服务悬浮窗:Service+View+TextureView,可将4宫格预览画面缩放、显示、隐藏;
循环定长录像:TextureView+MediaRecorder和setMaxDuration +setOnInfoListener+开关录像;
存储清理:cleanSDservice

3.踩坑点

(1)TextureView和SurfaceView的区别?

答:TextureView支持缩放位移隐藏等操作,SurfaceView是独立view,不依赖于父控件,本项目中通过隐藏SurfaceView所在的父控件,不会隐藏SurfaceView,
通过隐藏SurfaceView本身,则会触发其surfaceDestroyed回调销毁,与需求不一致。但是发现性能上TextureView占用的内存更高。

(2)高通平台分辨率的设置和其他平台差异

答:发现谷歌Api设置分辨率的方法在高通平台设置后再获取,没有立即生效。最后加上parameters.set(“video-size”, VIDEO_WIDTH[index] + “x” + VIDEO_HIGTH[index]);才生效;

(3)录像开启失败

答:预览和录像的分辨率设置不一致且要摄像头支持,或MediaRecorder配置设置顺序有误,或设备是否支持多路音频录制。

(4)多路录制和单路录制差异

答:所有问题,单路测试无问题,单路录制运行正常的代码集成到多路录制,发现部分接口运行不生效,这个是平台区别于手机做出了部分自定义修改,手机只有前后置摄像头,且只能开启一路。

(5)其他系统底层问题

答:以下均由framerwork和HAL层解决的问题,涉及同时开启录像报错,画面抖动,多路音频同录报错。

(6)录像时长1分钟,4路录制2个小时后,服务停止。

答:MediaRecorder频繁的开关,底层报错(open too many file 句柄超过1024),导致多媒体服务死机停止,问题定位到句柄增加,且可复现,但底层如何优化处理仍未未出方案,留待解决。

(7)摄像头打开黑屏

答:摄像头资源被占用,关闭其他摄像头应用,底层提供主动释放方法。

(8)预览回调失效

答:启动MediaRecorder录像后,系统会停止预览回调previewcallback。

4.不足之处

MediaRecorder开关来处理定时长存储文件,由于资源释放开启都需要时间,且4路录制,导致录制的前后2个视频间隔有5秒左右,存在漏秒问题,并且频繁的快关,调用setOutputFile,句柄未释放,最后累加,导致服务停止。

5.改进之处

录像的同时还要兼顾拍照,人脸识别,直播等功能,其中涉及到功能之前要不同分辨率的问题;
录像漏秒问题,文件切割是否可以放到底层去做
采用硬编码方式录像 mediacodec+GLSurfaceView+MediaMuxer

5.后续补充

测试发现,性能消耗大户为预览回调,将预览回调用后即焚,用时即开。其次系统用的userdebug版本,使用user正式版本耗性能会降下来。

6.相关链接

项目地址https://github.com/wanglinbo555/MediaRecorderDemo.git


http://www.ppmy.cn/news/173727.html

相关文章

图论与算法(1)图论概念

1. 图论与算法 在计算机科学中,图论与算法是两个重要且紧密相关的领域。图论研究图的性质和特征,而算法设计和分析解决问题的方法和步骤。图论提供了一种形式化的方法来描述和分析各种关系和连接,而算法则为解决图相关的问题提供了有效的解决…

小米路由3c padavan固件

breed:https://breed.hackpascal.net/breed-mt7688-reset38.bin 固件:https://github.com/yuos-bit/rt-n56u/releases/tag/v3.4.3-099

laravel56框架报错如下:Class App\Http\Controllers\PublicMatch\PublicTakeController does not exist

我是新手小白,今天开始用laraver56框架开始写一些自己的练习demo,发现一些错误,在这里记录下方便以后查看 laravel56框架报错如下:Class App\Http\Controllers\PublicMatch\PublicTakeController does not exist 检查后发现为命名空间错误: 目录如下: 实际写的命名空间是这样…

\r,\n,\r\n的区别

在Windows中 \r:表示回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖(光标在该行的头部) \r\n:表示换行,换到当前位置的下一行&…

【PTA】输入一个整数n,再输入n个成绩,求大于平均分的成绩个数。 例如,输入5 68 79 56 95 88,输出3。

输入格式:首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试先输入n,表示数据个数,然后输入n个整数。 输出格式:对于每组测试,输出大于平均分的成绩个数。 下面是我的代码…

【电路设计】1N系列二极管型号总结

前言 根据我的实践经历来看,插件二极管中1N系列的二极管使用得非常多,为方便查找,这里总结一下常见的型号。 型号总结 在使用1N系列的二极管时,首先要分清楚是二极管还是稳压管。这个最简单的方式就是看外观,一般来说…

2的N次幂

2的幂表(n1-200)2幂表 2^n (n1~500) 2^01 2^122^242^382^4162^5322^6642^71282^82562^95122^1010242^1120482^1240962^1381922^14163842^15327682^16655362^171310722^182621442^195242882^2010485762^2120971522^2241943042^2383886082^24167772162^25335544322^26671088…

第N个智慧数

一个正整数如果能表示成了两个正整数的平方差,则称这个数为“智慧数”,比如16就等于5的平方减去3的平方,所以16就是一个智慧数,从1开始的自然数列中,将“智慧数”从小到大编号为1,2,3,„„,n。现…