【音视频】编解码相关概念总结
NALU RTP PS流
三者总体关系
NALU在RTP中的应用:视频流的RTP传输通常将NALU作为基本的单元进行传输。每个RTP包携带一个或多个NALU,这些NALU包含了视频编码数据。RTP协议通过其头部信息(如时间戳、序列号等)帮助接收端重新排列和解码这些NALU
PS流和NALU的转化:PS流本质上是一个容器,它可以封装多个NALU。在将PS流通过网络传输时,通常会将其分解成一个个NALU,然后通过RTP传输。这意味着PS流在网络传输中的表现通常是通过RTP承载NALU来实现的(注意,一般在GB28181平台上,都是先将Nalu封装成PS流后,然后再通过RTP包进行发送)
RTP封装PS流:尽管PS流通常是MPEG-2的容器格式,但它也可以用来封装视频数据和音频数据。当使用RTP进行流传输时,PS流通常会被切分成RTP包进行发送。RTP负责将数据流化并以网络友好的方式进行传输,而PS流则可能作为RTP数据的内容进行封装
NALU
可以吧Nalu想象成视频编码数据中信封,编码器就是将编码后的视频数据封装成一个一个的Nalu,然后通过网络进行传输
NALU是视频编码(特别是H.264/H.265)中网络抽象层的单位。NALU是视频编码后生成的数据块,用于将编码数据从编码器传输到网络层(如RTP、RTSP等)。每个NALU包含一个完整的编码数据单元,可以独立解码(例如一个图像帧的部分)
主要功能:NALU中包含了视频编码的具体信息,比如图像帧的宏块、序列参数集、片段参数集等。NALU通常是H.264或H.265编码数据的基本传输单位
网络抽象层(NAL)作用分析
视频编码标准(也就类似H264 265)一般分为两个主要层次
- 视频编码层(VCL):VCL主要就是负责视频内容的压缩编码,例如预测、变换、量化、熵编码等核心编码算法都发生在这个层面。 VCL 产生的输出就是 编码后的视频数据,也就是我们常说的 视频码流
- 网络抽象层(NAL):负责 将 VCL 层产生的编码数据适配到各种不同的网络传输环境。 不同的网络传输协议(如 RTP, RTSP, MPEG-2 TS, HTTP 等)对数据的格式和传输方式有不同的要求。 NAL 的作用就是将 VCL 产生的原始码流 封装成符合特定网络协议要求的格式,以便在各种网络中可靠地传输
Nalu的结构
简单来说NALU就是由两个部分组成,分别是NALU头部信息以及NALU负载。头部信息主要包含了NALU类型等新,负载就是实际的编码数据
NALU主要功能以及编码数据类型
NALU 的核心功能就是 封装和组织编码后的视频数据,使其可以作为网络传输的基本单元
- 视频编码层NALU,该类NALU包含实际的视频编码内容,是构成视频流的主体部分
- 编码片段:常见的NALU类型,其中包含了图像帧的编码数。在真实的传输中,一个图像帧可能会被分割成多个silece nalu进行传输
- IDR图像:特殊的图像帧, 解码器可以独立解码IDR图像,不需要考虑之前的帧。IDR图像一般都是用于视频流的随机访问和错误恢复
- 非视频编码层的NALU,该NALU包含了解码器正常工作所需要的辅助信息,但是没有实际的视频帧数据
-
序列参数集 (SPS - Sequence Parameter Set): 包含了 序列级别 的解码参数,例如 视频的 profile、level、分辨率、帧率 等信息。 SPS 对于解码整个视频序列至关重要,通常在视频流的开始处发送一次,或者在视频参数发生变化时更新。
-
图像参数集 (PPS - Picture Parameter Set): 包含了 图像级别 的解码参数,例如 熵编码模式、slice 分割方式 等信息。 PPS 针对每个图像帧或一组图像帧有效,可以频繁更新。
-
补充增强信息 (SEI - Supplemental Enhancement Information): 包含了 与解码过程本身无关的辅助信息,例如 定时信息、显示信息、用户自定义数据 等。 SEI 信息对于解码器不是必需的,但可以用于增强视频播放体验或实现特定功能。
-
RTP
RTP类似于一条高速公路,专门用于快速、准时运送实时性极高的数据
RTP是一种用于实时数据传输的协议,尤其适用于音视频流的传输。它设计用于在网络中传输实时数据(如音频、视频),提供时间戳、序列号和控制信息,帮助接收方重新排序丢失的数据包
主要功能
在视频流传输中,RTP用于将视频数据(如NALU)封装并传输到接收方。RTP保证了数据的实时性和顺序,可以处理丢包、延迟等问题。每个RTP包通常包含一个或多个NALU,RTP包头提供时间戳和序列号等信息,帮助接收方恢复视频数据的时序
RTP协议特点
RTP 的设计目标是 实时性优先,而不是完全可靠性。 这意味着 RTP 尽力保证数据的及时送达和播放的流畅性,即使在网络条件不佳的情况下,可能会牺牲一些数据的完整性(例如,允许少量数据包丢失)
对于实时音视频应用(例如视频会议、在线直播),延迟 (Latency) 是一个非常关键的指标。 如果数据传输延迟过高,会导致音视频播放卡顿、画面和声音不同步等问题,严重影响用户体验。 RTP 的设计就充分考虑了实时性的需求,力求 最小化延迟
RTP的关键功能
-
时间戳 (Timestamping): RTP 包头中包含 时间戳字段。 时间戳记录了 RTP 数据包中第一个字节的采样时刻。 这个时间戳对于接收端 恢复音视频数据的时序 至关重要,主要用于:
-
同步播放: 接收端可以使用时间戳来 同步音频和视频流,确保音视频同步播放。
-
抖动处理: 网络传输中,数据包到达接收端的时间间隔可能会不均匀,产生抖动。 接收端可以使用时间戳来 平滑抖动,保证播放的流畅性。
-
-
序列号 (Sequence Numbering): RTP 包头中包含 序列号字段。 序列号用于 标识 RTP 数据包的发送顺序。 接收端可以使用序列号来:
-
数据包重排序: 在 IP 网络中,数据包可能不按发送顺序到达接收端。 序列号可以帮助接收端 将乱序的数据包重新排序,恢复原始的数据顺序。
-
检测数据包丢失: 通过检查序列号的连续性,接收端可以 检测到数据包的丢失,并采取相应的措施(例如,请求重传,或者在实时性要求较高的情况下,直接忽略丢失的数据包)。
-
-
控制信息 (Control Information) - RTCP: RTP 协议通常与 RTCP(RTP 控制协议 - RTP Control Protocol) 一起使用。 RTCP 协议与 RTP 协议 并行工作,但不传输实际的音视频数据,而是 传输控制信息,用于:
-
服务质量 (QoS) 反馈: RTCP 允许接收端向发送端 反馈网络状况和接收质量,例如 丢包率、延迟、抖动 等信息。 发送端可以根据 RTCP 反馈信息 动态调整编码参数或传输策略,以适应网络变化,优化服务质量。
-
会话管理: RTCP 可以用于 会话参与者的身份标识和管理,例如报告参与者信息、进行会话控制等。
-
RTP在视频流中的作用分析
NALU 封装: RTP 通常用于 封装视频编码后的 NALU (网络抽象层单元)。 每个 RTP 包的 负载 (Payload) 部分通常包含一个或多个 NALU。 这样,NALU 就被封装在 RTP 包中,可以通过网络进行传输
实时性和顺序保证 (尽力而为): RTP 协议 尽力保证数据的实时性和顺序,但它 不是一个完全可靠的协议。 RTP 协议本身 不提供重传机制 来保证数据包的可靠送达。 RTP 的重点在于 及时传输数据,即使在网络拥塞或不稳定的情况下,也尽量保证视频流的 连续性和流畅性,而不是追求 100% 的数据可靠性。 在网络条件较差时,可能会出现 丢包 或 延迟 等问题,但 RTP 的时间戳和序列号机制可以帮助接收端 最大限度地恢复视频数据的时序和完整性
RTP包头信息, RTP 包头中包含的关键信息(如 时间戳 和 序列号)对于接收端 恢复视频数据的时序 至关重要。 接收端可以利用这些信息进行同步播放、抖动缓冲等
PS流
PS流(Program Stream)是MPEG-2视频标准的一部分,通常用于封装和传输视频、音频、字幕等多媒体数据。它是一种容器格式,用于将多个媒体流(如视频流和音频流)组合成一个程序(program),以便于存储和传输。主要目的是将 视频、音频、字幕 等多种不同的媒体流 “打包” 成一个单一的 “节目” (Program),以便于 存储和传输。
主要功能
多媒体流复用,其可以就爱那个多个独立的媒体流(例如视频流、音频流、字符流以及其他辅助数据)组合成一个单一的、连续的数据流。该过程就类似于将不同的解码片段组合成一个完整节目
PS流在网络传输中会转换为RTP流(重点)
虽然 PS 流非常适合文件存储和物理介质传输,但它 不太适合直接用于网络传输,特别是 互联网等 IP 网络环境 中的 实时流媒体传输
-
面向文件,非面向数据包: PS 流是一种 连续的字节流格式,它没有被设计成易于分割成 网络数据包 的结构。 将其直接通过 IP 网络传输,需要进行额外的分包和重组,效率较低。
-
缺乏实时传输特性: PS 流 本身不具备 RTP 协议那样的时间戳、序列号和控制信息等实时传输特性。 在网络丢包或抖动的情况下,PS 流的抗丢包能力和时序恢复能力较弱,难以保证实时播放的流畅性。
PS流封装RTP包(重点)
在 网络流媒体应用 中,为了更好地适应 IP 网络的特点,并实现 低延迟、高效率、抗丢包 的实时传输,PS 流通常会被转换为 RTP 流
-
解封装 PS 流: 首先,将 PS 流解封装,提取出其中的 视频流 (例如 MPEG-2 视频码流) 和 音频流 等基本媒体流。
-
NALU 封装 (对于 H.264/H.265 视频): 如果视频流是 H.264 或 H.265 编码的,则将其 进一步解析为 NALU (网络抽象层单元)。 NALU 是更小的、更适合网络传输的编码数据单元。
-
RTP 封装: 将 NALU (或原始视频/音频数据) 封装到 RTP 包 中。 每个 RTP 包头会添加 时间戳、序列号 等 RTP 特有的信息。
-
通过 UDP/IP 网络传输: 将 RTP 包通过 UDP (用户数据报协议) 或 IP (互联网协议) 网络进行传输。 UDP 协议具有较低的延迟和较高的效率,更适合实时流媒体应用
I帧、P帧、B帧
基本概念
- I帧(关键帧):独立的帧,可以单独解码,无需参考其他帧。
- P帧(预测帧):依赖之前的I帧或P帧,通过预测编码减少数据量。
- B帧(双向预测帧):通过前后帧的双向预测来压缩数据,通常比P帧更加高效
I帧
I帧是视频编码中的关键帧,它是完全自包含的帧,可以独立解码,无需依赖其他帧。I帧是视频编码中的基本单元,通常作为一个完整的图像进行存储(参考电影24帧中关键帧理解)
主要特点总结
- I帧通过对每个像素点进行编码来表示图像,压缩方式较为简单,通常使用离散余弦变换(DCT)
- 因为I帧不依赖其他帧,它能够恢复图像的完整信息,所以解码时不需要任何额外的数据
- I帧通常占用较大的文件大小,因为它包含了完整的图像信息,而不像P帧和B帧那样依赖其他帧的数据来减少冗余
主要用途
- I帧通常用于视频流的切换点、视频文件的开始或其他需要快速恢复的地方。
- 在视频播放过程中,I帧可以作为参考帧来帮助解码后续的P帧和B帧。
P帧
P帧是通过参考之前的I帧或P帧进行编码的,它包含了与前面帧的差异信息。P帧只存储与前一帧的变化部分(例如运动向量),因此能大大减少数据量
主要特点
- P帧依赖于前面的I帧或P帧。它通过运动补偿和差异编码的方法,只记录与参考帧的不同之处。
- P帧的编码方式相较于I帧要高效一些,但比B帧要少些。它通常较小,并且需要通过前面的帧来解码。
- 通过对比当前帧和参考帧的不同,P帧减少了冗余信息,压缩效率较高。
主要用途
- P帧用于减少视频中的冗余信息,通过参考前面的帧来压缩数据。视频流中I帧和P帧的交替使用,使得视频编码更加高效。
- 在视频流播放过程中,P帧通常依赖于前面的I帧或P帧来恢复图像内容。
B帧
B帧是通过参考前后两帧(I帧或P帧)来预测当前帧的信息。B帧通过双向运动估计来实现比P帧更高效的压缩,能够进一步减少数据量
主要特点
- B帧与P帧的不同之处在于,它不仅依赖于前面一帧的数据,还可以参考后续的帧。它使用双向预测来求解当前帧的内容,因此能够达到更高的压缩率。
- 因为B帧需要同时依赖前后的帧,所以解码时的复杂度会更高,且B帧不能单独解码。
- B帧的数据量最小,因为它依赖于前后两帧的运动估计。
主要用途
- B帧是视频编码中压缩效率最高的帧类型,适用于大多数的非实时视频流和大文件的编码。
- 因为B帧需要参考前后帧,它通常被用于视频编码的中间部分,能够有效地提高编码效率。
编码器与解码器
基本概念
- 编码器(Encoder):负责将原始音视频数据转换为压缩格式(例如H.264、HEVC等)。
- 解码器(Decoder):负责将压缩后的数据还原为原始音视频流。
编码器
编码器的主要作用是将原始的音视频信号(如未压缩的音频或视频)转换成压缩的格式(如H.264, HEVC, AAC等)。这个过程叫做“编码”或“压缩”,它减少了数据的大小,从而便于存储和传输
工作原理总结
-
帧分割:首先,视频或音频数据会被分割成单独的帧。视频通常以图像帧为单位进行分割,而音频则通常以时间为单位进行分割(例如采样率为44.1kHz的音频会以每秒44100个采样点进行处理)。
-
变换和量化:对每一帧进行数学变换(例如DCT—离散余弦变换,或离散傅里叶变换等),将图像或音频信号转换为频域数据。然后,进行量化操作,将信号值限制在一定范围内,从而丧失一些精度,减少数据量。
-
预测和差分:对于视频编码,编码器会基于当前帧与前一帧的差异(运动估计)来进行编码。例如,视频编码中的P帧和B帧通过预测前后帧的差异来达到更高的压缩比。
-
编码:通过特定的算法对信号进行编码。例如,H.264使用的CABAC(Context-based Adaptive Binary Arithmetic Coding)或者CAVLC(Context Adaptive Variable Length Coding)进行压缩。音频编码则使用如AAC中的MDCT(Modified Discrete Cosine Transform)等变换和编码方法。
-
输出压缩数据:最终编码器将经过压缩处理的音视频数据输出为某种格式的压缩码流,常见的编码格式有H.264、HEVC(H.265)、VP9、AAC、MP3等。
解码器
解码器的作用是将压缩的音视频数据转换回原始的音视频信号。它是编码器的反向操作,目标是恢复出尽可能接近原始数据的内容。解码器通常用于播放压缩视频文件、音频文件或流媒体内容
工作原理总结
-
接收压缩数据:解码器接收来自存储或网络传输的压缩数据流(例如,H.264、HEVC、AAC等格式的文件或流)。
-
解码:解码器首先对压缩的数据进行解码操作,这个过程包括:
- 运动补偿:在视频解码中,解码器会根据编码过程中计算出的运动矢量和参考帧恢复视频帧的内容。
- 逆变换和反量化:解码器将接收到的频域数据通过逆变换(如逆DCT)转回时域数据,并通过反量化过程恢复丢失的一部分精度。
- 预测还原:对于P帧和B帧,解码器根据前后帧的参考信息恢复图像数据。
-
图像或音频输出:经过解码的数据将转换为可播放的音频信号或视频帧。例如,视频信号可以恢复为帧序列,音频信号则恢复为一系列声音波形。
-
显示或播放:对于视频解码,解码器将输出的帧传递给显示设备进行呈现;对于音频解码,输出的音频数据传递给音响设备进行播放。
码流
经过压缩和编码的音视频数据流。它包含了编码后的视频信息和音频信息。
视频码流
视频码流通常是由一系列编码后的帧(I帧、P帧、B帧)组成,它们按照一定的顺序(例如,GOP——图像组)排列。视频码流的结构包括以下几个主要部分
-
帧数据:包括压缩后的视频帧数据(例如H.264编码中的NAL单元),表示视频每一帧的内容。每一帧可以是I帧(关键帧)、P帧(预测帧)或B帧(双向预测帧)。
-
NAL单元(Network Abstraction Layer Units):在H.264/HEVC等编码标准中,视频码流被分割成多个NAL单元。每个NAL单元包含一个或多个编码后的视频数据,负责存储视频帧的压缩信息。NAL单元是视频码流的基本组成单元。
-
头部信息:包括一些控制信息,如编码参数、分辨率、帧率、参考帧信息等,这些用于指导解码器如何正确解码视频流。
-
时间戳:码流中通常会有时间戳,用来指示视频帧的展示时间和播放顺序。
-
封装格式:视频码流通常会被封装成容器格式,如 MP4、MKV、AVI 等,这些容器格式将视频流、音频流、字幕流等多个媒体流组合在一起,便于存储和传输。
音频码流
音频码流则是经过音频编码(如 AAC、MP3、Opus 等)处理后产生的二进制数据流。它的结构一般包括
-
帧数据:音频码流包含一系列音频帧(例如,AAC中的音频帧)。每一帧可能包含一段音频的压缩信息。
-
头部信息:包括音频格式、采样率、通道数、比特率等音频的基本属性。
-
时间戳:音频码流同样会包含时间戳,以便音频能够与视频同步播放。
-
封装格式:音频流也常常与其他多媒体数据一起封装在容器文件中,如 MP4、MKV、FLV 等。
视频码流主要类型
- H.264/AVC(Advanced Video Coding):一种广泛使用的视频编码标准,压缩效率较高,广泛应用于网络视频流、蓝光光盘、高清电视等。
- HEVC/H.265(High Efficiency Video Coding):H.264的继任者,提供比H.264更高的压缩效率,广泛用于4K视频压缩。
- VP9:Google推出的视频编码格式,广泛应用于YouTube等流媒体平台。
- AV1:新的开源视频编码标准,提供比HEVC和VP9更高的压缩效率,主要用于高质量视频流和Web视频播放。
音频码流主要类型
- AAC(Advanced Audio Codec):一种高效的音频编码格式,广泛应用于流媒体和广播。
- MP3(MPEG Audio Layer III):早期广泛使用的音频编码格式,压缩效率较低,但依然广泛存在。
- Opus:一种低延迟音频编解码器,特别适用于实时通信(如VoIP)和音频流。
SEI
概念
SEI是视频流中附加的信息,通常用于增强视频质量、实现更高效的编码或者提供额外的传输信息。它通常不会影响解码,但对于解码后的显示或者处理有帮助。
视频编码中的作用
- 显示与呈现:包括视频播放中的显示特性、颜色空间信息、色度调整等,用于增强视频的显示效果。
- 后期处理:提供用于后期视频处理的参数,例如去噪、锐化、增强对比度等。
- 传输优化:在网络传输过程中,通过SEI提供一些动态调整参数或网络条件信息,从而优化传输质量。
- 编码优化:在编码阶段,SEI可以传输一些额外的辅助信息,帮助解码器或显示设备更好地适应编码特性,改善视频质量。
与Nalu的关系
在H.264和HEVC等编码标准中,SEI通常以**NALU(Network Abstraction Layer Units)**的形式存在。NALU是视频码流的基本单位,用来包装各种编码信息,而SEI则是被包装在某些类型的NALU中作为附加信息进行传输
注意,SEI在国标平台上传输,也是需要先封装成PS流,然后再打成RTP包进行发送
相关文章:
【音视频】编解码相关概念总结
NALU RTP PS流 三者总体关系 NALU在RTP中的应用:视频流的RTP传输通常将NALU作为基本的单元进行传输。每个RTP包携带一个或多个NALU,这些NALU包含了视频编码数据。RTP协议通过其头部信息(如时间戳、序列号等)帮助接收端重新排列和…...
Vue3 + Vite + TS,使用 配置项目别名属性:resolve
使用 resolve 配置全局项目路径别名 1.优化了开发中单页面引用其他模块的路径复杂性 2.妥妥解决了,组件复用当中提高开发效率 // 不使用配置 import { useStore } from ../../../stores // 使用配置 可根据开发者需求任意定义,较多 import { useStore…...
docker创建nginx
docker run -d -p 8080:80 --name my-nginx-container nginx docker:命令 run:命令 -d:在后台运行容器 -p:8080:80:将容器内部的80端口映射到宿主机的8080端口。 --name my-nginx-container:为容器指定一个…...
StableDiffusion打包 项目迁移 项目分发 1
文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新:https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序: python3.10.6: https://www.python.org/downloads/release/python-3106/gi…...
【数据结构进阶】哈希表
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、哈希表的概念 二、哈希函数的实现方法 1. 直接定址法 2. 除留余数法 三、哈希冲突 1. 开放定址法(闭散列࿰…...
【蓝桥杯嵌入式】各模块学习总结
系列文章目录 留空 文章目录 系列文章目录前言一、LED模块1.1 赛题要求1.2 模块原理图1.3 编写代码1.4 赛题实战 二、LCD模块2.1 赛题要求2.2 模块原理图2.3 编写代码2.4 赛题实战 三、按键模块3.1 赛题要求3.2 模块原理图3.3 编写代码3.4 赛题实战 四、串口模块4.1 赛题要求4…...
Rust学习总结之-枚举
枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。 一:枚举定义 …...
Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境
文章目录 前言安装驱动下载安装Cuda编辑环境变量安装Cudnn安装conda验证安装成功配置conda镜像退出conda环境创建python环境查看当前conda环境激活环境安装python包安装pytorch 安装pycharm安装jupyter notebook 前言 深度学习和大语言模型的部署不免会用到Linux系统ÿ…...
SLAM算法工程师的技术图谱和学习路径
SLAM(Simultaneous Localization and Mapping)算法工程师是负责开发和实现用于机器人、自动驾驶车辆等领域的SLAM算法的专业人士。下面是SLAM算法工程师需要掌握的基础理论知识: 机器人运动学和动力学:理解机器人在空间中的运动方式和控制方法,包括轮式、蜘蛛腿、飞行器等…...
【第三天】零基础学习量化基础代码分析-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 记录量化基础代码总览引言基本概念量化投资 伪代码示例:量化投资模型框架总结 每日-往期回看 第一天零基础学量化基础知识点总览-持续更新 第二天零基础…...
深入了解 Python 中的 MRO(方法解析顺序)
文章目录 深入了解 Python 中的 MRO(方法解析顺序)什么是 MRO?如何计算 MRO?C3 算法的合并规则C3 算法的合并步骤示例:合并过程解析 MRO 解析失败的场景使用 mro() 方法查看 MRO示例 1:基本用法 菱形继承与…...
如何防止 Instagram 账号被盗用:安全设置与注意事项
如何防止 Instagram 账号被盗用:安全设置与注意事项 在这个数字化时代,社交媒体平台如 Instagram 已成为我们日常生活的一部分。然而,随着网络犯罪的增加,保护我们的在线账户安全变得尤为重要。以下是一些关键的安全设置和注意事…...
采样算法二:去噪扩散隐式模型(DDIM)采样算法详解教程
参考 https://arxiv.org/pdf/2010.02502 一、背景与动机 去噪扩散隐式模型(DDIM) 是对DDPM的改进,旨在加速采样过程同时保持生成质量。DDPM虽然生成效果优异,但其采样需迭代数百至数千次,效率较低。DDIM通过以下关键…...
各种类型网络安全竞赛有哪些 网络安全大赛的简称
本文是对入门学习的一些概念了解和一些常规场景记录 1.CTF(capture the flag)是夺旗赛的意思。 是网络安全技术人员之间进行攻防的比赛。 起源1996年DEFCON全球黑客大会,替代之前真实攻击的技术比拼。 (DEFCON极客大会诞生1993,…...
包子凑数——蓝桥杯真题Python
包子凑数 输入输出样例 示例 1 输入 2 4 5输出 6样例说明 凑不出的数目包括:1, 2, 3, 6, 7, 11。 示例 2 输入 2 4 6输出 INF样例说明 所有奇数都凑不出来,所以有无限多个 运行限制 最大运行时间:1s最大运行内存: 256M 最大公约数 最大公…...
网络通信/IP网络划分/子网掩码的概念和使用
文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…...
【前端】简单原生实例合集html,css,js
长期补充,建议关注收藏点赞。 目录 分栏input各种类型iframe表单拖拽 分栏 区分fieldset和framesetframeset是把浏览器窗口分成几个区域,每个区域分别放置一个html文档到对应的frame中,而且这个比例可以按住边栏进行调整col指定左右边栏的宽…...
MySQL--》如何在MySQL中打造高效优化索引
目录 初识索引 索引结构 性能分析 索引使用 最左前缀法则 SQL提示使用 覆盖索引使用 前缀索引使用 索引失效情况 初识索引 索引(index):是帮助MySQL高效获取数据的数据结构(有序),在数据之外数据库系统还维护着满足特定查找算法的数据结构&…...
盛京开源社区加入 GitCode,书写东北开源生态新篇章
在数字化转型与开源技术蓬勃发展的浪潮下,开源社区已成为推动技术创新的核心力量。盛京开源社区(SJOSC)作为沈阳地区的开源交流平台,始终致力于连接开发者、企业及高校,构建区域技术生态圈。 现在,盛京开源…...
HTML转义和反转义工具类
HTML转义和反转义工具类 package com.common.utils;import cn.hutool.http.HTMLFilter; import org.apache.commons.lang3.StringUtils;/*** 转义和反转义工具类** author lxx*/ public class EscapeUtil {public static final String RE_HTML_MARK "(<[^<]*?>…...
网络运维学习笔记(DeepSeek优化版)005网工初级(HCIA-Datacom与CCNA-EI)链路层发现协议与VLAN技术
文章目录 一、链路层发现协议1.1 思科CDP协议1.2 华为LLDP协议 二、VLAN(Virtual Local Area Network,虚拟局域网)技术详解2.1 基本概念2.2 技术特性2.3 接口工作原理2.3.1 Access模式2.3.2 Trunk模式 2.4 厂商配置对比思科配置华为配置 2.5 …...
DeepSeek开源周Day4:三连发!突破 AI 训练瓶颈的立体解决方案,并行计算三剑客DualPipe、EPLB与Profile-data
项目地址: https://github.com/deepseek-ai/DualPipehttps://github.com/deepseek-ai/eplbhttps://github.com/deepseek-ai/profile-data 开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天 (4/5)! 一、背景概述 …...
树莓百度百科更新!宜宾园区业务再添新篇
树莓集团宜宾园区业务不断拓展,主要体现在以下几个方面: 产业布局 -聚焦数字经济核心领域:涵盖软件开发、人工智能、大数据等,吸引众多上下游企业入驻,形成从芯片研发、软件开发到系统集成的完整产业链条。 -推进“双…...
RabbitMQ操作实战
1.RabbitMQ安装 RabbitMQ Windows 安装、配置、使用 - 小白教程-腾讯云开发者社区-腾讯云下载erlang:http://www.erlang.org/downloads/https://cloud.tencent.com/developer/article/2192340 Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exch…...
IO 和 NIO 有什么区别?
文章目录 阻塞模式与非阻塞模式数据处理方式通信模型应用场景 阻塞模式与非阻塞模式 IO:是阻塞式的 IO 操作。在传统的 IO 中,当一个线程执行读操作或者写操作时,该线程会被阻塞,直到操作完成。例如,在从文件读取数据…...
OpenWebUI配置异常的外部模型导致页面无法打开
一、使用Ollama关闭OpenAI OpenWebUI自带OpenAI的API设置,且默认是打开的,默认情况下,启动后,会不断的去连https://api.openai.com/v1,但是无法连上,会报错,但是不会影响页面,能正常…...
2025年度福建省职业院校技能大赛高职组“信息安全管理与评估”赛项规程样题模块二
模块二 网络安全事件响应、数字取证调查、应用程序安全 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第二阶段样题,内容包括:网络安全事件响应、数字取证调查。 本次比赛时间为90分钟。 介绍 竞赛有固定的开始和结束时间,参赛队伍必须…...
鸿蒙兼容Mapbox地图应用测试
鸿蒙Next已经发布一段时间了,很多之前的移动端地图应用,纷纷都要求适配鸿蒙Next。作为开发者都清楚,所谓的适配其实都是重新开发,鸿蒙的开发语言和纯前端的Javascript不同,也可以Android原始开发的语言不同。鸿蒙自带的…...
java练习(45)
ps:题目来自力扣 两数相除 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断…...
面试之《前端开发者如何优化页面的加载时间?》
前端开发者可以从多个方面入手优化页面的加载时间,以下是一些常见且有效的方法: 优化资源加载 压缩资源文件:对 HTML、CSS、JavaScript 文件进行压缩,去除不必要的空格、注释等,减小文件体积,加快下载速度…...
