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

GB/T28181流媒体相关协议详解

GB/T28181流媒体相关协议详解

文章目录

  • GB/T28181流媒体相关协议详解
    • 1 GB/T28181协议中使用的应用层协议介绍
    • 2 实时视频点播协议交互流程
      • 2.1 设备注册
      • 2.2 设备保活
      • 2.3 视频播放
    • 总结

本文主要主要针对28181协议中视频流的部分,来阐述视频流通过28181协议如何进行视频会话和视频传输的。本文主要介绍28181协议中引用的协议、视频封装格式、实时视频点播协议交互流程等内容。

1 GB/T28181协议中使用的应用层协议介绍

28181协议规范中涉及到SIP、SDP、RTP、RTCP、RTSP等应用层协议,其中SIP+XML主要用于消息交互,SIP+SDP主要用户视频会话,RTP/RTCP主要用于媒体流传输控制,RTSP主要用户录像回放。有关各种协议的详细介绍可参考如下文章,本文不做详细介绍:

  • SIP协议:参照文章 sip协议介绍
  • SDP协议:参照文章 h264和h265视频流SDP描述详解
  • RTCP/RTCP:参照文章 RTP/RTCP协议详解
  • RTSP:参照文章 RTSP协议详解

为方便以后查看,关注,发送消息获取相关文章,比如:发送RTP,可获取RTP协议的介绍。

2 实时视频点播协议交互流程

本章节主要针对实时视频点播协议进行详细介绍,28181发起视频会话前,首先视频终端设备需要注册到国标平台,国标平台需要查询到设备的摄像头ID,根据摄像头ID发起视频会话,进行音视频传输。
本章节抓取的协议的实验环境如下:

  • 视频终端设备:海康威视的IPC
  • 国标平台:EasyGBS

有关国标平台EasyGBS的使用介绍,后面会单独出一篇文章进行介绍。
28181传输层支持TCP和UDP,视频申请支持主动模式和被动模式,本文主要以常用的UDP被动模式为例,说明交互流程,后续文章会详细介绍视频主被动模式以及基于TCP的传输。

2.1 设备注册

GB/T 28181协议介绍 的文章中已经介绍了设备注册流程,设备注册流程图如下:
1

  1. REGISTER不携带鉴权信息消息实例如下:
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK873415819
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>
Call-ID: 924327262
CSeq: 1 REGISTER
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0

协议详解:

  • 第1行:SIP消息的方法是REGISTER,34020000002000000001是国标服务器的国标ID,也就是EasyGBS端国标ID,具体国标ID的编码方法可以参考GB/T 28181—2022中的附录D。3402000000指的是国标服务器的域国标ID,SIP/2.0指的是SIP协议版本。
  • 第2行:为Via头,Via头中包含了发送请求方的相关信息,SIP/2.0/UDP表示使用的是2.0版本的SIP协议,使用的传输协议是UDP,也可以使用TCP协议;10.45.12.141:5060为请求发送方的IP、port;Via头包含branch参数,不能重复,branch是一个事务ID(Transaction ID),用于区分同一个UA所发起的不同Transaction,遵循IETF RFC3261规范的实现;rport字段表示使用rport机制路由响应,详情见IETF RFC35818,一般为了nat穿越,内网IPC向公网国标平台注册时,需要带有此字段,此时国标服务器会把从请求的UDP包中获取发送方外网对应的IP和端口,在响应中返回给发送方。
  • 第3行:From头,From头中包含了请求发送方的逻辑标识,在GB28181协议中是发送请求的设备国标ID和域名。tag参数是为了身份认证的,值为随机数。
  • 第4行:To头,To头在SIP协议中是为了标明请求接收方的逻辑标识的,在GB28181协议中填写的是发送请求的设备国标ID和域名。
  • 第5行:Call-ID头,Call-ID头是全局唯一的,在同一个session中保持一致,在不同session中不同。
  • 第6行:CSeq头,CSeq头用于标识命令顺序,序号部分为无符号整数,最大值为2^31。序号起始值是随机的,后续在同一个session中依次递增。ACK和CANCLE中的CSeq需与INVITE中的Cseq保持一致。
  • 第7行:Contact头,Contact头包含源的URI信息,用来给响应消息直接和源建立连接用。在GB28181协议中为SIP设备编码@源IP地址:端口。
  • 第8行:Max-Forwards头,Max-Forwards头用于设置包最大中转次数,默认是70。
  • 第9行:User-Agent头,User-Agent头用于设置关于UA的信息,用户可以自定义。
  • 第10:Expires头,Expires头表示超时时间。
  • 第11行:Content-Length头,Content-Length头表示消息体长度,无消息体赋值0。
  1. 认证失败响应消息实例如下:
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK873415819
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>;tag=53631846
CSeq: 1 REGISTER
Call-ID: 924327262
User-Agent: EasyGBS v200511
Content-Length: 0
Contact: <sip:34020000002000000001@10.45.12.83:5061>
WWW-Authenticate: Digest realm="3402000000",nonce="29eb6d344c29a70a0997d173e937e693"

