当前位置: 首页 > news >正文

Qt/C++开发监控GB28181系统/公网对讲/代码实现28181语音对讲/采集本地麦克风数据/支持udp和tcp模式

一、前言说明

按照国标的文档,语音对讲这块,并没有强制要求支持公网对讲,所以当初设备厂家做的都是支持的udp对讲,而且按照国标协议要求,对讲是先发一个语音对讲广播到设备,设备收到后,主动发起对讲到服务端,和视频点播是反着来的,这样的话数据的传输模式只能设备控制,默认一般都是udp,也就是设备端打开udp端口,服务端主动往这个端口发送数据。这个机制在局域网没有问题的,但是在公网上,就存在严重的缺陷了,服务端的IP是固定的,设备端不是固定的,而且服务端也无法正常连到设备端,除非对讲的sdp中约定tcp主动模式,也就是服务端这边监听端口,设备端主动连接,然后在这个连接上发送语音数据,所以新的海康的设备,在28181设置的地方,有个TCP广播的开关,开启后,就表示采用tcp方式传输语音对讲数据。

大华的设备目前为止没有看到类似的机制,而是采用拓展的sip协议,和类似视频点播的模式一样,sdp中对应play关键字改成talk,这样的话语音对讲的方式也是和视频点播一样,就可以由服务端任意控制何种方式了,也就肯定支持公网对讲了,也不知道后续国标文档会不会也改成这个方法,不然目前都是没有统一,这就很难办。

语音对讲大致流程:

  • 1,发送语音广播Broadcast指令到设备。
  • 2,设备发送invite点播指令,里面带的sdp数据指定了何种方式哪个端口。
  • 3,服务端绑定或打开对应的端口,打开成功后,组织sdp数据通过sip指令发给设备。
  • 4,设备应答ack指令,服务端打开麦克风采集数据。
  • 5,数据默认是pcm格式的,转成pcma格式,rtp打包发出去。

特别说明:

  1. 打开通道视频,在视频控件悬浮条上单击语音对讲按钮开始对讲,再次单击关闭对讲,同一时刻只允许一个通道处于对讲状态。
  2. 先发送语音广播通知,通过MESSAGE指令,xml数据对应cmdtype=Broadcast,信息带上SourceID和TargetID。
  3. 设备端收到语音广播通知后,会主动发起INVITE点播请求到服务端,请求中带了sdp信息。
  4. 服务端解析sdp信息,应答点播请求,同样带上自己这边的sdp信息。
  5. 服务端绑定端口,根据sdp内容选择是被动接收还是主动发起连接到设备端。
  6. 设备端应答ack,开启语音对讲,服务端采集语音pcm数据,转成pcma,再通过rtp打包发给对应设备端口。
  7. 默认设备支持的是局域网对讲,如果要公网对讲,需要支持tcp主动模式,也就是设备主动连接服务端,然后服务端对对应的连接发送语音数据。
  8. 测试发现海康大华的设备,音频播放那边要设置成g711a,才能正常播放语音。查阅了下资料,好像如果要支持28181语音对讲,必须设置成这个,其他28181平台也是这个规范。
  9. 海康的语音对讲默认是udp模式,如果要支持广域网对讲,也就是让设备端主动连接服务端,让后语音通信,必须要新版的设备才支持,后台28181设置的地方有个启用tcp广播,这个开关必须开启。
  10. 大华的语音对讲如果要支持公网,必须采用非国标的sip交互,详情见 https://zhuanlan.zhihu.com/p/649434585 。

二、效果图

Snipaste_2025-09-14_08-16-39

三、相关地址

  1. 国内站点:https://gitee.com/feiyangqingyun
  2. 国际站点:https://github.com/feiyangqingyun
  3. 个人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
  4. 文件地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_video_gb28181。

