尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【Android视频监控系统技术总结】
Android视频监控系统技术总结一、系统概述这是一款基于 Android 平台的实时视频监控应用采用C/S 架构由两个独立 APK 组成security_camera摄像机端部署在采集设备上负责视频采集、编码、本地存储与网络推流security_monitor监视器端部署在观看设备上负责视频流接收、解码与实时显示系统基于 Android 原生MediaCodec实现硬件编解码通过WebSocket进行实时视频流传输整体延迟低、资源占用少支持 H.264/H.265 两种编码格式自适应。二、整体架构2.1 架构分层系统采用清晰的分层设计从下到上依次为层级摄像机端监视器端职责采集/输出层CameraX ImageAnalysisSurfaceView原始帧采集 / 最终画面渲染编解码层VideoEncoderMediaCodecStreamDecoderMediaCodec视频硬编码 / 硬解码传输层StreamWebSocketServerWebSocket 服务端StreamClientWebSocket 客户端视频帧网络传输业务层StreamManager / MyCameraManagerStreamViewModel生命周期管理、状态协调表现层Jetpack ComposeMainSurface/SettingsSurfaceJetpack ComposeMainScreen用户交互界面2.2 数据流全景摄像机端 CameraX 预览 → ImageAnalysis(YUV_420_888) → 水印叠加WatermarkOverlay → VideoEncoder 硬编码H.264/H.265 ├→ MediaMuxer → MP4 文件本地录像 └→ OnEncodedDataListener → StreamManager → WebSocket Server → 网络 监视器端 网络 → WebSocket ClientOkHttp → StreamClient 协议解析 ├→ 配置消息JSON→ StreamDecoder.configure() └→ 帧数据二进制→ StreamDecoder.feedData() → MediaCodec 解码 → Surface 渲染三、摄像机端核心实现3.1 相机采集CameraX ImageAnalysis相机子系统以MyCameraManager为核心管理器基于 CameraX 库实现预览用例Preview绑定 PreviewView 实现实时取景支持 PERFORMANCE 模式图像分析用例ImageAnalysis以 YUV_420_888 格式输出每一帧供编码和水印处理使用分辨率策略支持 SD640×480、HD1280×720、FHD1920×1080三档通过 ResolutionSelector 配置背压策略采用STRATEGY_KEEP_ONLY_LATEST确保编码线程始终处理最新帧避免帧堆积帧率控制方面低帧率模式下通过时间戳对比主动跳帧确保编码帧率稳定在设定值。3.2 视频编码双输出解耦设计VideoEncoder是编码层的核心其最大特点是编码器核心与输出目标解耦MediaCodec编码器核心 ├→ 输出 1MediaMuxer → MP4 文件本地录像 └→ 输出 2OnEncodedDataListener → 网络流StreamManager关键设计点双路独立启停文件录制和网络流传输可分别启动/停止互不影响。编码器根据输出目标活跃度自动启停——只要有一路输出活跃编码器就保持运行全部停止时编码器自动释放。编码格式自适应初始化时检测设备 HEVC 支持能力优先使用 H.265 编码不支持则回退到 H.264Baseline Profile。动态 Muxer 初始化MediaMuxer 不在编码器创建时初始化而是在开始录制时才创建支持随时启停录像而不中断编码流。输出格式缓存编码器输出格式变化含 SPS/PPS时缓存格式信息后续启动文件输出或新客户端连接时可直接使用。3.3 水印叠加YUV 层面处理WatermarkOverlay在编码前的 YUV 数据上直接叠加时间戳水印工作在 YUV 色彩空间避免 YUV→RGB→YUV 的多次格式转换开销支持动态分辨率适配根据实际帧尺寸更新水印位置叠加操作在 ImageAnalysis 的分析线程中完成与编码流水线串行3.4 网络推流WebSocket 服务端传输层由StreamManager单例和StreamWebSocketServer组成协议设计文本帧JSON传输编码器配置信息包括 mime 类型、分辨率、csd-0/csd-1Base64 编码的 SPS/PPS二进制帧传输实际编码数据帧结构为[1字节帧类型][8字节时间戳(大端)][NAL数据]帧类型定义0x01Config帧、0x02关键帧、0x03P帧关键机制Config 帧缓存服务器缓存编码器的配置帧SPS/PPS新客户端连接时立即推送确保客户端无需等待下一个关键帧即可开始解码。多客户端广播支持多个监视器同时连接观看编码数据通过 WebSocket 广播给所有已连接客户端。前台服务保活VideoStreamService 以前台服务形式运行显示常驻通知防止系统在后台杀死推流进程。3.5 本地录像与存储管理分段录制视频按固定时长分段保存每段结束后自动启动下一段保证长时间连续录制循环覆盖存储空间不足时自动删除最旧的视频文件实现滚动存储文件命名SECURITY_ 时间戳 .mp4按文件名即可判断录制时间3.6 息屏模式系统支持息屏监控模式降低屏幕亮度至最低减少功耗保持 CameraX 和编码器正常运行通过 WakeLock 保持 CPU 唤醒启动前台服务防止进程被杀适用于长时间无人值守监控场景四、监视器端核心实现4.1 流客户端OkHttp WebSocketStreamClient基于 OkHttp 的 WebSocket 实现客户端连接自动心跳配置 pingInterval30秒保持长连接活跃消息分发区分文本消息和二进制消息分别走配置解析和帧数据处理路径连接状态回调通过 onConnectionChanged / onError 回调通知上层连接状态变化4.2 视频解码异步输出轮询StreamDecoder基于 MediaCodec 实现硬件解码采用独立线程轮询输出的模式解码流程收到配置消息 → 创建 MediaFormat设置 csd-0/csd-1→ configure start收到帧数据 → dequeueInputBuffer → 写入数据 → queueInputBuffer独立线程 drainOutputLoop → dequeueOutputBuffer → releaseOutputBuffer(rendertrue) → Surface 渲染关键设计点Surface 延迟就绪处理考虑到 SurfaceView 创建可能晚于配置消息到达解码器缓存所有配置参数mime、宽高、csd-0/1、旋转角度Surface 就绪后自动重新配置解码器。独立解码线程输出缓冲区的读取在独立线程中循环进行不阻塞网络接收线程避免帧延迟累积。旋转角度支持通过 MediaFormat.KEY_ROTATION 设置视频旋转角度适配摄像机端不同的安装方向。4.3 MVVM 架构监视器端采用 Jetpack Compose ViewModel 的 MVVM 架构StreamViewModel管理连接状态、视频参数、帧计数等 UI 状态MainScreenCompose 实现的主界面包含地址输入、连接按钮、视频显示区域状态驱动 UI数据流向清晰五、传输协议详解5.1 握手阶段客户端连接后服务端立即发送两条消息配置 JSON文本帧{type:config,mime:video/avc,width:640,height:480,csd0:J0K0HkCqQ...,// Base64 编码的 SPScsd1:A4A8sA// Base64 编码的 PPS}Codec Config 二进制帧携带完整的 csd-0/csd-1 二进制数据帧类型 0x015.2 数据阶段后续以二进制帧持续发送编码数据偏移长度字段说明01 字节frame_type0x02关键帧0x03P帧18 字节ptspresentationTimeUs大端序高位字节在前9N 字节nal_dataNAL 单元数据六、技术亮点纯硬件编解码全程使用 MediaCodec 硬编硬解CPU 占用低支持高清实时传输编码器双输出解耦一份编码数据同时供给本地录像和网络推流两路独立启停Config 帧缓存机制新客户端秒开无需等待下一个关键帧Surface 就绪适配优雅处理 Surface 晚于配置到达的时序问题低延迟设计ImageAnalysis 直连编码器WebSocket 二进制帧传输解码线程独立轮询后台保活方案前台服务 WakeLock 双重保障息屏模式下持续运行H.265 自适应根据设备能力自动选择最优编码格式七、模块依赖依赖库用途CameraX相机预览与帧采集Android MediaCodec硬件编解码Java-WebSocketorg.java-websocketWebSocket 服务端OkHttpWebSocket 客户端Jetpack ComposeUI 界面AndroidX Lifecycle / ViewModel生命周期与状态管理SharedPreferences配置持久化八、用户界面源码链接
RELATED

相关推荐

用云手机做账号矩阵,平台合规风险到底怎么管?

用云手机做账号矩阵,平台合规风险到底怎么管?

越来越多企业用云手机跑账号矩阵,但随之而来的问题也越来越真实:账号被关联封禁、设备指纹被平台识别、批量操作触发风控、数据合规出现漏洞。这些风险不是云手机本身带来的,而是"用了云手机、但没有用对"的结果。本文从平台合规风…

📅 2026/10/8 17:37:43
YOLOv8 小样本涨点实战|141 张手钳单类别 VOC/YOLO 数据集训练调优,工业五金工件实时检测落地全流程

YOLOv8 小样本涨点实战|141 张手钳单类别 VOC/YOLO 数据集训练调优,工业五金工件实时检测落地全流程

目录 一、行业落地背景与项目需求 二、手钳检测小数据集全方位解析 2.1 数据集完整基础信息 2.2 极小样本场景四大核心识别难点 三、YOLOv8 小样本专属涨点调参完整体系 3.1 YOLOv8 适配极小样本核心优势 3.2 极小单类别场景精细化全套调参 3.2.1 基础硬件与尺度控制参…

📅 2026/9/14 15:02:01
SAP Workflow 通知链路中的定时任务机制,深入理解 RSWNSEL 与 /IWWRK/R_WF_ITEM_SELECTION_GW

SAP Workflow 通知链路中的定时任务机制,深入理解 RSWNSEL 与 /IWWRK/R_WF_ITEM_SELECTION_GW

ECC 系统里一个新的 Workflow Work Item 刚刚产生时,这个任务并不会因为数据库里已经出现了 Work Item,就自动抵达外部消费应用。业务工作流已经生成,与消费端已经收到任务通知,是两件完全不同的事情。两者之间还存在一段通知采集、Workflow SAP Gateway 处理以及通知发送的…

📅 2026/10/8 5:09:17
MORE NEWS

更多资讯

📰

微信小程序全栈项目实战:登录态、手机号授权与生产部署

简介:榆落微时光V1.0.39是一套面向小程序开发者与全栈学习者的论坛类社区平台完整源码,适用于微信等主流小程序生态下的在线社区快速搭建与二次开发。资源包含前端(WXML/WXSS/JS)与后端(PHP为主)双端代码&a…

📰

操作系统四块知识一套账:状态迁移边界与自检框架

简介:面向西北工业大学801考研的操作系统复习资料,以单份PDF形式梳理课程核心知识,适合基础阶段搭建知识框架,也便于冲刺阶段查漏补缺。内容按操作系统概述、进程管理、内存管理、文件管理、设备管理与作业调度六部分展开&#xf…

📰

计算机网络入门:从DNS解析、三次握手到HTTP缓存

简介:《计算机基础.pdf》是代码随想录知识星球「最强八股文」第五版的计算机基础分册,面向准备后端、前端及全栈岗位技术面试的开发者,聚焦计算机网络这一高频考点。内容围绕三次握手与四次挥手、HTTP 与 HTTPS 的区别、HTTP 强缓存与协商缓存…

📰

二维图像压缩感知重构MATLAB实战:OMP、CoSaMP与IRLS算法实现与调优

简介:这份资源面向数字图像处理、计算机视觉与医学成像方向的学习者和研究者,提供二维图像压缩感知重构算法的完整MATLAB实现,帮助读者从代码层面理解CS理论如何用远少于像素数的测量值重建图像。压缩包共26个文件,以18个m脚本为核…

📰

雷达信号分选源码实战:从PDW流到深度学习模型落地

简介:这份资源面向雷达信号处理、深度学习与MATLAB编程的学习者和研究人员,提供一套基于深度学习的雷达信号分选与识别源码,可用于理解如何用神经网络自动提取信号特征并完成目标分类。压缩包共7个文件,以6个m脚本和1个txt参数文件…

📰

TSCAPP.zip:基于Linux RT内核的工业实时调度镜像

简介:本资源是面向C#开发者与工业打印设备集成工程师的TSC打印机驱动开发套件,聚焦标签打印场景,解决条码/二维码打印机在物流、仓储及零售系统中的快速接入与控制难题。压缩包共35个文件,含7个核心C#源码文件(如TSC.c…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