协议详解如下:

  • 第1行:SIP/2.0 401 Unauthorized,表示认证失败。
  • 第2行:Via头,因为请求带有rport,所以响应中带有rport和received,表示国标服务器通过udp包解析出来的发送端的PORT和IP分别赋值给rport和received。
  • 第3行与第四行:与请求类似
  • 第5行:CSeq头,与请求类似,表示服务端命令序列
  • 第6行:Call-ID头,与请求一致
  • 第7行:User-Agent头,与请求类似,表示服务端UA信息
  • 第8行:Content-Length头,与请求类似,表示消息体长度
  • 第9行:Contact头,与请求一致
  • 第10行:WWW-Authenticate头,WWW-Authenticate头用于配置服务端支持的认证方式及认证参数,这里认证方式为digest。
  1. REGISTER带有鉴权信息消息实例如下:
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK864745657
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>
Call-ID: 924327262
CSeq: 2 REGISTER
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Authorization: Digest username="34020000001110000002", realm="3402000000", nonce="29eb6d344c29a70a0997d173e937e693", uri="sip:34020000002000000001@3402000000", response="42b636f290984b1d796907c882e4d5a8", algorithm=MD5
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0

这里相比第一次发送的REGISTER消息,多了Authorization字段,其字段内容为digest认证信息。

  1. 注册成功响应消息实例如下:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK864745657
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>;tag=424631862
CSeq: 2 REGISTER
Call-ID: 924327262
User-Agent: Easy SIP Server
Content-Length: 0
Date: 2022-11-07T17:22:22.710
Expires: 3600
Contact: <sip:34020000002000000001@10.45.12.83:5061>

头字段解析同上文,这里不做过多描述。

2.2 设备保活

28181协议中规定了保活的消息类型:Keepalive,主要用于设备端向国标平台定时汇报设备状态,进而实现服务器与设备之间的心跳检测机制,一般当国标平台在两个心跳周期未接收到心跳,则认为设备出下线,所以为了保证设备与国标平台之间的正常通信,设备端需要定时向国标平台发送保活协议,协议流程如下:
1

  1. 保活消息实例如下:
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK999920179
From: <sip:34020000001110000002@3402000000>;tag=1336295153
To: <sip:34020000002000000001@3402000000>
Call-ID: 1577903431
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length:   164<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>Keepalive</CmdType>
<SN>1822</SN>
<DeviceID>34020000001110000002</DeviceID>
<Status>OK</Status>
</Notify>

sip方法采用MESSAGE,sip头前文已经详细介绍了,这里针对消息体进行详解。
MESSAGE消息头中Content-type头为Content-type: Application/MANSCDP+xml,表示保活信息报送命令采用MANSCDP(监控报警联网系统控制描述协议,Monitoringand Alarming Network System Control Description Protocol)协议格式定义,消息体详细解释见GB/T28181-2022 A.2.5通知命令-状态信息报送部分,GB/T28181-2022可通过关注,发送:协议规范,来获取。

  • xml中Notify元素表示此消息是通知命令
  • xml中CmdType表示命令类型,这里为Keepalive
  • xml中的SN表示序列号
  • xml中的DeviceID表示设备ID
  • xml中的Status表示设备状态,这里为OK
  1. 保活消息响应实例如下:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK999920179