四、功能特点

  1. 支持设备注册、注销、心跳、校时、注册认证、注销认证等。
  2. 设备上线后可以手动获取设备状态、设备信息、配置信息、预置位信息等。
  3. 设备上线后自动获取设备通道信息,包括中文通道名称。识别到通道上线离线变化,会重新获取该设备的所有通道信息。
  4. 支持视频点播,可以分别点播主码流和子码流,内置rtp解包线程,解包后发给视频播放组件解码播放。
  5. 每个设备每个通道支持点播多个视频,通过ssrc区分,支持共用端口和不同端口收流。
  6. 支持对某个设备下面所有通道、某个通道、某个通道对应的某个流分别关闭。
  7. 支持录像文件查询和回放,回放控制支持暂停播放、继续播放、倍速播放、切换播放进度。
  8. 支持录像文件下载,支持倍速比如8倍速下载,可同时多线程批量下载。
  9. 回放和下载同时支持IPC和NVR,比如摄像头自带的SD存储卡录像文件回放,NVR上的硬盘录像文件回放。
  10. 支持云台控制,向上、向下、向左、向右、左上、右上、左下、右下方位移动,镜头放大缩小,光圈放大缩小,镜头聚焦放焦。
  11. 支持预置位信息的查询、调用、添加、修改、删除等操作。
  12. 自动目录订阅功能,通道上线下线都有对应的信号通知。
  13. 内置定时读取通道信息机制,以保证通道信息是最新的,比如有些NVR是不断更新的通道信息。
  14. 内置订阅警情和位置移动功能,订阅后各种警情事件比如运动目标检测报警、入侵检测报警、徘徊检测报警等自动上报。
  15. 支持语音对讲功能,可以直接在视频窗体的悬浮条上单击语音对讲按钮,再次单击关闭对讲,对讲期间悬浮条常驻显示。
  16. 支持设备布防撤防,布防后警情信息会主动上报。
  17. 国标服务同时支持udp和tcp方式,可选只监听一种或者两种都监听,tcp方式自动处理粘包问题。
  18. 国标拉流同时支持udp、tcp被动、tcp主动三种方式,每个通道都可以自由选择何种拉流方式。
  19. 内置拉流端口池,每次拉流从中取出一个,关闭流自动回收端口号,重复利用。
  20. 收流端口自动纠错,自动跳过被占用的端口,不会出现端口占用导致收流失败的情况。
  21. 支持三种取流方式自动检测离线重连,检测到离线后,自动重启点播拉流整个流程。
  22. 录像文件回放,上一个完成后自动切换到下一个继续回放,直到所有回放完成。支持高达8倍速回放。
  23. 视频播放自适应硬解码,极低资源占用,实时性极好,带悬浮条显示视频流信息,可以直接在悬浮条单击按钮保存录像文件到本地。
  24. 支持几千路国标消息交互并发,实时视频流支持64路同时显示,可以拓展更多路数。
  25. 支持阿里云等云服务器,可以分别设置内网监听地址和外网访问地址,一般云服务器上是监听地址用内网,对外访问用外网地址。
  26. 支持视频分发,也就是推流,视频通道打开后可以自动推流到流媒体服务器,其他需要的地方拉流即可,支持rtsp、rtmp、hls、webrtc等方式拉流。
  27. 支持注册重定向,方便做负载均衡和区域化部署,这样可以支持几十万个设备连接都没问题。
  28. 支持图像抓拍,可以设置抓拍最多10张图片,可设置抓拍间隔,抓拍到的图片会通过信号通知。
  29. 实时预览和录像回放都支持推流,推流支持叠加文字和图片水印以及各种ffmpeg支持的滤镜效果,支持多个水印同时叠加。
  30. 同时支持gb28181-2011、gb28181-2016、gb28181-2022以及后续可能的所有协议版本。
  31. SIP解析和交互采用纯Qt底层代码实现,udp/tcp通信交互,祖传原创代码解析,不依赖任何第三方。
  32. 代码量少,gb28181交互部分共几千行代码,注释详细,接口友好,使用极其简单,提供非常详细的使用示例。
  33. 支持海康、大华、宇视、华为、天地伟业等所有国标设备,包括一些没有ssrc的设备。
  34. 支持所有Qt版本和编译器以及操作系统,包括但不限于win、linux、mac、android、嵌入式linux、树莓派香橙派、国产os等。

五、相关代码

