内窥镜项目

★ 手持pad内窥镜项目
项目描述:3D电子内窥镜软件项目是一个基于BS(浏览器服务器)架构的项目,旨在实现对内窥镜设备的远程控制和高级功能操作。该项目允许操作员使用平板电脑手动触摸屏上的按钮、外部按键或脚踏板 来控制内窥镜设备的多项功能,包括白平衡、暗区改善、视差调整等。项目还包括实时录像、录像分段设置、拍照功能,以及3D视频的上下、左右和交叉模式切换。此外,用户可以将视频文件导出至U盘,以便进一步分析和存档。
职责描述:
1、Java作为中间件,收到前端消息,放入阻塞队列 后,再通过TCP方式传递给后续微服务,实现指令操控功能。
2、控制录像的启动、停止以及根据空间或时间进行录像分段操作。
3、开发队列系统 ,以批量处理视频转换、合成和取消任务。
4、基于WebSocket 技术实现前后端之间的实时状态信息推送。
5、利用Netty 实现微服务之间的双向通信。
6、编写Docker 部署脚本,实现项目的一键化部署,包括启动、停止、打包和查看项目日志等功能,将项目根据版本存档。
7、编写内窥镜培训PPT,软件用户手册 、软件测试报告等。

在这里插入图片描述
在这里插入图片描述

项目背景和概述:

“我要介绍的项目是一个3D电子内窥镜软件项目,采用BS架构,旨在实现对内窥镜设备的远程控制和高级功能操作。”

项目目标和主要功能:

“该项目的主要目标是允许操作员通过平板电脑手动触摸屏、外部按键或脚踏板来控制内窥镜设备的多项功能,如白平衡、暗区改善和视差调整。此外,我们还实现了实时录像、录像分段设置、拍照功能,以及3D视频的多种模式切换。用户还可以将录制的视频文件导出至U盘,以便进一步分析和存档。”

挑战与解决方案:

在我最近的项目中,我面临了一些有趣的挑战,
消息处理和传递操作:
主要集中在消息处理和传递方面。我们的项目使用Java作为中间件来处理来自前端的消息。为了确保并发问题得到妥善处理,我们引入了@ConcurrentControl注解,它可以确保某些接口只允许一个线程同时访问。此外,为了控制向后端PLC设备发送指令的速率过快,我们采用了有界的阻塞队列,以确保消息的顺序性,避免发送过多的指令。
a.当队列为空的时候,获取队列中元素的消费者线程会被阻塞,同时唤醒生产者线程。
b.当队列满了的时候,向队列中添加元素的生产者线程被阻塞,同时唤醒消费者线程。
一旦消息进入队列,我们使用TCP协议(借助Netty框架)来可靠地将消息传递给后续的微服务,以确保消息安全地到达目的地。这个过程中,我学到了如何处理复杂的消息传递流程,同时保持高效性和可扩展性。
具体内容写在如下地址,
https://blog.csdn.net/weixin_43914278/article/details/133795193

录像分段操作:
另一个关键职责是实现录像的启动、停止,以及根据用户设置的参数进行自动录像分段。用户有机会自定义所有文件时长、单个文件时长、所有文件大小、单个文件大小等参数。这些设置为用户提供了极大的灵活性,同时也让系统能够智能地进行录像分段操作,以避免超出容量或时间限制。
在这里插入图片描述

其他重要功能:
空间和时间管理:
1、有个定时器会每隔6秒检测当前视频的空间和时间比如说项目中空间采用du -cm实时获取,并存入.logx文件,时间原先采用Linux指令ffmpeg递归地获取文件夹中所有视频时长,但是针对正在生成的视频文件不能通过ffmpeg方式获取时长,所以会在开始的时候记录时刻a,结束的时候记录时刻b,差值的形式作为视频时长记录到.logx文件中。为什么需要有文件记录空间与时间大小,因为待总空间大小超出时,需要进行从最早的视频依次删除文件,然后记录此时总空间剩余空间或时间大小"find " + recordRootPath + " -type f -printf ‘%T+ %p\n’ | grep mp4 | sort -n | head -n 1做到释放空间。
新建文件夹的特殊需求处理

