技术背景 我们在做Android平台GB28181设备接入侧模块的时候,特别是执法记录仪或类似场景,系统除了对常规的录像有要求,还需要能和GB28181平台侧交互,比如实现设备侧视音频文件检索、下载或回放 本文假定记录仪或相关设备已经完成录像,主要来探讨下设备视音频文件检索相关。 规范解读 先回顾下GB/T28181-2016视音频文件检索基本要求: 文件检索主要用区域、设备、录像时间段、录像地点、录像内容为条件进行查询,用 Message 消息发送检索请求和返回查询结果,传送结果的 文件检索请求和应答命令采用 MANSCDP 协议格式定义。 addQueryRecordInfoListener(GBSIPAgentQueryRecordInfoListener queryRecordInfoListener); /* 历史视音频文件检索应答
技术背景 上篇blog,我们提到了Android平台GB28181历史视音频文件检索规范探讨及技术实现,文件检索后,GB28181平台侧,可以针对文件列表进行回放或下载操作,本文主要探讨视音频文件下载相关 技术实现本文以大牛直播SDK开发的Android平台GB28181设备接入侧视音频历史文件检索和下载为例(本文侧重于下载),介绍下相关设计思路:图片 Android设备接入端收到国标平台侧发过来的INVITE 是:1200000001(SSRC第1位为历史或实时媒体流的标识位,其中0为实时视音频,1为历史视音频)。 设备接入侧发送完音视频帧后,发送通知事件类型"121", 表示历史媒体文件发送结束,发送会话内Message消息如下:<? 历史视音频文件下载,看似逻辑复杂,实际上也不简单,文件下载是在完成录像和历史视音频文件检索的基础上,分别从信令、RTP数据打包发送等角度实现,考虑到录像文件的完整性,历史视音频文件下载的设计目标是减少丢帧丢包
技术背景在实现GB28181历史视音频文件回放之前,我们已完成了历史视音频文件检索和下载,历史视音频回放,在GB28181平台非常重要,比如执法记录仪等前端设备,默认录像数据存储在前端设备侧,如果需要上传到平台统一保存 ,除了到工作站拷贝外,还可以通过GB28181的历史视音频文件下载到指挥中心。 如果指挥中心需要直接看历史视音频文件,也可以通过GB28181历史视音频回放实现。 GB28181历史视音频文件回放基本要求:需采用 SIP 协议中的 Invite 方法实现会话连接;采用SIP扩展协议Info方法的消息体携带视音频回放控制命令;采用 RTP/RTCP 协议实现媒体传输 支持设备目录查询应答;支持心跳机制,支持心跳间隔、心跳检测次数设置;支持移动设备位置(MobilePosition)订阅和通知; 适用国家标准:GB/T 28181—2016;支持语音广播;支持语音对讲;支持历史视音频文件检索
根据文件内容搜索文件 突然是有这个需求,研究了下自用的 Everything 的高级搜索,不过貌似没有这个功能.. 所以需要一个能根据文件内容搜索对应文件的工具(Windows 其实自带了,不过效率实在..) 软件界面及相关信息 支持 Office 文件类型(可新增指定类型)包括对指定盘符进行检索 效率 官网有给出效率截图,这里直接引用 案例 比如我们需要从 全盘 中搜索包含内容 Abstract 的 .docx
如果用过MySQL命令行操作的朋友,应该知道他原生就支持上下键切换历史指令的功能,敲入一个指令,按键盘的"上"就会自动带出刚才执行过的指令,方便快捷, 但是Oracle的sqlplus原生就不支持这个功能 ,如果敲入"上下左右",分别对应着"^[[A"、"^[[B"、"^[[D"、"^[[C", 但是,能使用第三方的软件支持历史指令的检索,yum安装, yum install readline yum install readline-devel yum install rlwrap sqlplus增加rlwrap进行登录,此时就可以利用上下键进行历史指令的检索了,非常顺畅, 如果觉得"rlwrap .bash_profile ... alias sqlplus='rlwrap sqlplus' 当然,为了操作便捷还可以配置.bash_profile,增加alias,如下所示,连同账号一起配置到文件中
grep支持正则 查找文件里符合条件的字符串 打印文件内容,存在指定内容的XX开头文件 只打印目标字符串所在行 不输入目标,则等待文本 管道 | 自己输出作为别人输入 只处理前一个指令正确输出 特殊情况 只处理前一个指令正确输出 右侧必须支持输入 常用支持管道输入 find与grep和 | 相当于把左输出,给了右边文本的输入范围 检索solo框架,排除日志异常 不完整信息会有 查找true
find 目录 -name "文件名(包括后缀名)" ? -name是find命令的参数,它表示按照文件名查找文件。大多数情形下,我们可能无法知道文件的全名,此时,我们使用通配符去查找文件。 通配符 ?:代表一个通配字符 *:代表多个通配字符。 ? ? 另外,我们还可以根据文件的大小来查找文件,这个一般用的比较少。 ? -1k:表示小于1kb的文件,大于用+表示。 find 目录 -size 文件大小 find 目录 -size 文件大小1 -size 文件大小2 其中第二行的命令可以找出某个范围内的文件。 ? 我们常用的另外一种查找是根据文件类型来查找文件。 find 目录 -type 文件类型 ? 需要注意的是,普通文件是使用f来表示的,不是用-来表示。 ? 查找当前目录下的普通文件。
一、前言 很多情况下我们都需要进行文件搜索。比如找一个很早之前的文件,或者想删除重复的文件等。前者只需要更具名称来查找文件,而后者的话还需要查找文件的内容。今天我们就来实现文件搜索的操作。 二、fnmatch模块 1、遍历 在搜索文件之前,我们有一个关键操作,就是遍历文件夹,这部分代码如下: import os basedir = r"D:\\" for root, dirs, files 有了这个我们就可以开始搜索文件了。 其中*就表示任意多个字符,也就是匹配.jpg结尾的文件。除了*还有一些其它通配符,具体如下: 通配符 作用 * 匹配所有字符 ? 匹配单个字符 [seq] 匹配指定范围内的字符 [! 三、文件搜索 我们结合遍历和匹配的操作写出文件搜索的功能,代码如下: import os from fnmatch import fnmatch basedir = r"D:\\" for root,
为了判断这一说法的有效性,仔细检查写前日志(WAL)历史文件是必不可少的,揭开它们所传达的信息。 在本次讨论中,我们将探索一个恢复的数据库,并追踪历史文件中嵌入的叙述。 另一个需要考虑的关键方面是检查pg_wal目录的内容,以识别存在的历史文件。如果当前数据库在创建时间线11时不是主数据库,则可能只存在最新的历史文件。 为此,让我们看一下时间线11的历史文件内容。 缺失的时间线 那么时间线 4 - 9 呢?别担心,我没有忘记这个问题。为了获取这些时间线的历史文件,我们需要去 pgBackRest 存储库。 我们将从时间线 9 的历史文件开始我们的调查。
居然都第 4 篇了(第三篇是 FPGA 串并这个,为了观看体验换了位置),先回忆一下我们的工作有哪些?
此工具类应该是复制网络上的某博主的代码,只能说简单好用,提供了常用的请求方法。但是,目前推荐使用开源的Hutool工具库,它包含许多常用的操作,提高开发效率,内网开发除外。
因为远程仓库中,大文件的提交记录依然存在,这样删除只是将产生了一个新的提交记录,将当前commit中大文件去掉而已,随时可以回滚回来,pull的时候依然会将大文件的历史记录拉取下来。 id,依然可以从仓库中恢复该提交历史。 2)原来Git仓库历史有个缓存期,如果不主动回收、清理仓库历史,一般的这些记录还会保存一段时间,以备你突然后悔了,没办法找回删掉的文件。那么怎么样才能主动回收资源能? 4)修改Gerrit推送权限 i. 首先进入Gerrit首页,然后依次选择Projects-->List-->选择项目-->Access,进入到项目的权限管理页面。 4)最后,我们再来clone一下远程仓库 ? clone成功 终于可以轻松的拉取仓库,并且只有41.42M,至此,终于将错误推送到远程仓库的超大文件删除,可以轻松愉快的拉取仓库了。
本地存储与动态水印:在无网络或指挥中心未实时查看时,记录仪可将音视频数据本地存储为MP4文件,并叠加时间、位置等动态水印,确保数据的完整性和可追溯性。2. 4. 数据管理与历史回溯 录像回放与下载:本地存储的巡检视频可通过GB28181平台远程下载和回放,便于后续分析、审查及故障溯源。 文件检索与分类:支持按时间、地点、事件等标签检索历史数据,提升管理效率。5. 心跳检测次数设置;支持移动设备位置(MobilePosition)订阅和通知; 适用国家标准:GB/T 28181—2016、GB/T28181—2022;支持语音广播;支持语音对讲;支持图像抓拍;支持历史视音频文件检索 ;支持历史视音频文件下载;支持历史视音频文件回放;支持云台控制和预置位查询; [实时水印]支持动态文字水印、png水印; [镜像]Android平台支持前置摄像头实时镜像功能; [实时静音]支持实时静音
历史数据回放与下载:SmartGBD提供对历史视音频文件的检索、回放、下载等功能。设备端可通过平台获取历史录像数据,并进行点播回放,支持正常播放、快速播放、暂停、拖动播放等操作。 历史媒体流回放与下载:支持多种回放控制命令,如暂停、快进、快退等,符合GB28181-2016标准中对于历史视音频文件的操作规范。 3.4 历史视音频数据管理与回放对于很多视频监控应用来说,历史数据的管理和回放同样重要,尤其是在需要事后分析的场景中,SmartGBD提供了完整的历史数据检索、回放和下载功能。 历史视音频文件检索:SmartGBD能够根据设备ID和时间区间等条件,快速检索历史录制的视频和音频文件。这使得用户能够方便地查找并回顾特定时间段内的监控数据。 视频回放与下载:支持历史视频的远程回放,提供暂停、快进、拖动播放等功能。此外,用户还可以下载特定时间段的视频文件进行存档或后续分析,符合GB28181协议中对历史视音频文件的管理要求。
实时音视频传输:通过4G/5G等无线网络实现实时音视频数据的传输,确保数据的时效性和准确性。3. 4. 丰富的数据管理功能本地录像与存储:支持本地录像功能,将音视频数据以MP4等格式存储于设备内部,便于长期保存和备份。 历史数据检索与回放:支持历史视音频文件的检索、下载和回放功能,为后续的数据分析和审查提供支持。5. 高稳定性和实时性稳定连接:支持TCP/UDP等多种网络传输协议,确保音视频数据传输的稳定性和实时性。 将.jar文件和.so文件(如smartavengine.jar, smartgbsipagent.jar, libSmartPublisher.so, libSmartPlayer.so)添加到项目中 这些信息通常需要在你的Android代码中硬编码或从配置文件读取。SIP代理设置: 使用GB28181的SIP代理类(如GBSIPAgent)来管理SIP连接和信令。
以上就是关于 LangChain4j 进阶版 RAG 的简单介绍,感兴趣的同学可以参考官方文档[2]进行学习。 下个章节介绍工具调用。 引用链接 [1] 官方支持很多第三方存储: https://docs.langchain4j.dev/integrations/embedding-stores/ [2] 官方文档: https://docs.langchain4j.dev 往期推荐: 序号 文章标题 链接 1 MCP协议爆火揭秘 查看详情 2 轻松配置Cursor玩转MCP 查看详情 3 Browser-Tool 前端开发神器 查看详情 4 AI编码焕新:用Context7
,进行编码打包,并通过无线方式(如4G/5G)与指挥中心实现媒体数据互通和信令交互。 二、主要功能与应用实时音视频采集与传输: 巡检人员使用GB28181记录仪实时采集电网设施、线路状态等巡检现场的视频和音频数据,并通过4G/5G网络实时传输到指挥中心。 本地录像与存储: 记录仪具备本地录像功能,可以将巡检数据以MP4等格式存储于设备内部。录像数据可以长期保存和备份,为后续的数据分析和审查提供支持。 支持心跳机制,支持心跳间隔、心跳检测次数设置;支持移动设备位置(MobilePosition)订阅和通知; 适用国家标准:GB/T 28181—2016;支持语音广播;支持语音对讲;支持图像抓拍;支持历史视音频文件检索 ;支持历史视音频文件下载;支持历史视音频文件回放;支持云台控制和预置位查询; [实时水印]支持动态文字水印、png水印; [镜像]Android平台支持前置摄像头实时镜像功能; [实时静音]支持实时静音
在这样的背景下,安卓平台GB28181设备接入能力成为可视化调度平台的重要基础模块。 2022 完整兼容 音视频互动与回放控制功能项支持情况语音广播支持SIP语音广播下发语音对讲支持上下行音频通道对讲云台控制支持云台旋转、缩放、预置位查询与调用图像抓拍支持平台下发命令后实时抓拍图像上传历史检索支持录像文件检索 、列表返回、起止时间查询录像下载支持指定历史文件下载至平台侧远程回放支持录像按时间回放推送功能️ 视频录像能力扩展(配合录像SDK使用)功能项支持情况本地录像存储支持实时推流过程中同步录制录像格式支持原始流录制 / 封装MP4文件均可配置与GB28181融合可同步录像回放能力对接到平台控制逻辑中✅ 平台对接兼容性 ✔ 完美对接主流国标平台:海康、宇视、大华、旷视、华为云GB28181接入平台; ✔ 可作为子设备注册至公安视频图像平台 大牛直播SDK,正在用稳定可靠的GB28181安卓接入模块,为政务应急体系,搭建起「秒级可视、音视频互通、调度直连」的底层能力基石。
好多开发者有这样的诉求,想把本地录制的MP4文件,以实时流数据的形式,推送到RTMP服务器,注入轻量级RTSP服务,或者对接到GB28181平台,这块前几年我们就有对接。 本次以MediaExtractor为例,先利用MediaExtractor,把mp4文件的音视频数据分离,然后调用我们publisher模块,实现编码后的数据对接到RTMP服务器、轻量级RTSP服务或GB28181 mFile.exists()){Log.e(TAG, "mp4文件不存在");return;}MediaExtractor mediaExtractor = new MediaExtractor();try ");}else {if ( gb28181_agent_.start() ) {btnGB28181Agent.setText("停止GB28181");}}}}//停止GB28181 媒体流private this.tele_boot_value_ = tele_boot_value;return this;}}.set(deviceId, teleBootValue),0);}以上就是大概流程,需要注意的是,本地MP4文件作为实时数据发送的时候
1.设计要求与分析 建立一个文本文件,每个单词不包含空行且不跨行。检索单词的出现的行数,与位置。 \n"); } 1.输入文件名,打开该文件 2.循环读入到该文件过程如下 While(不是文件的输入结束){ 读入一文本进入串变量; 串变量写入文件; 输入是否为结束的标志; } 2.2检索单词的出现的位置 2.2.2单词的检索 1.输入要检索的文件名,并打开 2.输入要检索的单词 3.行计数器清0 4.While(不是文件的结尾) { 读入一行到指定的主串中; 求出串的长度; 行单词计数器置0; 检索的位置置 1为初始的位置; While(初始化检索的位置<主串的长度) { 调用串匹配函数,得到位置; 有的话,单词计数器+1,在这串中先保留起来它的位置; 接着下一个的检索; } 检索完这行,如果有单词,就输出 } } if (i > 0) { printf("行号:%d次数:%d,位置分别是:",l,i); for ( m = 1; m <= i; m++) printf("%4d