//语音广播:服务端-》设备端
MESSAGE sip:34020000001320000001@192.168.0.100:5061 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.110:15060;branch=z3hG9bK9085c93b7778426c805f0f000f31e2b6
From: <sip:34020000002000000001@192.168.0.110:15060>;tag=1017
To: <sip:34020000001320000001@192.168.0.100:5061>
Call-ID: 3a10b0f450f0499a95c61c3948522546
CSeq: 18 MESSAGE
User-Agent: wx_feiyangqingyun
Max-Forwards: 70
Content-Length: 200
Content-Type: application/MANSCDP+xml
Contact: <sip:34020000002000000001@192.168.0.110:15060><?xml version="1.0" encoding="GB2312"?>
<Notify><CmdType>Broadcast</CmdType><SN>10017</SN><SourceID>34020000002000000001</SourceID><TargetID>34020000001310000001</TargetID>
</Notify>//广播应答:设备端-》服务端
MESSAGE sip:34020000002000000001@192.168.0.110:15060 SIP/2.0
Call-ID: e78acda839fea196d5a4867db0ffe585
Content-Length: 180
Content-Type: Application/MANSCDP+xml
CSeq: 8 MESSAGE
From: <sip:34020000001320000001@192.168.0.100:5061>;tag=49b96ab2783ae380cd1f39848c0cf0de
Max-Forwards: 70
To: <sip:34020000002000000001@192.168.0.110:15060>
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.100:5061;rport;branch=z9hG4bK09c5c9872f1eaeeb2f753672bbcac574<?xml version="1.0" encoding="GB2312" standalone="yes" ?><Response><CmdType>Broadcast</CmdType><SN>10017</SN><DeviceID>34020000001310000001</DeviceID><Result>OK</Result></Response>//对讲请求:设备端-》服务端
INVITE sip:34020000002000000001@192.168.0.110:15060 SIP/2.0
Call-ID: fd514e34c2a7e40940437ac0272afd44
Contact: <sip:34020000001320000001@192.168.0.100:5061>
Content-Length: 240
Content-Type: application/sdp
CSeq: 1 INVITE
Expires: 120
From: <sip:34020000001320000001@192.168.0.100:5061>;tag=44088339578db934ef88a6a85534964b
Max-Forwards: 70
Subject: 34020000002000000001:03d7a8ef3276a8ef327,34020000001310000001:0552354c54f3354c54f
To: <sip:34020000002000000001@192.168.0.110:15060>
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.100:5061;rport;branch=z9hG4bK57f191fc39457eb7ed729b95c4f8a7bfv=0
o=34020000001320000001 0 0 IN IP4 192.168.0.100
s=Play
i=VCam BroadCast Session
c=IN IP4 192.168.0.100
t=0 0
m=audio 9776 RTP/AVP 8 96
a=recvonly
a=rtpmap:8 PCMA/8000/1
a=rtpmap:96 PS/90000
y=0022440333
f=v/0/0/0/0/0a/1/8/1//请求应答:服务端-》设备端
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.100:5061;rport;branch=z9hG4bK57f191fc39457eb7ed729b95c4f8a7bf
From: <sip:34020000001320000001@192.168.0.100:5061>;tag=44088339578db934ef88a6a85534964b
To: <sip:34020000002000000001@192.168.0.110:15060>;tag=fd514e34c2a7e40940437ac0272afd44
Call-ID: fd514e34c2a7e40940437ac0272afd44
CSeq: 1 INVITE
User-Agent: wx_feiyangqingyun
Date: 2025-05-05T17:12:49.401
Content-Length: 166
Content-Type: application/sdpv=0
o=34020000002000000001 0 0 IN IP4 192.168.0.110
s=Play
c=IN IP4 192.168.0.110
t=0 0
m=audio 15060 RTP/AVP 8
a=sendonly
a=rtpmap:8 PCMA/8000
y=0022440333//开始对讲:设备端-》服务端
ACK sip:34020000002000000001@192.168.0.110:15060 SIP/2.0
Call-ID: 2136e2263aa41b1c846a318586303f8e
Contact: <sip:34020000001320000001@192.168.0.100:5061>
Content-Length: 0
CSeq: 1 ACK
From: <sip:34020000001320000001@192.168.0.100:5061>;tag=9cc9d4a2600e325f8fd545d2bd753e84
Max-Forwards: 70
To: <sip:34020000002000000001@192.168.0.110:15060>;tag=2136e2263aa41b1c846a318586303f8e
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.100:5061;rport;branch=z9hG4bKd8aa8116cdee11c14a382f1fa6e5693e//结束对讲:服务端-》设备端
BYE sip:34020000002000000001@192.168.0.110:15060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.110:15060;branch=z3hG9bKd2ed4e36330b418d80fa0873c72732f9
From: <sip:34020000002000000001@192.168.0.110:15060>;tag=fd514e34c2a7e40940437ac0272afd44
To: <sip:34020000001320000001@192.168.0.100:5061>;tag=44088339578db934ef88a6a85534964b
Call-ID: fd514e34c2a7e40940437ac0272afd44
CSeq: 19 BYE
Contact: <sip:34020000002000000001@192.168.0.110:15060>//下面是tcp方式的/在对应的sdp文件的m=audio行有区别
//对讲请求:设备端-》服务端
NVITE sip:34020000002000000001@192.168.0.110:15060 SIP/2.0
Via: SIP/2.0/TCP 192.168.0.65:57527;rport;branch=z9hG4bK1273429191
From: <sip:34020000001320000099@192.168.0.65:5060>;tag=1812579261
To: <sip:34020000002000000001@192.168.0.110:15060>
Call-ID: 696755539
CSeq: 20 INVITE
Contact: <sip:34020000001320000099@192.168.0.65:57527;transport=TCP>
Content-Type: application/sdp
Max-Forwards: 70
User-Agent: IP Camera
Subject: 34020000002000000001:1,34020000001320000099:2
Content-Length:   250v=0
o=34020000001320000099 601 601 IN IP4 192.168.0.65
s=Play
c=IN IP4 192.168.0.65
t=0 0
m=audio 15066 TCP/RTP/AVP 8 96
a=setup:active
a=connection:new
a=recvonly
a=rtpmap:8 PCMA/8000
a=rtpmap:96 PS/90000
y=0200000017
f=v/////a/1/8/1//对讲应答:服务端-》设备端
SIP/2.0 200 OK
Via: SIP/2.0/TCP 192.168.0.65:57527;rport=57527;received=192.168.0.65;branch=z9hG4bK1273429191
From: <sip:34020000001320000099@192.168.0.65:5060>;tag=1812579261
To: <sip:34020000002000000001@192.168.0.110:15060>;tag=864237224
CSeq: 20 INVITE
Call-ID: 696755539
Contact: <sip:34020000002000000001@192.168.0.110:15060>
Content-Length: 226
Content-Type: APPLICATION/SDPv=0
o=34020000002000000001 601 601 IN IP4 192.168.0.110
s=Play
c=IN IP4 192.168.0.110
t=0 0
m=audio 30004 TCP/RTP/AVP 8
a=sendonly
a=rtpmap:8 PCMA/8000
a=setup:passive
a=connection:new
y=0200000017
f=v/////a/1/8/1