2、还有一些特殊需求,比如每次发起结束视频的时候需要生成一个空的新文件夹存放下一次的视频,那你就得考虑跨天如何生成文件夹的问题(判断是否有当天的文件夹)。

磁盘空间管理
3、再比如磁盘空间满了怎么办(是不是得加上df -h判断磁盘已用空间)
极端情况下的应对
https://blog.csdn.net/weixin_43914278/article/details/133640791

4、极端情况下如果当天文件超过1000个时,需要执行覆盖逻辑,注意需要根据逆序寻找ls -t。
单个视频大小的考量

5、分段的单个视频大小需要保证大于2倍的实际录制的视频大小,否则用户如果将视频大小设置过小,根据程序逻辑会删除之前的视频。

个人贡献和学习经验

在项目中,我主要负责后端的设计和开发。

结尾和问题

总结,这个项目教会了我如何处理复杂的消息传递流程,同时确保高效性和可扩展性。我学到了如何满足用户需求,同时解决技术挑战,特别是在磁盘空间和时间管理方面。这些经验使我对项目管理和软件工程方面的知识有了更深刻的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/121081.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初阶JavaEE(15)(Cookie 和 Session、理解会话机制 (Session)、实现用户登录网页、上传文件网页、常用的代码片段)

接上次博客:初阶JavaEE(14)表白墙程序-CSDN博客 Cookie 和 Session 你还记得我们之前提到的Cookie吗? Cookie是HTTP请求header中的一个属性,是一种用于在浏览器和服务器之间持久存储数据的机制,允许网站…

【C++】类和对象(一):什么是面向对象,访问限定符有哪些,类定义细节,结构体和类的关系。

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

机组 指令系统

机器指令 机器指令:每一条机器语言的语句 指令系统:全部机器指令的集合 指令的一般格式 指令由操作码和地址码两部分组成 操作码 作用:指明该指令要完成的操作 位数:反映机器的操作种类,即机器允许的指令条数 …

瞅瞅 Opencv:扫描图像

扫描图像查询表 一、概述二、图像矩阵如何存储在内存中?三、高效的方式四、迭代器(安全)方法五、带引用返回的动态地址计算六、核心功能七、性能差异 一、概述 让我们考虑一种简单的色彩还原方法。通过使用unsigned char C和c类型进行矩阵项存储,一个像素通道可以…

音视频技术开发周刊 | 318

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 日程揭晓!速览深圳站大会专题议程详解 LiveVideoStackCon 2023 音视频技术大会深圳站,保持着往届强大的讲师阵容以及高水准的演讲质量。两天的参会…

git commit规范提交

Git每次提交代码时,都要写Commit Message(提交说明),通常情况下,Commit Message应该清晰明了,说明本次提交的目的和具体操作等。然而笔者工作多年来发现,有些公司对Commit Message没有明确的要求…

wpf Grid布局详解 `Auto` 和 `*` 是两种常见的设置方式 行或列占多个单元格,有点像excel里的合并单元格。使其余的列平均分配剩余的空间

比如只有行的界面 <Window x:Class"GenerateTokenApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/exp…

SpringCloudAlibaba——Sentinel

Sentinel也就是我们之前的Hystrix&#xff0c;而且比Hystrix功能更加的强大。Sentinel是分布式系统的流量防卫兵&#xff0c;以流量为切入点&#xff0c;从流量控制、流量路由、熔断降级等多个维度保护服务的稳定性。 Sentinel采用的是懒加载&#xff0c;这个接口被访问一次&a…

企业级低代码开发,科技赋能让企业具备“驾驭软件的能力”