From: <sip:34020000001110000002@3402000000>;tag=1336295153
To: <sip:34020000002000000001@3402000000>;tag=698636847
CSeq: 20 MESSAGE
Call-ID: 1577903431
User-Agent: Easy SIP Server
Content-Length: 0

2.3 视频播放

前文已经介绍了视频播放的协议流程,如下图所示:
1

  1. 视频播放请求INVITE实例如下:
INVITE sip:34020000001320000002@10.45.12.141:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK735682946
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>
Call-ID: 787682407
CSeq: 3 INVITE
Max-Forwards: 70
User-Agent: Easy SIP Server
Content-Length: 218
Content-Type: application/sdp
Contact: <sip:34020000002000000001@10.45.12.83:5061>
Subject: 34020000001320000002:0200000002,34020000002000000001:0v=0
o=34020000002000000001 0 0 IN IP4 10.45.12.83
s=Play
c=IN IP4 10.45.12.83
t=0 0
m=video 50000 RTP/AVP 96 98 97
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
y=0200000002

SIP方法为INVITE,消息体为SDP,这里对请求的SDP进行详细介绍:

  • V表示协议版本,默认直接赋值0
  • O表示会话所有者标识(originator and session identifier),o=<用户名> <session id> <会话版本> <网络类型><地址类型> <地址>,国标协议中,用户名为国标ID,这里为服务器ID,session id为0,会话版本为0,网络类型为IN,地址类型为IPv4,地址为服务器IP地址。
  • S表示会话名称,s=<session name> <session description>,会话名称默认为Play,会话描述默认为空。
  • C表示数据连接描述,c=<networktype> <address type> <connection address>,
    网络类型为IN,地址类型为IPv4,地址为服务器IP地址。
  • t表示会话活动时间,t=<start time> <stop time>,实时视频时都赋值为0。
  • m表示媒体描述,描述媒体类型、接收媒体流端口、传输层协议、负载类型等,媒体类型采用video表示传输视频或音视频混合,采用audio表示纯音频;传输方式采用RTP/AVP表示采用RTP over UDP,采用TCP/RTP/AVP表示传输层协议采用RTP over TCP,本实例中表示申请的媒体类型为音视频/视频,接收媒体流的端口为50000,传输层协议为RTP over UDP,负载类型为96、98、97
  • a表示媒体扩展属性,a=recvonly表示只接受媒体流,a=rtpmap表示rtp映射信息描述,这里a=rtpmap:96 PS/90000表示传输的PS流的payload为96,采样率为90000,a=rtpmap:98 H264/90000表示传输的H264流的payload为98,采样率为90000,a=rtpmap:97 MPEG4/90000表示传输的MPEG4流的payload为97,采样率为90000。
  • y表示SSRC值,为十进制整数字符串,格式为:dddddddddd,第一位为0表示实时流,为1表示历史流,第2-6位为国标ID的4-8位,第7-10位作为流媒体同步信源表示。

28181中规定了SDP各字段的含义,具体可参照GB/T28181-2022 附录F。服务端发送INVITE携带的媒体信息,表示国标服务器支持的流媒体。

  1. INVITE响应消息实例:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK735682946
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>;tag=140553725
Call-ID: 787682407
CSeq: 3 INVITE
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Content-Type: application/sdp
User-Agent: IP Camera
Content-Length:   199v=0
o=34020000001110000002 261 261 IN IP4 10.45.12.141
s=Play
c=IN IP4 10.45.12.141
t=0 0
m=video 15060 RTP/AVP 96
a=setup:active
a=sendonly
a=rtpmap:96 PS/90000
a=filesize:0
y=0200000002