相关文章:

Qt/C++开发监控GB28181系统/公网对讲/代码实现28181语音对讲/采集本地麦克风数据/支持udp和tcp模式

一、前言说明 按照国标的文档,语音对讲这块,并没有强制要求支持公网对讲,所以当初设备厂家做的都是支持的udp对讲,而且按照国标协议要求,对讲是先发一个语音对讲广播到设备,设备收到后,主动发起对讲到服务端,和视频点播是反着来的,这样的话数据的传输模式只能设备控制…...

P3195 [HNOI2008] 玩具装箱 (斜率优化)

题目描述 一道不限段数的分段问题,要求给出 \(n\) 个元素,求出分任意组所产生的最小代价。 思路 我们可以分为两步来求解这个问题,暴力转移与优化。 The First Step 暴力转移 考虑暴力DP,根据题目描述,每个容器之中玩具的编号都是连续的,并且不限容器数量,状态就很好定义…...

DBeaver使用指南

概述 由于众所周知的原因,公司不容许使用非授权正版软件。datagrip本身挺不错的,但是要倒腾激活码之类的,比较麻烦。只能从开源社区寻找好用的DBMS GUI工具。 发现DBeaver挺不错,功能很全,但是默认的配置不够好用、字体、样式等都不友好,需要打磨一番才行。 下文重点关注…...

sh-2025模拟赛

CSP-J 模拟(九)题目解答 一、单项选择题(每题2分,共30分) 1. 进制转换计算 答案:C 解析:先将八进制数\((2025)_8\)转换为十进制: \(2\times8^3 + 0\times8^2 + 2\times8^1 + 5\times8^0 = 2\times512 + 0 + 16 + 5 = 1024 + 21 = 1045\)。 将十六进制数\((2025)_{16}\)…...

C++ day7 - 指南

C++ day7 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px !i…...

读人形机器人11娱乐领域