科技作为第一生产力&#xff0c;其强大的影响力在各个领域中都有所体现。数字技术&#xff0c;作为科技领域中的一股重要力量&#xff0c;正在对传统的商业模式进行深度的变革&#xff0c;为各行业注入新的生命力。随着数字技术的不断发展和应用&#xff0c;企业数字化转型的趋…

SpringBoot自动装配 Spring相关 常用设计模式 双亲委派 MongoDB Redis 适配器模式与策略模式

SpringBoot自动装配 阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 Spring相关 阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 常用设计模式 双亲委派 Java虚拟机定义了三个主要的类加载器: 1、启动类加载器 2、扩展类加载器 …

《网络协议》02. 物理层 · 数据链路层 · 网络层

title: 《网络协议》02. 物理层 数据链路层 网络层 date: 2022-08-31 22:26:48 updated: 2023-11-08 06:58:52 categories: 学习记录&#xff1a;网络协议 excerpt: 物理层&#xff08;数据通信模型&#xff0c;信道&#xff09;、数据链路层&#xff08;封装成帧&#xff0c…

CSDN中: Markdown编辑器使用说明

Markdown编辑器使用说明 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一…

Android UI 开发·界面布局开发·案例分析

目录 ​编辑 1. 线性布局&#xff08;LinearLayout&#xff09; 2. 相对布局&#xff08;RelativeLayout&#xff09; 3. 表格布局&#xff08;TableLayout&#xff09; 4. 帧布局&#xff08;FrameLayout&#xff09; 5. 网格布局&#xff08;GridLayout&#xff0…

05【保姆级】-GO语言的标识符

之前我学过C、Java、Python语言时总结的经验&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节。先Know how&#xff0c;然后know why。先做出来&#xff0c;然后再去一点点研究&#xff0c;才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

Android 10.0 系统默认打开OEM解锁开关功能实现

1.前言 在10.0的系统定制中,在9.0系统以后为了设备的安装,系统开始启用oem机制,所以在adb push文件就需要先oem解锁,然后才可以 进行相关操作,所以就需要默认打开oem解锁的开关,来方便oem解锁功能的实现 如图: 2.系统默认打开OEM解锁开关功能实现的核心类 packages\ap…

初步了解 RabbitMQ

目录 ​编辑一、MQ 概述 1、MQ 的简介 2、MQ 的用途 &#xff08;1&#xff09;限流削峰 &#xff08;2&#xff09;异步解耦 (3)数据收集 二、RabbitMQ 概述 1、RabbitMQ 简介 2、四大核心概念 3、RabbitMQ 的核心部分 ​编辑 4、名词解释&#xff1a; 三、Hello …

ESP32 C3 smartconfig一键配网报错

AP配网 在调试我的esp32c3的智能配网过程中&#xff0c;发现ap配网使用云智能App是可以正常配置的。 切记用户如果在menu菜单里使能AP配网&#xff0c;默认SSID名字为adh_PK值_MAC后6位。用户可以修改这个apssid的键值&#xff0c;但是要使用云智能app则这个名字的开头必须为ad…

香港金融科技周VERTU CSO Sophie谈Web3.0的下一个风口 手机虚拟货币移动支付

10月31日&#xff0c;香港金融科技周正式拉开帷幕。这项香港金融科技界地年度盛事今年已经踏入了第八届&#xff0c;本届活动吸引超过数百位金融科技专业人士、创业者和行业领袖现场参与&#xff0c;线上参与观众超过10万人次。 在金融科技周的圆桌会议上&#xff0c;VERTU首席…

Java-继承

1 继承 1.1 为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是现实世界错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;那在设计程序是就需要考虑。 以下…

Vulnhub靶场之Funbox

正如该靶场的描述所说&#xff0c;它对初学者来说非常简单。 项目地址&#xff1a;Funbox: Scriptkiddie ~ VulnHub 所需工具&#xff1a; KaliLinux即可。 0x00 信息收集 打开虚拟机后使用nmap扫描一下网段存活&#xff0c;这里我给的虚拟机的范围是100-253,其中kali的IP是10…