GB/T28181-2022规范解读、应用场景和技术实现探究
GB/T28181-2022和GB/T28181-2016区别
GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》与 GB/T28181-2016 相比,主要有以下区别:
- 术语和定义方面:
- 术语删减:GB/T28181-2022 删除了 “联网系统信息”“数字接入”“模拟接入”“模数混合型监控系统”“数字型监控系统”“监控点”“监控中心” 等术语的定义,使标准更加简洁,适应监控技术的发展趋势,因为一些传统的监控接入方式逐渐被淘汰。
- 术语更改:更改了 “SIP 监控域”“非 SIP 监控域”“级联”“互联” 的术语和定义,表述更加准确和清晰,便于理解和应用。
- 增加缩略语:2022 版增加了 “PTZ” 的缩略语,方便对云台控制相关功能的表述和理解。
- 系统结构和协议方面:
- 互联结构示意图更改:GB/T28181-2022 更改了 “SIP 监控域互联结构示意图”,对监控系统的互联结构展示进行了优化和调整,使其更符合实际应用场景。
- 通信协议结构图变化:2022 版更改了 “联网系统通信协议结构图”,媒体流通道增加了 H.265、G.722.1、AAC 等编码格式的支持,丰富了媒体流的传输方式,提高了音视频传输的质量和效率。
- 增加 RTP 时间戳要求:2022 版增加了媒体流数据传输的 RTP 时间戳要求,保证了视频时间的真实性和实时性,防止数据被篡改。
- 技术要求方面:
- 网络传输带宽和视频帧率要求:GB/T28181-2022 更改了网络传输带宽要求和视频帧率要求。例如,2016 版对单路设备接入带宽有具体数值要求,而 2022 版则更灵活,满足要求且留有余量即可;帧率统一要求为 25fps(2016 版有多种帧率要求)。
- 编码格式支持:2022 版增加了对 H.265、AAC 的支持,强化了对新一代音视频编码格式的适应性,有助于提高系统的性能和兼容性。
- 协议引用更改:更改了 SDP 协议的引用,使协议的应用更加规范和准确。
- 功能和命令方面:
- 增加功能查询命令:GB/T28181-2022 增加了看守位信息查询、巡航轨迹列表查询、巡航轨迹查询、PTZ 精准状态查询、存储卡状态查询及应答命令等,细化和扩展了系统的功能查询能力,方便对监控设备的状态和信息进行更全面的了解。
- 增加事件订阅和通知:增加了 PTZ 精准位置变化事件订阅和通知,提高了对云台控制的实时监控和反馈能力。
- 增加软件升级和图像抓拍相关内容:增加了设备软件升级、图像抓拍信令流程和协议接口,完善了系统的维护和管理功能。
- 安全性要求方面:GB/T28181-2022 更改了传输、交换、控制安全性要求,提高了系统的安全性能,保障监控数据的保密性、完整性和可用性。
- 附录内容方面:
- 附录调整和补充:2022 版对多个附录进行了更改、补充和完善,如更改了附录 D 基于 TCP 协议的视音频媒体传输要求(原 2016 版为附录 L);更改了附录 B、C、E、F、G 等,增加了附录 H(摄像机和平台路径选择技术要求)、附录 I(协议版本标识)、附录 O(摄像机采集部位类型代码)等,使标准的附录内容更加丰富和详细。
- 标签和字段格式变更:在一些附录中,对标签和字段格式进行了变更,如目录响应报文中的 info 标签修改为 extrainfo 标签等,但部分变更后的标签在实际应用中可能尚未使用。
GB28181应用场景
GB28181 即《公共安全视频监控联网系统信息传输、交换、控制技术要求》,其主要使用场景如下:
一、公共安全领域
- 社会治安监控:
- 在城市的街道、广场、公园等公共场所安装的视频监控设备,可以通过 GB28181 协议接入到公安部门的视频监控联网平台。这样,警方可以实时监控这些区域的治安情况,及时发现和处理违法犯罪行为。
- 例如,当发生盗窃、抢劫等案件时,警方可以通过调阅监控录像,追踪犯罪嫌疑人的行踪,为案件的侦破提供重要线索。
- 交通管理:
- 道路上的交通监控摄像头可以采用 GB28181 协议,将视频图像传输到交通管理部门的指挥中心。指挥中心可以实时监控道路交通流量、车辆行驶状态等信息,及时发现交通拥堵、事故等情况,并采取相应的疏导和处理措施。
- 例如,在高峰期,交通管理部门可以通过监控画面,及时调整信号灯时间,优化交通流量;在发生交通事故时,可以快速派遣交警前往现场处理,并通过监控了解事故情况,为救援和处理提供依据。
- 应急指挥:
- 在发生自然灾害、事故灾难等突发事件时,GB28181 协议可以实现不同部门之间的视频监控资源共享,为应急指挥提供全面的现场信息。
- 例如,在地震、洪水等灾害发生时,消防、救援、医疗等部门可以通过共享的视频监控画面,了解灾区情况,制定合理的救援方案,提高救援效率。
二、企业和机构内部安全管理
- 工厂和园区监控:
- 大型工厂、工业园区可以利用 GB28181 协议搭建自己的视频监控联网系统,实现对生产区域、仓库、办公区域等的全面监控。企业管理人员可以通过该系统实时了解生产情况、员工工作状态以及安全隐患等,提高企业的管理效率和安全性。
- 例如,在化工企业中,可以通过监控摄像头实时监测危险区域的情况,一旦发现异常情况,及时采取措施,防止事故的发生。
- 金融机构安保:
- 银行、证券交易所等金融机构可以采用 GB28181 协议的视频监控系统,对营业场所、金库、自助银行等区域进行监控。安保人员可以通过监控画面实时掌握各个区域的安全状况,防范盗窃、抢劫等犯罪行为。
- 例如,当有可疑人员在自助银行附近徘徊时,安保人员可以通过监控及时发现,并采取相应的防范措施。
- 学校和医院安全管理:
- 学校和医院可以利用 GB28181 协议的视频监控系统,保障校园和医院的安全。学校可以监控教学楼、操场、宿舍等区域,防止校园暴力、盗窃等事件的发生;医院可以监控门诊大厅、病房、药房等区域,确保患者和医护人员的安全。
- 例如,在学校放学期间,保安可以通过监控画面关注校门口的人流情况,维护秩序,保障学生的安全。
三、智能交通领域
- 智能公交系统:
- 公交车上安装的视频监控设备可以通过 GB28181 协议将视频图像传输到公交调度中心。调度中心可以实时监控公交车内的情况,了解乘客数量、行为等信息,同时也可以监控公交车的行驶路线和速度,确保公交运行的安全和高效。
- 例如,当公交车上发生纠纷或突发事件时,调度中心可以及时了解情况,并通知司机采取相应的措施;在公交车超速或偏离路线时,调度中心可以及时提醒司机,保证行车安全。
- 电子警察系统:
- 道路上的电子警察摄像头可以采用 GB28181 协议,将违法车辆的照片和视频信息传输到交通管理部门的违法处理系统。交通管理部门可以通过该系统对违法车辆进行处罚,提高交通执法的效率和公正性。
- 例如,当车辆闯红灯、超速行驶或违法停车时,电子警察摄像头会自动拍摄照片和视频,并将这些信息传输到违法处理系统,交通管理部门可以根据这些证据对违法车辆进行处罚。
四、跨区域视频监控联网
- 城市间视频监控联网:
- 不同城市之间的视频监控系统可以通过 GB28181 协议实现联网,实现跨区域的视频资源共享和协同管理。例如,在追捕犯罪嫌疑人时,多个城市的警方可以通过联网的视频监控系统,共同追踪犯罪嫌疑人的行踪,提高抓捕效率。
- 省际视频监控联网:
- 在省级层面,可以通过 GB28181 协议将各个地市的视频监控系统联网,实现全省范围内的视频资源整合和统一管理。这样,省级公安部门可以更加全面地掌握全省的社会治安情况,及时协调各地的警力资源,应对重大突发事件。
- 例如,在举办重大活动或应对重大自然灾害时,省级公安部门可以通过联网的视频监控系统,统一指挥调度各地的警力和救援力量,确保活动的安全顺利进行和灾害的有效应对。
如何实现GB28181设备对接
一、了解 GB28181 协议
GB28181 即《公共安全视频监控联网系统信息传输、交换、控制技术要求》,它规定了公共安全视频监控联网系统中信息传输、交换、控制的技术要求。主要包括以下几个方面:
- 设备注册:设备向平台注册,提供设备信息。
- 信令交互:包括设备控制信令、状态查询信令等。
- 媒体流传输:视频、音频等媒体流的传输规范。
二、选择开发工具和库
- 开发语言:通常可以使用 Java 或 Kotlin 进行 Android 开发。
- 网络通信库:由于 GB28181 涉及网络通信,可以考虑使用 OkHttp 等网络请求库来实现与设备和平台的通信。
- 媒体处理库:对于媒体流的处理,可以使用 ExoPlayer 等视频播放库来播放接收到的视频流。
三、实现设备注册
- 构造注册信令:根据 GB28181 协议规范,构造设备注册的 SIP(Session Initiation Protocol)信令。信令中包含设备的唯一标识、IP 地址、端口号等信息。
- 发送注册信令:使用网络通信库将注册信令发送到指定的平台地址。
- 处理注册响应:接收平台返回的注册响应信令,解析响应状态码。如果注册成功,则保存平台分配的设备 ID 等信息;如果注册失败,则根据错误码进行相应的处理。
四、信令交互
- 设备控制信令:实现对设备的云台控制(上下左右转动、变焦等)、录像控制等功能。构造相应的 SIP 信令并发送到设备,设备接收到信令后执行相应的操作。
- 状态查询信令:定期向设备发送状态查询信令,获取设备的在线状态、录像状态等信息。设备返回状态响应信令,解析后更新设备状态显示。
五、媒体流接收和播放
- 接收媒体流:当设备注册成功并建立连接后,设备会根据请求发送视频和音频媒体流。在 Android 端,使用网络通信库接收媒体流数据。
- 解码和播放:使用媒体处理库(如SmartPlayer)对接收的媒体流进行解码和播放。将媒体流数据传递给播放器进行播放显示。
六、错误处理和异常情况处理
- 网络连接问题:处理网络连接中断、超时等情况。可以设置重试机制,尝试重新连接设备或平台。
- 信令错误:对错误的信令响应进行处理,如解析错误码并给出相应的提示信息。
- 媒体流异常:处理媒体流中断、卡顿等情况。可以尝试重新建立媒体流连接或调整播放器参数以提高播放稳定性。
Android平台实现GB28181设备对接
以大牛直播SDK推出的Android平台GB28181接入SDK(以下简称SmartGBD)为例,SmartGBD可实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016或GB/T28181—2022服务,可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工地、雪亮工程、平安乡村、生产运输、车载终端等场景,可能是业内为数不多功能齐全性能优异的商业级水准GB28181接入SDK。
Android终端除支持常规的音视频数据接入外,还可以支持移动设备位置(MobilePosition)订阅和通知、图像抓拍、语音广播和语音对讲、历史视音频下载和回放,支持对接数据类型如下:
- 编码前数据(目前支持的有YV12/NV21/NV12/I420/RGB24/RGBA32/RGB565等数据类型),其中,Android平台前后摄像头数据,或者屏幕数据,或者Unity拿到的数据,均属编码前数据;
- 编码后数据(如无人机等264/HEVC数据,或者本地解析的MP4音视频数据);
- 拉取RTSP或RTMP流并接入至GB28181平台(比如其他IPC的RTSP流,可通过Android平台GB28181接入到国标平台)。
功能支持
- [视频格式]H.264/H.265(Android H.265硬编码);
- [音频格式]G.711 A律、AAC;
- [音量调节]Android平台采集端支持实时音量调节;
- [H.264硬编码]支持H.264特定机型硬编码;
- [H.265硬编码]支持H.265特定机型硬编码;
- [软硬编码参数配置]支持gop间隔、帧率、bit-rate设置;
- [软编码参数配置]支持软编码profile、软编码速度、可变码率设置;
- 支持横屏、竖屏推流;
- Android平台支持后台service推送屏幕(推送屏幕需要5.0+版本);
- 支持纯视频、音视频PS打包传输;
- 支持RTP OVER UDP和RTP OVER TCP被动模式(TCP媒体流传输客户端);
- 支持信令通道网络传输协议TCP/UDP设置;
- 支持注册、注销,支持注册刷新及注册有效期设置;
- 支持设备目录查询应答;
- 支持心跳机制,支持心跳间隔、心跳检测次数设置;
- 支持移动设备位置(MobilePosition)订阅和通知;
- 适用国家标准:GB/T 28181—2016、GB/T28181—2022;
- 支持语音广播;
- 支持语音对讲;
- 支持图像抓拍;
- 支持历史视音频文件检索;
- 支持历史视音频文件下载;
- 支持历史视音频文件回放;
- 支持云台控制和预置位查询;
- [实时水印]支持动态文字水印、png水印;
- [镜像]Android平台支持前置摄像头实时镜像功能;
- [实时静音]支持实时静音/取消静音;
- [实时快照]支持实时快照;
- [降噪]支持环境音、手机干扰等引起的噪音降噪处理、自动增益、VAD检测;
- [外部编码前视频数据对接]支持YUV数据对接;
- [外部编码前音频数据对接]支持PCM对接;
- [外部编码后视频数据对接]支持外部H.264数据对接;
- [外部编码后音频数据对接]外部AAC数据对接;
- [扩展录像功能]支持和录像SDK组合使用,录像相关功能。
系统要求
- SDK支持Android 5.1及以上版本;
- 支持的CPU架构:armv7, arm64, x86, x86_64。
准备工作
- 确保SmartPublisherJniV2.java放到com.daniulive.smartpublisher包名下(可在其他包名下调用);
- 如需集成语音广播、语音对讲功能,确保SmartPlayerJniV2.java放到com.daniulive.smartplayer包名下(可在其他包名下调用);
- smartavengine.jar和smartgbsipagent.jar加入到工程;
- 拷贝libSmartPublisher.so和libSmartPlayer.so(如需语音广播或语音对讲)到工程;
- AndroidManifast.xml添加相关权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
- Load相关so:
static { System.loadLibrary("SmartPublisher");System.loadLibrary("SmartPlayer");
}
- build.gradle配置32/64位库:
splits {abi {enable truereset()// Specifies a list of ABIs that Gradle should create APKs forinclude 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' //select ABIs to build APKs for// Specify that we do not want to also generate a universal APK that includes all ABIsuniversalApk true}
}
- 如需集成到自己系统测试,请用大牛直播SDK的app name,授权版按照授权app name正常使用即可;
- 如何改app-name,strings.xml做以下修改:
<string name="app_name">SmartPublisherSDKDemo</string>
接口详解
以Android平台Camera2对接为例,信令部分需要实现如下标红接口:
/* * GB28181Camera2Activity.java* Created by daniusdk.com* WeChat: xinsheng120*/
public class MainActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener, Camera2Listener,GBSIPAgentListener, GBSIPAgentPlayListener, GBSIPAgentAudioBroadcastListener,GBSIPAgentDeviceControlListener, GBSIPAgentQueryCommandListener, GBSIPAgentTalkListener, GBSIPAgentQueryRecordInfoListener{
}
媒体数据处理接口,可参照SmartPublisherJniV2.java,如需语音广播或语音对讲,可参照SmartPlayerJniV2.java。
信令处理
GBSIPAgentListener主要系GB28181注册、心跳、DevicePosition等,如注册成功、注册超时、注册网络传输层错误、心跳异常、设备位置请求处理:
public interface GBSIPAgentListener
{/*注册成功* @param dateString: 服务器日期,用来校准设备端时间,用户自行决定是否校准设备时间*/void ntsRegisterOK(String dateString);/**注册超时*/void ntsRegisterTimeout();/**注册网络传输层异常*/void ntsRegisterTransportError(String errorInfo);/**心跳达到异常次数*/void ntsOnHeartBeatException(int exceptionCount, String lastExceptionInfo);/** 设备位置请求, 这个主要用在移动设备位置订阅上* @param interval 请求间隔, 单位是毫秒*/void ntsOnDevicePositionRequest(String deviceId, int interval);
}
GBSIPAgentPlayListener主要系GB28181的Invite、Ack、Bye等处理:
public interface GBSIPAgentPlayListener {/**收到s=Play的实时视音频点播*/void ntsOnInvitePlay(String deviceId, SessionDescription sessionDescription);/**发送play invite response 异常*/void ntsOnPlayInviteResponseException(String deviceId, int statusCode, String errorInfo);/** 收到CANCEL play INVITE请求*/void ntsOnCancelPlay(String deviceId);/** 收到Ack*/void ntsOnAckPlay(String deviceId);/** 收到Bye*/void ntsOnByePlay(String deviceId);/** 不是在收到BYE Message情况下, 终止Play*/void ntsOnTerminatePlay(String deviceId);/** Play会话对应的对话终止, 一般不会出发这个回调,目前只有在响应了200K, 但在64*T1时间后还没收到ACK,才可能会出发收到这个, 请做相关清理处理*/void ntsOnPlayDialogTerminated(String deviceId);
}
GBSIPAgentAudioBroadcastListener主要系GB28181语音广播处理相关,如有语音广播相关需求,可参照demo实例实现:
public interface GBSIPAgentAudioBroadcastListener {/**收到语音广播通知*/void ntsOnNotifyBroadcastCommand(String fromUserName, String fromUserNameAtDomain, String sn, String sourceID, String targetID);/**需要准备接受语音广播的SDP内容*/void ntsOnAudioBroadcast(String commandFromUserName, String commandFromUserNameAtDomain, String sourceID, String targetID);/**音频广播, 发送Invite请求异常*/void ntsOnInviteAudioBroadcastException(String sourceID, String targetID, String errorInfo);/**音频广播, 等待Invite响应超时*/void ntsOnInviteAudioBroadcastTimeout(String sourceID, String targetID);/**音频广播, 收到Invite消息最终响应*/void ntsOnInviteAudioBroadcastResponse(String sourceID, String targetID, int statusCode, SessionDescription sessionDescription);/** 音频广播, 收到BYE Message*/void ntsOnByeAudioBroadcast(String sourceID, String targetID);/** 不是在收到BYE Message情况下, 终止音频广播*/void ntsOnTerminateAudioBroadcast(String sourceID, String targetID);
}
GBSIPAgentDeviceControlListener主要系GB28181设备控制相关,比如远程启动、云台控制:
public interface GBSIPAgentDeviceControlListener {/** 收到远程启动控制命令*/void ntsOnDeviceControlTeleBootCommand(String deviceId, String teleBootValue);/** 云台控制*/void ntsOnDeviceControlPTZCmd(String deviceId, String typeValue);
}
GBSIPAgentQueryCommandListener主要系GB28181查询命令,如预置位查询:
public interface GBSIPAgentQueryCommandListener {/** 设备预置位查询*/void ntsOnDevicePresetQueryCommand(String fromUserName, String fromUserNameAtDomain, String sn, String deviceId);
}
GBSIPAgentTalkListener主要系GB28181语音对讲相关处理:
public interface GBSIPAgentTalkListener {/**收到s=Talk 语音对讲*/void ntsOnInviteTalk(String deviceId, SessionDescription sessionDescription);/**发送talk invite response 异常*/void ntsOnTalkInviteResponseException(String deviceId, int statusCode, String errorInfo);/** 收到CANCEL Talk INVITE请求*/void ntsOnCancelTalk(String deviceId);/** 收到Ack*/void ntsOnAckTalk(String deviceId);/** 收到Bye*/void ntsOnByeTalk(String deviceId);/** 不是在收到BYE Message情况下, 终止Talk*/void ntsOnTerminateTalk(String deviceId);/** Talk会话对应的对话终止, 一般不会出发这个回调,目前只有在响应了200K, 但在64*T1时间后还没收到ACK,才可能会出发收到这个, 请做相关清理处理*/void ntsOnTalkDialogTerminated(String deviceId);
}
GBSIPAgentPlaybackListener系历史视音频回放相关:
public interface GBSIPAgentPlaybackListener {void ntsOnInvitePlayback(long var1, String var3, SessionDescription var4);void ntsOnPlaybackInviteResponseException(long var1, String var3, int var4, String var5);void ntsOnCancelPlayback(long var1, String var3);void ntsOnAckPlayback(long var1, String var3);void ntsOnPlaybackMANSRTSPPlayCommand(long var1, String var3);void ntsOnPlaybackMANSRTSPPauseCommand(long var1, String var3);void ntsOnPlaybackMANSRTSPScaleCommand(long var1, String var3, double var4);void ntsOnPlaybackMANSRTSPSeekCommand(long var1, String var3, double var4);void ntsOnPlaybackMANSRTSPTeardownCommand(long var1, String var3);void ntsOnByePlayback(long var1, String var3);void ntsOnTerminatePlayback(long var1, String var3);void ntsOnPlaybackDialogTerminated(long var1, String var3);
}
GBSIPAgentDownloadListen系历史视音频下载相关:
public interface GBSIPAgentDownloadListener {void ntsOnInviteDownload(long var1, String var3, SessionDescription var4);void ntsOnDownloadInviteResponseException(long var1, String var3, int var4, String var5);void ntsOnCancelDownload(long var1, String var3);void ntsOnAckDownload(long var1, String var3);void ntsOnDownloadMANSRTSPScaleCommand(long var1, String var3, double var4);void ntsOnByeDownload(long var1, String var3);void ntsOnTerminateDownload(long var1, String var3);void ntsOnDownloadDialogTerminated(long var1, String var3);
}
对应GB28181相关接口调用相关设计如下:
/** SmartPublisherJniV2.java* Author: https://daniusdk.com*/
/*** 设置GB28181 RTP Sender** @param rtp_sender_handle, CreateRTPSender返回值* @param rtp_payload_type, 对于GB28181 PS, 协议定义是96, 具体以SDP为准, RFC 3551有定义* @param encoding_name, 编码名, 请参考 RFC 3551, 当前仅支持: "PS", 其他值返回失败* @return {0} if successful*/
public native int SetGB28181RTPSender(long handle, long rtp_sender_handle, int rtp_payload_type, String encoding_name);/*** 设置GB28181 RTP 收到的音频包回调* @param handle* @param audio_packet_callback* @return*/
public native int SetGB28181ReceiveAudioPacketCallback(long handle, NTAudioPacketCallback audio_packet_callback);/*** 启动 GB28181 媒体流** @return {0} if successful*/
public native int StartGB28181MediaStream(long handle);/*** 停止 GB28181 媒体流** @return {0} if successful*/
public native int StopGB28181MediaStream(long handle);
总结
作为公共安全视频监控联网系统的国家标准,GB28181为不同厂家、不同类型的视频监控设备规定了统一的通信标准和技术规范。这使得各种品牌和型号的设备能够轻松实现互联互通,打破了以往设备之间因通信协议差异而形成的信息壁垒。无论是海康、大华等大型安防企业的设备,还是其他小型厂商的产品,只要符合 GB28181 标准,都可以接入到同一个监控网络中,便于统一管理和调度。遵循开放式架构的原则,具有良好的可扩展性,并且与其他相关标准(如 ONVIF、PSI 等)具有一定的兼容性。这为系统的集成和融合提供了便利,在实际应用中,可以根据需求将不同标准的设备和系统进行整合,提高了系统的灵活性和适应性。
相关文章:

GB/T28181-2022规范解读、应用场景和技术实现探究
GB/T28181-2022和GB/T28181-2016区别 GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》与 GB/T28181-2016 相比,主要有以下区别: 术语和定义方面: 术语删减:GB/T28181-2022 删除了 “联网系统信息”“数…...

Docker容器间链路管理
Docker容器是一个轻量级的、可移植的软件打包技术,它允许开发者将应用程序及其依赖项打包到一个独立的容器中,然后发布到任何支持Docker的环境中运行。容器是完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。 可以将…...

python画图|在三维空间的不同平面上分别绘制不同类型二维图
【1】引言 前序已经完成了基础的二维图和三维图绘制教程探索,可直达的链接包括但不限于: python画图|3D参数化图形输出-CSDN博客 python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客 在学习过程中,发现一个案例࿱…...

与ai一起作诗(《校园清廉韵》)
与ai对话犹如拷问自己的灵魂,与其说ai助力还不如说在和自己对话。 (笔记模板由python脚本于2024年10月19日 19:18:33创建,本篇笔记适合喜欢python和诗歌的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free&…...

python matplotlib
一、图形函数 函数名称描述Bar绘制条形图Barh绘制水平条形图Boxplot绘制箱型图Hist绘制直方图his2d绘制2D直方图Pie绘制饼状图Plot在坐标轴上画线或者标记Polar绘制极坐标图Scatter绘制x与y的散点图Stackplot绘制堆叠图Stem用来绘制二维离散数据绘制(又称为火柴图&…...

秋招面试题记录_半结构化面试
c八股(可能问的多一点) 1.简单说说C11语法特性 答: 1.auto以及decltype自动类型推导,避免手动声明复杂类型,减少冗长代码提升了可读性和安全性。 2.智能指针 自动释放内存 (具体说说) 有shared和unique 差异主要体现在所有权、内存开销、…...

Java项目-基于springboot框架的疫苗接种管理系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...

Android 12.0进程保活白名单功能实现
在Android 12.0系统中,实现进程保活白名单功能是为了确保某些重要的应用程序即使进入后台也能长时间保持运行状态,不被系统自动杀死。这一功能的实现涉及多个核心类和文件,以下是具体的实现步骤和核心功能分析: 一、实现步骤 …...

vscode 功能、设置备忘
2024年10月18日 crtl p 按文件名搜索,输入> 开始搜索命令 设置文件显示过滤和搜索过滤: ctrlp 输入 >settings 选择Preferences:Open Settings(UI),搜索exclude 配置 Files Exclude 修改显示过滤 配置 Search Exclude 修…...

错误 Failed to connect to xx.xx.xx.xx port xx: No route to host
Failed to connect to xx.xx.xx.xx port xx: No route to host 系统环境: Oracle Cloud(OCI)Ubuntu20.4 问题: 连接本机IP正常访问,连接内网ip可正常访问,但连接外网IP报错:Failed to conne…...

Redis环境的搭建
Redis环境的搭建可以分为Linux系统和Windows系统两种情况。 一、Linux系统下Redis的搭建 1. 安装前准备 确保Linux系统已安装GCC环境,可以使用yum install gcc-c命令安装。下载Redis安装包,例如redis-6.2.6.tar.gz,并将其上传到Linux服务器…...

Git Push(TODO)
最近经常碰到GIT push不上去的问题。到处求人解决也真是尴尬,想自己看看,所以刚刚在github上建了一个仓,试了下。结果如下: 暂时可能还不行,因为数据都是加密的,没法看到具体GIT的交互信息。。。 后面再想办…...

Java工具类--截至2024常用http工具类分享
1. Apache HttpClient Apache HttpClient是一个功能强大的、灵活的HTTP客户端,用于发送请求和接收响应。它支持HTTP/1.1和HTTP/2协议,并且提供了丰富的配置选项。适用于需要高度可配置性和扩展性的场景。 2.OkHttp OkHttp是一个高效的HTTP客户端&…...

C#学习笔记(五)
C#学习笔记(五) 第 三 章 基本语句以及语法一、控制台的基本语句使用1. 方法重载2. 输入输出3.字符串格式化 二、赋值运算符、算数运算符、比较运算符三、数据类型转换常用方法使用、比较和选择1. 自动类型转换(隐式转换)2. 强制类型转换2.1 数值类型之间…...

视频云存储/音视频流媒体视频平台EasyCVR视频汇聚平台在欧拉系统中启动失败是什么原因?
视频监控/视频集中存储/磁盘阵列EasyCVR视频汇聚平台具备强大的拓展性和灵活性,支持多种视频流的外部分发,如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等,这为其在各种复杂环境下的部署提供了便利。 安防监控EasyCVR视频汇聚平…...

spring源码中的,函数式接口,注解@FunctionalInterface
调用方 /org/springframework/beans/factory/support/AbstractBeanFactory.java:333sharedInstance getSingleton(beanName, () -> {try {return createBean(beanName, mbd, args);}catch (BeansException ex) {// Explicitly remove instance from singleton cache: It mi…...

分布式系统中的Session共享:实现跨服务器的用户登录信息同步
引言 在现代Web应用中,分布式架构已经成为主流。随着业务规模的扩大,单台服务器往往难以承载所有的请求,因此需要多台服务器协同工作来提供服务。然而,在这种分布式环境中,如何确保用户的登录状态能够在不同的服务器之…...

【LeetCode每日一题】——1588.所有奇数长度子数组的和
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 前缀和 二【题目难度】 简单 三【题目编号】 1588.所有奇数长度子数组的和 …...

自定义多级联动选择器指南(uni-app)
多端支持:可以运行在H5、APP、微信小程序还是支付宝小程序,都可以轻松使用改组件。自定义配置:您可以根据需要配置选择器的级数,使其适应不同的数据结构和用例。无限级联:此组件支持无限级联选择,使您能够创…...

RHCE笔记-SSH服务
一.对称加密与非对称加密 1.1对称加密 1. 原理 对称加密是指加密和解密使用相同的密钥。也就是说,发送方和接收方在通信之前需要共享一个秘密密钥,使用这个密钥对数据进行加密和解密。 2. 常见算法 AES (Advanced Encryption Standard):…...

java实现文件分片上传并且断点续传
文章目录 什么是断点续传后端实现JAVA实现大文件分片上传断点续传 什么是断点续传 用户上传大文件,网络差点的需要历时数小时,万一线路中断,不具备断点续传的服务器就只能从头重传,而断点续传就是,允许用户从上传断线的地方继续传…...

leetcode hot100 之【LeetCode 15. 三数之和】 java实现
LeetCode 15. 三数之和 题目描述 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c 使得 a b c 0?请你找出所有和为 0 且不重复的三元组。 注意: 答案中的三元组可以按任意顺序组织。在 n…...

mysql学习教程,从入门到精通,sql序列使用(45)
sql序列使用 在SQL中,序列(Sequence)是一种数据库对象,用于生成唯一的数值,通常用于自动递增的主键。不同的数据库管理系统(DBMS)对序列的支持和语法可能有所不同。以下是一些常见的DBMS&#…...

Java 中的异常处理、常见异常、如何自定义异常类、Checked 和 Unchecked 异常的区别、如何处理数据库事务中的异常
文章目录 1. 异常的基本概念与处理方法定义常见异常类补充说明: 异常处理方法示例 2.如何自定义异常类步骤示例 3. Java 中的 Checked 和 Unchecked 异常的区别Checked 异常Unchecked 异常示例 4. 如何处理数据库事务中的异常常见场景处理方式示例讨论 总结 异常是指…...

6.1 特征值介绍
一、特征值和特征向量介绍 本章会开启线性代数的新内容。前面的第一部分是关于 A x b A\boldsymbol x\boldsymbol b Axb:平衡、均衡和稳定状态;现在的第二部分是关于变化的。时间会加入进来 —— 连续时间的微分方程 d u / d t A u \pmb{\textrm{d}…...

Vue01
前端最新Vue2Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HV4y1a7n4?spm_id_from333.788.videopod.episodes&vd_source016213ecd945408976ff307a6bda30…...

MySQL - Navicat自动备份MySQL数据
对于从事IT开发的工程师,数据备份我想大家并不陌生,这件工程太重要了!对于比较重要的数据,我们希望能定期备份,每天备份1次或多次,或者是每周备份1次或多次。 如果大家在平时使用Navicat操作数据库&#x…...

系统分析师20:【案例特训专题3】系统设计与运维
1 Web开发 1.1 Web开发涉及技术的综合应用 高性能高可用可维护应变安全 1.2 Web系统架构演化过程 1.2.1 单台机器到数据库与Web服务器分离 早期的web系统往往以单台机器形态出现,web网站无论是前端还是后台数据库都部署在一台服务器上,部署起来比较…...

Linux 局域网中使用NTP配置时间服务
一:NTP 时间服务器配置 前提: 局域网环境中一般不能直接使用互联网上提供的时间服务器,例如ntp.aliyun.com。所以可以使用局域网中的一个服务器时间为基准,其他服务器的时间都和他保持一致。 1、将服务器的系统时间配置为时间源…...

Shiro会话管理和加密
一、会话相关API及会话使用 Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Web容器Tomcat),可以在JavaSE和JavaEE环境中使用。会话相关API主要包括: Subject.getSession(): 获取当前用户的会话࿰…...