读人形机器人11娱乐领域1. 机器人表演者与艺术家 1.1. 在人类历史的宏大画卷中,艺术与娱乐一直是我们内心欲望、恐惧和抱负的映照 1.2. 音乐、舞蹈和戏剧表演中的机器人不再是科幻的虚构,而是正在重塑艺术表现形式的崭新现实 1.3. 机器人表演者和艺术家正在通过引入新的表现形…...

Java 注解机制全解析:原理、用途与框架中的实战

注解(Annotation)作为 Java 语言自 JDK5 引入以来的一项重要元编程特性,已经成为现代 Java 开发不可或缺的一部分。无论是 Spring 框架中的依赖注入、事务控制,还是 Hibernate 的对象关系映射,抑或是 Lombok 对代码生成的辅助,注解几乎贯穿于 Java 的开发全过程。 本文将…...

模板集

考虑到作为一名 Oier 有很多需要掌握的模板,所以整合了一下以前的专栏,就变成现在这样了! 有问题请加 qq 3848603482。可以帮你讲解。 给萌新的代码建议 尽量不要写全局变量,容易弄混不方便调试,要用了再创建。没有必要手写栈之类的,STL要了解多一点。不要写#define int …...

暑假

P2569 https://www.luogu.com.cn/problem/P2569 参考这篇。 /*单调队列优化dp买入股票的转移方程j是顺序枚举的,因为是买入股票,手中的股票应该是越来越多的, 当前的决策有可能在后面(j更大)的时候用到,所以你需要先求出来, 同理,卖出股票时,你手中的股票是越来越少的…...

做题记录

P1248 加工生产调度 比较妙的一道题,这里我们可以直接把 A 与 B 的最小值碾一遍,注意 B 操作时间要与 A 操作时间取最大值。...

课程助教工作总结

在上学期,我有幸担任了《数字电路与逻辑设计》课程的助教。这是一次极其宝贵和充实的经历,不仅巩固和深化了我的专业知识,更锻炼了我的沟通、组织和解决问题的能力。现将本学期的工作情况总结如下: 一、 助教工作的具体职责和任务 我的工作核心是成为连接主讲教师与学生的桥…...

6G 驱动的智慧城市新格局

引言随着科技的不断进步,6G 驱动的智慧城市新格局 正逐渐走向应用前沿。它不仅推动了相关产业的发展,也在改变人类社会的运作方式。本文将从背景、核心技术、应用案例、挑战与趋势、总结几个方面对其进行系统分析。 背景 📊6G 驱动的智慧城市新格局 的出现,是社会需求、政…...

SHA-1 证书淘汰警告:网站管理员需紧急验证TLS安全性

微软宣布自2017年5月9日起,Edge和IE11浏览器将逐步阻止SHA-1签名的TLS服务器证书。本文详细解析三阶段淘汰计划、受影响证书类型验证方法及企业应对方案,涉及证书链验证和弱签名日志收集技术。こんにちは、村木ゆりかです。 以前よりマイクロソフト セキュリティ アドバイザリ…...

数字孪生在制造业中的应用

引言在当前快速发展的科技环境中,数字孪生在制造业中的应用 已经成为学术界与产业界广泛关注的主题。本文将通过背景、核心技术、应用案例、挑战与趋势、总结六个部分进行系统性分析。 背景 📊数字孪生在制造业中的应用 的兴起与社会发展需求密切相关。随着数字化转型的加速…...

device第一周个人作业

一. 自我介绍 回顾我的学习经历,虽然没有什么惊天动地的大成就,但也没有一些值得骄傲的小闪光点。兴趣爱好是科幻和军事读物,以前喜欢跟朋友一起打比赛,现在发现朋友在打假赛…… 二.现状、经验与计划 (1)当前技能树与技术偏好 当前技能树: 我可以使用基础的C语言和java…...

Java 在移动开发与跨平台应用中的应用

随着智能手机的普及,移动应用已经成为数字化转型的重要载体。移动端承载着用户的核心交互,而跨平台开发趋势也不断兴起, 旨在减少多端重复开发成本。在这一过程中,Java 一直是移动开发的核心语言, 尤其在 Android 生态中占据主导地位,并通过跨平台技术、移动后端服务、混…...

5G 技术与远程教育

引言在当前快速发展的科技环境中,5G 技术与远程教育 已经成为学术界与产业界广泛关注的主题。本文将通过背景、核心技术、应用案例、挑战与趋势、总结六个部分进行系统性分析。 背景 📊5G 技术与远程教育 的兴起与社会发展需求密切相关。随着数字化转型的加速,全球化的扩展…...