响应中的SDP描述的流媒体信息表示IPC支持的流媒体格式及传输方式,IPC响应的SDP中,包含了a=setup:active,这个字段只在TCP传输中起作用,UDP可以忽略,对于TCP传输,包含此字段表示IPC主动连接国标服务器,如果为a=setup:passive表示IPC端为被动模式,由国标服务器发起TCP连接。
通过SDP可以看出,IPC发送的是PS封装的实时流,payload为96,采用UDP的传输模式,发送流的源端端口为15060。国标协议支持最广泛的流媒体封装协议为PS,有关PS的详细介绍可关注,发送:ps,获取相关文章。

  1. ACK消息实例:
ACK sip:34020000001320000002@10.45.12.141:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK672682961
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>;tag=140553725
Call-ID: 787682407
CSeq: 3 ACK
Max-Forwards: 70
User-Agent: Easy SIP Server
Content-Length: 0

SIP的ACK方法,通知IPC服务端已经准备好了,可以发送媒体流了。

  1. RTP/RTCP媒体流传输

通过视频会话可知,接下来IPC应该主动向国标服务器发送RTP流,RTP协议带的媒体流封装格式为PS,传输层协议为UDP,RTP源端地址为15060,目的端地址为50000,SSRC=0200000002,抓包协议实例如下:
1
从RTP解析上看,与视频会话交互的信息一致。

总结

GB/T28181协议经过多个版本的迭代,应用在音视频传输中,已经非常完善了,最新的协议版本已经支持TCP模式进行信令交互和音视频传输,还支持主被动模式,在跨网上也有很好的适应性。


关注,发送:28181,获取更多28181文章。

相关文章:

GB/T28181流媒体相关协议详解

GB/T28181流媒体相关协议详解 文章目录 GB/T28181流媒体相关协议详解1 GB/T28181协议中使用的应用层协议介绍2 实时视频点播协议交互流程2.1 设备注册2.2 设备保活2.3 视频播放 总结 本文主要主要针对28181协议中视频流的部分&#xff0c;来阐述视频流通过28181协议如何进行视频…...

十进制转二进制的算法代码 ← Python

【算法分析】 本算法需要用到的Python知识点&#xff1a; 1.求余%&#xff0c;整除 //。例如&#xff0c;7%21&#xff0c;7//23&#xff0c;而7/23.5。 2.Python列表的 append 及 pop 函数。 • append(x) 函数用于将 x 添加到现有列表中。 • pop() 函数默认移除列表中…...

智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管

一、背景分析 建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台&#xff0c;整合环境相关的数据&#xff0c;对接已建业务系统&#xff0c;将环境相关数据进行统一管理&#xff0c;结合GIS技术进行监测、监控信息的展现和挖掘分析&#xff0c;实现业务数据的快速…...

LeetCode 面试题 16.07. 最大数值

文章目录 一、题目二、C# 题解 一、题目 编写一个方法&#xff0c;找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。 示例&#xff1a; 输入&#xff1a; a 1, b 2 输出&#xff1a; 2 点击此处跳转题目。 二、C# 题解 找出最大的数&#xff0c;本质还是…...

PS 安装教程 2022版(全网最详细图文教程)

目录 一.简介 二.安装步骤 软件&#xff1a;PS版本&#xff1a;2022语言&#xff1a;简体中文大小&#xff1a;2.83G安装环境&#xff1a;Win10&#xff08;1903&#xff09;及以上版本&#xff0c;64位操作系统硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff0c;不支…...

[Python] OSError: [E050] Can‘t find model ‘en_core_web_sm‘.

OSError: [E050] Can’t find model ‘en_core_web_sm’. It doesn’t seem to be a Python package or a valid path to a data directory. 下载模型 python -m spacy download en_core_web_sm加载模型 import spacy# 加载英语模型 nlp spacy.load("en_core_web_sm&q…...

集合总结(Java)

