【音视频】编解码相关概念总结

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包进行发送

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25300.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

llama.cpp 一键运行本地大模型 - Windows

文章目录 llama.cpp 一键运行本地大模型 - Windows嘿,咱来唠唠 llama.cpp 这玩意儿!gguf 格式是啥?咱得好好说道说道基座模型咋选?所需物料,咱得准备齐全咯核心命令,得记牢啦运行方式咋选?测试应…

SQLark 数据迁移|断点续迁已上线(Oracle-达梦)

数据迁移是 SQLark 最受企业和个人用户欢迎的功能之一,截止目前已帮助政府、金融、能源、通信等 50 家单位完成从 Oracle、MySQL 到达梦的全量迁移,自动化迁移成功率达 96% 以上。 在 Oracle 到达梦数据库迁移过程中,SQLark V3.3 新增 断点续…

sklearn中的决策树-分类树:剪枝参数

剪枝参数 在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止。这样的决策树 往往会过拟合。为了让决策树有更好的泛化性,我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策…

基于SSM实现的bbs论坛系统功能实现四

一、前言介绍: 1.1 项目摘要 随着互联网技术的不断进步和普及,网络社区已成为人们获取信息、交流意见、分享经验的重要场所。BBS(Bulletin Board System,电子公告板系统)论坛系统作为网络社区的一种重要形式&#xf…

git - study

文章目录 git - study概述可以用 git gui工具来添加快捷命令工具如果要在提交日志中搜索,可以用gitk的view编辑功能实验环境直接用git自带环境进行git操作的好处查看git所有配置配置全局数据配置项目专用的数据查询配置数据的原始值配置git使用的文本编辑器获取某个…

事故02分析报告:慢查询+逻辑耦合导致订单无法生成

一、事故背景与现象 时间范围 2022年2月3日 18:11~18:43(历时32分钟) 受影响系统 系统名称角色影响范围dc3订单数据库主库订单生成、事务回滚dc4订单数据库从库数据同步、容灾切换 业务影响 核心业务:手机点餐、C扫B支付订单无法推送至…

ONES 功能上新|ONES Copilot、ONES Project 新功能一览

ONES Copilot 智能 AI 助手模型可配置多种类型模型,服务提供方 Dashscope 的模型列表中新增 DeepSeek V3 与 DeepSeek R1;选择自定义模型配置时,填写私有部署的 DeepSeek 模型相关参数即可。 应用场景: 企业内部自部署或在模型服务…

docker镜像和容器(二)

在开始这篇文章之前,有几个需要了解的概念 docker镜像是什么 docker镜像是什么(有兴趣可以参考一下这篇知乎的回答) 文章这里引用一个回答 电脑装系统的时候,需要一张盘,我们称其为镜像,镜像是一个固定的文件,这次读…

51c嵌入式~电路~合集12

我自己的原文哦~ https://blog.51cto.com/whaosoft/12318429 一、单端、推挽、桥式拓扑结构变压器对比 单端正激式 单端:通过一只开关器件单向驱动脉冲变压器。 正激:脉冲变压器的原/付边相位关系,确保在开关管导通,驱动脉冲…

DNS的解析流程

引言 在互联网世界中,域名系统(DNS,Domain Name System)扮演着至关重要的角色。它就像是一个巨大的电话簿,将人类可读的域名(如www.example.com)转换为机器可读的IP地址(如192.0.2.…

基于云函数的自习室预约微信小程序+LW示例参考

全阶段全种类学习资源,内涵少儿、小学、初中、高中、大学、专升本、考研、四六级、建造师、法考、网赚技巧、毕业设计等,持续更新~ 文章目录 [TOC](文章目录) 1.项目介绍2.项目部署3.项目部分截图4.获取方式 1.项目介绍 技术栈工具:云数据库…

算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器

一、前言 本文相关的全部源码和RtspSever库,我已打包上传,欢迎大家免费下载,testRTSPSever。 每一个嵌入式视觉算法工程师,都应该有一套属于自己的算法仿真和测试环境。可以方便地进行视频、图像等素材进行在线导入,可…

LabVIEW 中 codeGenEngine.llb 工具库

codeGenEngine.llb 是 LabVIEW 2019 安装目录下C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\路径下的工具库,主要用于代码生成相关的操作,帮助开发者在 LabVIEW 项目中便捷地实现自动化代码生成任务,提高开发…

开发工具和库的一些介绍

一.开发工具 1.在Linux中安装软件,一般有三种途径:源码安装(不推荐);软件包安装(rpm)(不推荐,易出现缺失和版本兼容问题);包管理器(yum/apt)(Centos:yum;Ubu…

12字符函数

一、函数strchr与strrchr 注意: 这两个函数的功能,都是在指定的字符串 s 中,试图找到字符 c。strchr() 从左往右找,strrchr() 从右往左找。字符串结束标记 ‘\0’ 被认为是字符串的一部分。 图解: 示例代码&#xff…

【数据挖掘】NumPy

NumPy 是 Python 中一个用于进行科学计算的基础库,它提供了高效的数组操作和数学运算功能。在数据挖掘中,NumPy 被广泛应用于数据预处理、特征工程、算法实现等方面,尤其是在处理大规模数据时,因其提供的高效运算和矩阵操作的能力…

.gitignore 文件中添加忽略 .pdb 文件

我在项目的根目录下创建.gitignore文件。打开.gitignore文件并添加忽略.pdb文件的规则。如下: 已经在 .gitignore 文件中添加了忽略 .pdb 文件的规则,但是提交到 Git 仓库时仍然看到了 .pdb 文件,这通常意味着 .pdb 文件在 .gitignore 文件被…

C++ 常见面试知识点

主要介绍C常见面试题 1、说一下你理解的C中的四种智能指针 常用接口 T* get(); T& operator*(); T* operator->(); T& operator(const T& val); T* release(); 将 封装在内部的指针置为nullptr, 但并不会破坏指针所指向的内容, 函 数返回的是内部指针置空之前…

wx056基于ssm+vue+uniapp的二手闲置交易市场小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

Flash-03

1-问题:Flash软件画两个图形,若有部分重合则变为一个整体 解决方法1:两个图形分属于不同的图层 解决方法2:将每个图形都转化为【元件】 问题2:元件是什么? 在 Adobe Flash(现在称为 Adobe Anim…