5G 技术在工业互联网的应用

引言在当前社会与科技的双重推动下,5G 技术在工业互联网的应用 已成为一个举世瞩目的议题。它不仅仅是技术层面的创新,更代表着社会运行模式的转型。本文将从背景、核心技术、应用案例、挑战与趋势、总结几个方面进行深入探讨。 背景 📊5G 技术在工业互联网的应用 的发展源…...

一键部署ftp脚本

在 Ubuntu(root) 上搭建标准 FTP(vsftpd)服务器,带被动模式端口、用户创建、目录与权限配置,可直接落地执行。一、部署脚本(保存为 setup_ftp.sh,root 执行) #!/usr/bin/env bash set -euo pipefail### ====== 可按需修改的变量 ====== FTP_USER="ftpuser" …...

PySimpleGUI安装4.60.5老版本安装教程!

PySimpleGUI安装4.60.5老版本安装教程! ━━━━━━━━━━━━━━━━━━━━━━ https://download.csdn.net/download/mzl_18353516147/89506033?utm_medium=distribute.pc_relevant_download.none-task-download-2defaultBlogCommendFromBaiduRate-2-89506033-downlo…...

PySimpleGUI-免注册版本

PySimpleGUI 开始注册了,怎样能免注册使用早期版本? 若需免注册使用 PySimpleGUI 早期版本,可通过以下两种方法实现,具体操作及原理如下: 方法一:通过 pip 指定版本安装(推荐) 操作步骤:卸载现有版本(若已安装新版):pip uninstall PySimpleGUI安装指定旧版本(如 4…...

高三闲话 #1

APJ 三个银牌高考 699,我一个银牌考个 233 不过分吧高三生活还是如期而至了,写点高三闲话感觉太有道理了。不过我得先说明这篇文章的目的不是传播负能量,事实上我最近还是蛮积极的,只不过我无法回避这些我内心里的真实想法,而且感觉写出来很有意思,所以写一写。如果让我用…...

三大免费CDN推荐:安全防护强、稳定性卓越、加载飞速,长期使用超安心

三大免费CDN推荐:安全防护强、稳定性卓越、加载飞速,长期使用超安心1. 将盾CDN:防御与速度双卓越,建站首选利器 将盾CDN是一款专注于安全与性能的CDN服务,其免费版本在防御强度、国内访问速度及功能实用性上表现亮眼,无论是企业官网还是个人站点,都能提供可靠保障,是当…...

PySimpleGUI 开始注册了,怎样能免注册使用早期版本?

若需免注册使用 PySimpleGUI 早期版本,可通过以下两种方法实现,具体操作及原理如下: 方法一:通过 pip 指定版本安装(推荐) 操作步骤:卸载现有版本(若已安装新版):pip uninstall PySimpleGUI安装指定旧版本(如 4.60.5):pip install PySimpleGUI==4.60.5该版本在官方…...

全屏与退出全屏功能

全屏与退出全屏功能 📄 Fullscreen API 使用说明 通过浏览器提供的 Fullscreen API,你可以实现在任意 HTML 元素上的全屏展示与退出全屏效果,适用于视频播放器、看图模式、报表展示等场景。🧩 功能说明支持进入全屏 支持退出全屏 支持检测当前是否处于全屏状态 兼容多浏览…...

二十多年.NET老兵重返技术博客

缘起:博客园,我们的技术家园 自2005年入驻博客园,2006年开始撰写技术博客,直至2013年,我将博客园视为.NET技术交流的圣地。这里纯净、专注的技术氛围,以及众多技术精英的真诚分享,使其成为我们共同的网上家园。然而,由于工作性质的变化,我在2013年后逐渐淡出了技术博客…...

5月杂题

一点骨灰?臭不要脸的回到了机房,感觉大家越来越强了,膜拜。 想到什么写什么。多校清北营训练「清华场」B. 绕口令/gym100162B题意:定义一个字符串为好的当且仅当其中没有两个相邻字符相同,问你对 \(k\in[1,n]\),能否删去原字符串中连续 \(k\) 个字符得到一个好的字符串。…...

uv,下一代Python包管理工具

uv,下一代Python包管理工具 https://segmentfault.com/a/1190000047202911 什么是uv uv(Universal Virtual)是由Astral团队(知名Python工具Ruff的开发者)推出的下一代Python包管理工具,使用Rust编写。它集成了包管理、虚拟环境、依赖解析、Python版本控制等功能,它聚焦于…...

阅读 |《虚空》观后感以及一些想法——万物简史

保持学习,保持记录,保持思考—————— 啊啊啊,真的有好多想要去做的事情,好多想要体验的事情,真的没法同时去学习所有的事物,那是多么的令人感到幸福 这篇文主要就记下看完《虚空》之后的想法以及之后和AI的讨论 首先呢我初读这本书感觉很枯燥,但一整篇看下来之后还是…...

Python进阶必看:深入解析yield的强大功能

https://segmentfault.com/a/1190000045317342?utm_source=sf-similar-article Python进阶必看:深入解析yield的强大功能 头像 涛哥聊Python 2024-10-22 四川 阅读 3 分钟 头图 大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。 更多Python学习内容:http://ip…...

polyglot,一个有趣的 Python 库!

https://segmentfault.com/a/1190000045317129 polyglot,一个有趣的 Python 库! 头像 涛哥聊Python 2024-10-02 四川 阅读 4 分钟 头图 大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。 更多Python学习内容:http://ipengtao.com 今天为大家分享一个有趣的 Py…...

个人介绍与博客初建

大家好!我是 李祺,很高兴能通过博客园这个平台和大家交流。我是一名计算机相关专业的学生,在平时生活里,音乐、旅途和美食是三大支柱。耳机里永远循环着不同语言的旋律:华语流行的细腻歌词、K-pop 的强劲节奏、英文歌的叙事感,都能让我在忙碌时快速切换状态。 旅游是我探…...

PySimpleGUI,一个神奇的 Python 库!

https://segmentfault.com/a/1190000045317132?utm_source=sf-similar-article#item-3-3 大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。 更多Python学习内容:http://ipengtao.com 今天为大家分享一个神奇的 Python 库 - PySimpleGUI。 Github地址:https://…...

c++ 的拷贝构造函数

当类成员变量有指针类型的时候,要自定义拷贝函数,不要使用默认的拷贝构造函数.因为默认的拷贝构造构造函数是浅拷贝是位拷贝的,只拷贝指针指向的空间而没有把空间里的内容一起拷贝过来,这样会导致改变其中的一个,另一个也会跟着一起改变(老婆也都一样的了)class Teacher{ publi…...

变异

n可以理解成特征的对比 是的,完全可以这么理解!✅ 一句话总结:n 就是“你用多少种不同的视角/特征去衡量这两段区间的关系”。✅ 举个例子: 你把两条 150 kb 区间(X 和 Y)拿来比较,可以问:视角(特征) 具体问法 对应通道覆盖度视角 “X 和 Y 哪边 reads 更多?” read…...

【笔记】类欧几里得算法

类欧几里得算法(之后或许会加上万欧)直接用例子开始吧: \[给定 a,b,c,n,求解\sum_{i = 0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor \]我们记 \(f(a,b,c,n) = \sum_{i = 0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\) 首先考虑 \(a \ge c\) 或 \(b \ge c\) 的情况: 先…...

AQS的一些思考

AQS-AI问答AQS是怎么实现CountDown AQS 为 CountDownLatch 提供了核心的 状态管理(state 作为计数器) 和 线程排队 / 唤醒机制(CLH 队列):通过 tryAcquireShared 检查计数器是否为 0,决定线程是否需要等待; 通过 tryReleaseShared 原子递减计数器,当计数器归零时唤醒所…...

DearPyGui-最强大的一款Python GUI工具

https://zhuanlan.zhihu.com/p/200754892 其实,在Python中不乏知名的UI构建工具包,例如,Tkinter,PyQT / PySide,wxPython,Kivy,PySimpleGui。这些工具包都很强大,但是,也非常繁琐。 开发一个框架要付出的精力和代码量几乎和核心逻辑相差无几,这与Python崇尚的简单是相…...

2 模型评估与选择

目录P18P23P25 P18 可以好好想一下ROC曲线是如何形成的:我们设置不同的二分类的阈值,就会有不同的(TPR,FPR)对;如果我们将所有数据按照其置信度从大到小排序,然后让阈值逐渐减小,并在ROC曲线上进行描点,那么我们可以发现,如果遇到一个正例,那么当前点会竖直向上走\(\fr…...

TY-290ES计算器屏幕逆向

刷拼多多时看到个便宜的TY-290ES计算器,到手价只需要人民币11块多,还是个点阵屏,真是难以想象国产计算器能做这么便宜,买一个来研究下。廉价小商品大本营(浙江)发的货,,,先点亮看看,功能很少,比82ES还差点意思。屏幕点阵粗略估了下,应该是96x31像素的,顶部有一行图标…...

CF1559E

时间限制 \(2\,\text{sec}\) 空间限制 \(256\,\text{MB}\) 题目来源 CodeForces。 题目大意 给定 \(n\) 个区间 \([l_i,\, r_i]\) 和一个常数 \(m\) ,在每个区间内选出一个正整数 \(a_i\) 构成一个数列 ,满足\(\displaystyle\sum^{n}_{i=1}a_i \leq m\) , \(\gcd \{a_i \} …...

笔记 哈希

A - Description 给定字符串 \(S\) 和 \(T\),问你在 \(S\) 中 \(T\) 出现了几次。 \(1\le |S|,|T|\le 2\times 10^6\) A - Solution 首先暴力地来想。在 \(S\) 中找出所有长度为 \(|T|\) 的子串,然后暴力逐字符匹配,复杂度显然是 \(O(n^2)\) 的,考虑优化。(此处假设 \(|T|…...

题解:CF566A Matching Names

题意 有 \(n\) 名同学,每位同学有一个真名与一个笔名,都是一个由小写英文字母组成的字符串。每位同学可以选择一位同学,使自己的真名与那位同学的笔名相匹配,产生的贡献为其最长公共前缀,每位同学的笔名只能与一人匹配,求贡献总和的最大值。 思路 把笔名插入字典树,并在…...

Tarjan 求连通性相关

复健发现自己对于 Tarjan 的一些东西都有些搞不清了啊。整理一下。 如有错误/不足,欢迎指出。 先给一些定义:\(u\) 表示某个子树的根节点。 \(v\) 表示与 \(u\) 相连的点。如果是无向图那么不包含父亲。 \(fa\) 表示 \(u\) 在 DFS 生成树上的父亲节点。 \(dfn_u\),表示 \(u\…...

暑假学习笔记

Hadoop 生态:实时 + 离线一体化 Flink on YARN 初体验 使用 Flink 1.17.1 提交 yarn-session 模式,队列 queue.stream 独享 4G 堆、2 vcore;编写 Kafka → Hive 的流式入湖作业,消费 user_behavior Topic,Checkpoint 30 s,Exactly-Once 写入 Hive 表 ods_log_rt,实现分钟…...

qoj #8557. Goldberg Machine 题解

有意思原题:https://qoj.ac/problem/8557 弱化版:https://www.luogu.com.cn/problem/P7830 但是弱化版要求做到更优复杂度,但是没有修改。 本文的 参考文章钦定树以 \(1\) 为根。钦定所有点 \(u\neq 1\) 的 \(e,t\) 循环位移成 \(e_{u,k_u-1}=fa_u\),就是把父亲丢到最后。 …...

centos7云主机磁盘清理过程纪要

云主机总磁盘大小为120G,在阿里云控制台配置了磁盘使用达90%告警 1. 收到告警短信 2. 当前磁盘占用情况 df -h | grep dev 已达到 89% 3. 开始排查 3-1. 查看哪个目录占用最大 du -sh /* 或者 du -sh /* | sort -h 发现 /www 目录占用 69G 3-2. 查看 /www du -sh /www/* /ww…...

『随笔』我的唱歌练习史

继续加油!因为热爱。...

2025浙江省信息通信业职业技能竞赛-数据安全管理员竞赛-决赛wp

通信证-签到flag{data_security_is_very_interesting}数据加密与解密-KeekKey题目描述:在数据安全领域,弱密钥和不安全的加密方式如同数字世界的 "隐形杀手",可能引发严重安全漏洞,威胁个人、企业甚至国家网络安全。如金融交易系统使用弱密钥,会被黑客暴力破解篡…...

Java基础核心问题解析

Java基础核心问题解析:方法、数组与类的深度探讨 在Java学习过程中,方法参数传递、数组特性、类与对象的关系等是基础且核心的知识点,也是容易产生困惑的地方。本文将围绕课前提出的一系列问题,逐一解析,帮助大家深入理解这些概念。 一、方法相关问题解析 先看这段代码,我…...