Collection 常用方法 package com.test01;import java.util.ArrayList; import java.util.Collection; /*添加元素---boolean add(E e);移除元素---boolean remove(Object c);判断元素是否存在---boolean contains(Object c);*/ public class S {public static void main(Str…...

【ONE·Linux || 网络基础(一)】

总言 主要内容&#xff1a;简述网络传输流程&#xff08;TCP/IP五层模式概念认知&#xff0c;Mac地址、端口号、网络字节序等&#xff09;&#xff0c;演示socke套接字编程&#xff08;UDP模式&#xff09;。 文章目录 总言1、基础简述1.1、计算机网络背景1.2、认识网络协议&a…...

Day12力扣打卡

打卡记录 找出满足差值条件的下标 II&#xff08;双指针维护最大最小&#xff09; 链接 采用双指针保留间隔 indexDifference 进行遍历&#xff0c;求出慢指针对应一路遍历过来的最大值和最小值。 class Solution { public:vector<int> findIndices(vector<int>…...

SQL注入原理及思路(mysql)

数据库知识 mysql数据库 show database; #列出所有数据库 show tables; #列出所有表名 show columns from 表名; #列出表的列 select * from 表名 #查询数据库中某表的信息 select * from 表名 where 列xx #查询某表中符合列xx的信息 select * from 表名 order by 数字 #用于将…...

vue核心面试题汇总【查缺补漏】

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 很喜欢‘万变不离其宗’这句话&#xff0c;希望在不断的思考和总结中找到Vue中的宗&#xff0c;来解答面试官抛出的…...

使用WebStorm创建和配置TypeScript项目

创建 这里我用的是WebStorm 2019.2.2版本 首先&#xff0c;创建一个空项目 File -> New -> Project->Empty Project生成配置文件 自动配置&#xff1a; 打开终端输入tsc --init&#xff0c;即可自动生成tsconfig.json文件 手动配置&#xff1a; 在项目根目录下新建一…...

vue源码分析(四)——vue 挂载($mount)的详细过程

文章目录 前言一、使用RuntimeCompiler解析$mount的原因二、$mount 解析的详细过程1.解析挂载的#app执行了vm.$mount2. 通过$mount方法执行以下文件的mount方法3. 执行util工具文件夹中的query方法4. 执行query方法后返回$mount方法判断el是否是body5. 判断!options.render&…...

真机环境配置教程

1.下载安装包 https://developers.google.com/android/images 2.刷机教程 Xposed精品连载 | 一篇文章彻底搞定安卓刷机与Root 3.配置root...

新电脑第一次重启后蓝屏

新电脑第一次重启后蓝屏 悲惨事故&#xff0c;远程参加插电第一次开机&#xff0c;按“FNShiftF10”启动cmd窗口输入oobe\bypassnro 回车重启跳过网络连接&#xff0c;设置一个用户名密码设置为空&#xff0c;不设密码确定&#xff0c;进入系统软件操作磁盘操作&#xff08;磁盘…...

k8s statefulSet 学习笔记

文章目录 缩写: stsweb-sts.yaml创建sts扩缩容金丝雀发布OnDelete 删除时更新 缩写: sts 通过 kubectl api-resources 可以查到&#xff1a; NAMESHORTNAMESAPIVERSIONNAMESPACEDKINDstatefulsetsstsapps/v1trueStatefulSet web-sts.yaml apiVersion: v1 kind: Service met…...

gitlab 通过变量连接自建K8S

services:- docker:19.03.7-dind- golang:1.17.8-alpine3.15- docker:stable stages:- package- build and push docker image- deploy variables:KUBECONFIG: /etc/deploy/config build:tags:- k8simage: golang:1.17.8-alpine3.15stage: package# 只作用在main分支only:- mai…...

LuatOS-SOC接口文档(air780E)--mcu - 封装mcu一些特殊操作

常量 常量 类型 解释 mcu.UART number 外设类型-串口 mcu.I2C number 外设类型-I2C mcu.SPI number 外设类型-SPI mcu.PWM number 外设类型-PWM mcu.GPIO number 外设类型-GPIO mcu.I2S number 外设类型-I2S mcu.LCD number 外设类型-LCD mcu.CAM num…...

第14期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…...

【数据结构】优先级队列

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; PriorityQueue 1. 什么是优先级队列…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...