浅谈数字音视频传输网络——AVB[通俗易懂]

AVB有两种流格式:AM824和AAF。AM824支持24bit音频,iec60958音频编码(SPDIF和AES3),SMPTE时间码和MIDI。对于发送端AM824有三个选项“non-blocking(sync)”、“non-blocking(aync)”和“blocking”。流量整形是为了避免在以太网中发生丢弃数据的情况,通常采用漏桶算法(LeakyBucket)来完成流量整形或速率限制(RateLimiting)。它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。

大家好,又见面了,我是你们的朋友全栈君。

本文将围绕:音频信号的数字化、以太网的传输方式、数字音频信号对以太网的要求、QoS服务质量、传统以太网传输实时数据流的方式、以太网音视频桥接(AVB)技术等几个方面展开说明。

在传统的音响系统里,声音信号是模拟信号,它的振幅具有随时间连续变化的特性。对模拟音频信号进行处理、存储和传送都会引入噪声和信号失真,并且随着复制次数的增加,每次都会加入新的噪声和失真,信号质量会越来越差。而数字音频技术的出现,解决了上述模拟信号中的诸多问题。

数字音频技术是把模拟音频信号变换为振幅不变的脉冲信号,音频信号的信息量全部包含在脉冲编码调制(Pulse Code Modulation,PCM)中。各种处理设备引入的噪声和产生的失真与数字信息完全分离。因此,数字音频信号具有:复制不走样、抗干扰能力强、动态范围大、可远距离传输、可以远程监控等优点。

现如今,数字音频信号还可以融入到网络传输系统中,在一条传输线路上同时实行多路音频信号的传输,大大节省了传输运行成本,简化了传输线路。

音频信号的数字化

将模拟信号转换成数字信号,需要对模拟信号进行一系列的处理,如图1所示,先对模拟信号进行采样,再经过低通滤波器去除掉采样中产生的高频失真,通过量化将采样后的数值调整为整数,再经过二进制编码后生成数字信号。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图1 音频信号的数字化

采样,是每隔一定的时间间隔,抽取信号的瞬时幅度值。每一秒钟所采样的次数叫做采样频率。以CD为例,采样频率为44.1kHz,即1秒钟对模拟信号进行了44100次取值,如图2b所示,采样后的信号变成了多个密布的点。采样频率越高,抽取的点密度越高,信号也就越精准。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图2a 原模拟信号频谱
 
浅谈数字音视频传输网络——AVB[通俗易懂]
图2b 采样后的频谱

在图2b中采样过后的信号除了原始频谱之外,还会额外产生一些高频的失真,形成新的频谱。这些失真的频谱以nfu(n为正整数)为中心、左右对称,它的频谱分布与原信号的频谱形状相同。采用低通滤波器(LPF)把新增加的多余的频谱滤掉就可以恢复原信号的频谱。

根据奈奎斯特(Nyquist)采样定理:采样频率fs大于或等于采样信号最高频率fu的2倍,就可以通过低通滤波器恢复无失真的原始信号。如果fs<2fu,采样过程中产生的一部分高频失真会与原始频谱相互叠加,如图3中会产生频谱混叠失真的现象,这种叠加是无法用低通滤波器分开的。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图3 频谱混叠失真

因此采样频率fs必须大于原信号中最高频率的2倍以上,新增加的频谱与原信号的频谱才不会相互叠加。例如,人耳的听音频率上限是20kHz,采样频率最低应为40kHz。但低通滤波器有一定的截止边沿宽度,是按一定规律逐步对信号衰减滤除的,为了较好的防止产生高频失真,通常fs=(2.1~2.5) fu。CD的采样频率是44.1kHz,它等于20kHz的2.205倍。

采样后的振幅值并不是整数,且是随机变化的。还需要将这些随机变化的振幅值通过四舍五入的方法将其变换为能用二进制数列来表达的数值,这个过程就是量化,单位是bit(比特),如图4中采样和量化所示。采样值是6.4的幅值量化后取整数6,采样值是3.6的幅值量化后取整数4。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图4 A/D转换的三个步骤

将量化后的二进制数组按照时间顺序排列成可以顺序传送的脉冲序列,这个过程就是编码。由于数字电路以开关的通和断(1和0)两种状态为基础,可以大大简化数字电路的运算,因此二进制编码在数字技术中获得了广泛的应用。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图5 量化误差与量化位数的关系

量化级数越多,量化误差就越小,声音质量就越好,如图5所示,3bit是23个二进制数,6bit是26个二进制数。对于音频信号,由于动态范围较大,而且要求的信噪比又高,所以量化的取值大一些,通常为16bit,甚至20-24bit。

以太网的传输方式

以太网创建于1980年,它是一种可以在互连设备之间相互传送数据的技术。发展至今日,因它具有成本低、速率快、可靠性高等特点被广泛的应用。我们可以通过以太网传送Email、图片、声音、视频等等。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,是一种争用型的介质访问控制协议。它的工作原理是: 发送数据前先侦听信道是否空闲 ,若空闲,则立即发送数据。若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。我们称这种传输机制为“Best Effort”(尽力而为),也就是说当数据抵达端口后,本着FlFO(先入先出)的原则转发。不对数据进行分类,当数据进入端口的速度大于端口能发送的速度时,FIFO按数据到达端口的先后顺序让数据进入队列,同时,在出口让数据按进队的顺序出队,先进的数据将先出队,后进的数据将后出队。采用CSMA/CD控制方式的特点是:原理比较简单,技术上容易实现,网络中各工作站处于平等地位 ,不需集中控制,不提供优先级控制。

在以太网中,我们经常会遇到“带宽”一词,它是指在单位时间(一般指的是1秒钟)内能传输的数据量。也就是在规定时间内从一端流到另一端的信息量,即数据传输率。数字信息流的基本单位是bit(比特),时间的基本单位是s(秒),因此bit/s(比特/秒,也用bps表示)是描述带宽的单位,1bit/s是带宽的基本单位。不难想象,以1bit/s的速率进行通信是非常缓慢的。幸好我们可以使用通信速率很快的设备,比如56k的调制解调器利用电话线拨号上网,其带宽是56000bit/s(1k=1000bit/s), 电信ADSL宽带上网在512kbit/s至100Mbit/s之间,而现如今的以太网则可以轻松达到100Mbit/s以上(1Mbit/s=1000×1000bit/s=1,000,000bit/s)。
以千兆网(1Gbit/s)为例:假如说交换机的端口带宽是1Gbit/s,也就是1000,000,000bit/s,则说明每秒可传输1000,000,000个二进制的“位”,那么1bit所占用的时间是1÷1000,000,000=1ns。也就是每个二进制位(1bit)之间的时间间隔大于1ns时,就不会发成冲突,如图6所示。

 
浅谈数字音视频传输网络——AVB[通俗易懂]

图6

但在以太网传输中,并不是以二进制位(bit)来传输的,而是以“帧”为单位的。如图7所示,在一帧中至少包含了46Byte(字节)的数据,那么一个最小的以太网帧是72 Byte;如果一帧中包含的最大数据是1500 Byte,那么一个最大的以太网帧是1526 Byte。

典型以太网帧

8

6

6

2

46-1500

4

前导码

目的地址

源地址

类型

数据

帧校验序列

a)

IEEE802.3(原版)

7

1

6

6

2

46-1500

4

前导码

帧开始符

目的地址

源地址

长度

数据

帧校验序列

b)

IEEE802.3(1997修订)

7

1

6

6

2

46-1500

4

前导码

帧开始符

目的地址

源地址

长度/类型

数据

帧校验序列

c)

图7 以太网帧结构

网络设备和组件在接收一个帧之后,需要一段短暂的时间来恢复并为接收下一帧做准备,也就是相邻两帧之间是有一个间隙的,IFG(Inter frame Gap)帧间距。IFG的最小值是12Byte,如图8所示。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图8

我们假设这两帧数据在千兆网(1Gbit/s)内传输,那么两帧之间的时间间隔大于96ns就不会发生冲突。

随着网络带宽的提升,千兆网在传统以太网的基础上对帧的数据量做出了一定的修改。采用了载波延伸(Gamier Extension)的方法,将最小字节扩展到512Byte,即凡是发送帧长不足512 Byte时,就填充特殊字符(0F)补足。当许多短帧需要发送时,如果每一帧都扩展为512 Byte,会造成资源的巨大浪费。因此又设定了帧突发(Frame Bursting)的方法,可以解决此问题,第一个短帧使用载波延伸,一旦发送成功,则随后的短帧连续发送直到1500 Byte为止。此期间由于线路始终处于“忙”的状态,不会有其它站点抢占信道。

传统以太网如何传输实时数据流(音、视频流)?

以太网通过RTP(Real-time Transport Protocol)实时传输协议为数据提供了具有实时特征的端对端传送服务。RTP 本身并不能保证传送,也不能保证防止无序传送。因此,想要对所有的数据流进行排序,就离不开对数据的缓冲(Buffer)。但是,一旦采用缓冲的机制就又会带来新的问题——延时。所以我们在网络上听歌、看电影的时候,都会缓冲后才开始播放。但这个缓冲时间,在专业音、视频传输领域里是不能被接受的。

数字音频信号对以太网的要求

我们以CD为例,它的采样频率是44.1kHz,量化位数是16bit。每次采样的时间是1÷44.1×1000≈22.7μs。我们对声音的要求是连续不间断的,也就是要求每个采样下的数据传输间隔不能大于22.7μs。而在千兆网(1Gbit/s)里,两帧之间的最小时间间隔只有96ns,远小于我们所要求的22.7μs,那么在这个带宽下,我们是完全可以传输连续不间断的音频信号的。

如果我们在1Mbit/s的带宽下传输数据,那么1bit所占用的时间是1÷1,000,000=1μs,两帧之间的间隔是96μs,这时候如果传输CD数字音频信号就会存在断断续续的问题了。
从上面两个例子不难看出,只要网速足够快,也就是网络有足够的带宽,我们就可以很顺利的在网络上传输数字音频信号。但大多数情况下,由于带宽通常是由多个设备共享的,我们不单单只用它去传输一路数字音频信号,我们会同时传送多路数字音频信号,还会传输邮件、网页、图片等等其它的数据。而所有的发送端没有基于时间的流量控制,那么这些发送端永远是尽最大可能发送数据。这样来自不同设备的数据流就会在时间上产生重叠,即我们前文所说的冲突。这一定会影响数字音频信号的传输,为了改善这种传输机制,提高部分数据传输效率,以太网通过QoS优先机制进行转发,可以保证一部分数据的传输。

什么是QoS?

QoS(Quality of Service)是服务质量的简称,它包括保证传输的带宽,降低传输的延时,降低数据的丢失率以及延时抖动等。按照其工作的能力可分为以下几种模型:
1、DiffServ(Differentiated Service,区分服务)模型,根据服务要求对不同业务的数据进行分类,对数据按类进行优先级标记,然后有差别地提供服务。先行转发优先级高的数据,并将优先级低的数据做端口缓存,待网络中无高级别数据时再转发低级别数据,如图9所示。

 
浅谈数字音视频传输网络——AVB[通俗易懂]

图9

AVB 标准定义了两个流量类型,A类和B类。A类流优先级是5,B类流优先级是4,这两种数据相比较,A类数据流会被先行转发。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图10

2、IntServ(Integrated Service,综合服务)模型,在节点发送数据前,需要向网络申请资源预留,确保网络能够满足数据流的特定服务要求。它可以提供保证服务和负载控制服务两种服务。保证服务,提供保证的延迟和带宽来满足应用程序的要求;负载控制服务,保证即使在网络过载的情况下,也能对数据提供与网络未过载时类似的服务。

在网络中大量的数据极有可能在一瞬间抵达端口,保证服务如果要为每一个数据流提供QoS服务就变得不可想象了。因此,IntServ模型很难独立应用于大规模的网络,需要与流量整形(Traffic Shaping)结合使用。

流量整形(Traffic Shaping)

流量整形是为了避免在以太网中发生丢弃数据的情况,通常采用漏桶算法(Leaky Bucket)来完成流量整形或速率限制(Rate Limiting)。它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。

 
浅谈数字音视频传输网络——AVB[通俗易懂]

图11 流量整形示意图

漏桶算法提供了一种机制,通过它突发流量可以被整形,以便为网络提供一个稳定的流量。在概念上,漏桶算法可以作如下理解:到达的数据被放置在底部具有漏孔的桶中(数据缓存);数据从漏桶中漏出,以常量速率注入网络,因此平滑了突发流量,如图12所示。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图12 漏桶算法

主机在每经过一个时间间隔向网络输出一个数据包,因此产生了一致的数据流,平滑了突发的流量。AVB 标准定义了两个流量类型,A类和B类。A类的时间间隔为125μs,B类的时间间隔为250μs。A类要求流具有更紧密的等待时间,并且具有较短的观察间隔,这意味着其数据包更小并且更频繁地传输。

 
浅谈数字音视频传输网络——AVB[通俗易懂]
图13

当数据流具有相同尺寸的时候,每个时间间隔传输一个数据的工作机制没有任何问题。但对于可变长度的数据来说,这种工作机制可能存在一点问题,此时,最好每个时间间隔传输固定数目的字节。

AVB有两种流格式:AM824和AAF。AM824支持24bit音频,iec60958音频编码(SPDIF和AES3),SMPTE时间码和MIDI。对于发送端AM824有三个选项“non-blocking(sync)”、“non-blocking(aync)”和“blocking”。 

AM824(non-blocking,synchronous),典型的AVB音频设备使用此模式进行传输。每个观察周期发送一帧,每个以太网帧总发送相同数量的采样,在48kHz采样时,每帧包含6个采样;在96kHz时,每帧包含12个采样。

AM824 (non-blocking, async packetization),此模式由于打包器和发送器的观测间隔不同步,有可能发送一个临时的以太网帧,其中包含一个或多个采样。一个打包器处理多个时钟域的设备通常采用此格式。因为它可以发送临时的以太网帧,在48kHz采样时,每帧包含7个采样;在96kHz时,每帧包含13个采样,它需要预留足够的带宽。苹果Mac采用此模式。

AM824 (blocking)是一些火线设备使用的模式,因为它更容易打包和拆包。在48kHz采样时,每帧包含8个采样;在96kHz时,每帧包含16个采样。 
AAF是IEEE p1722a中定义的新的打包格式。它比AM824开销低,要求数据流中每个帧具有相同的大小和格式,并允许16bit、24bit和32bit的量化,以及每个帧的采样数量选择。每个帧的大小和格式总是相同的。

 
浅谈数字音视频传输网络——AVB[通俗易懂]

图14

从图14中我们可以看出几个典型的AVB流在万兆网(10Gbps)中的传输规律。比如:48kHz采样32bit的立体声音频流,实际需要的带宽大约是3Mbps,采用Class A的传输间隔,1秒钟发送8000组数据(1÷8000=0.000125s=125μs),其中每组数据最多由80个帧组成。如果每帧都按照最大数据来传输,在前文中提到过最大帧是1526Byte(如图7中所示),再加上每帧的帧间隔12Byte,共1538 Byte,相当于12,304bit(1Byte=8bit),每组80个帧相当于12,304×80=984,320bit,每秒传输8000组相当于984,320×8000=7,874,560,000bit/s≈7.87Mbps。那么在10Gbps的带宽下,如果保留75%的带宽用于传输AVB流,可以传输952个这样的数据流。

AVB可以实现全双工的工作模式,每帧的数据量和传输的数据类型有关,也和时间间隔有关,从图14中不难看出,不同类型的数据所占用的字节并不是一个绝对的固定值。流量整形固定了实时数据流(音、视频流)的发送时间间隔和帧大小,当传统的异步以太网数据流(邮件、网页等)进入网络时,会不会对实时数据流有所影响呢?

802.1Qav:排队及转发协议(Queuing and Forwarding Protocol,简称Qav)

Qav协议的作用是确保传统的异步以太网数据流不会干扰到AVB的实时数据流。AVB交换机把收到的各种数据分类,分别进入不同的转发队列,并重新赋予优先级,其中实时音视频流数据拥有最高优先级。为了避免冲突需要两种调度算法,一种是基于可信因子的整形算法CBS(credit based shaper transmission selection algorithm),一种是严格的优先级选择算法。各种不同的普通数据按照严格的优先级算法进行调度,当与流数据发生冲突时,则调用CBS算法。

对时间敏感的实时数据流转发采用伪同步模式(Pseudo-synchronous),这个机制依赖于精准时间同步协议(PTP)提供的8kHz时钟。在每隔125μs的时间间隙(1÷8000=0.000125s=125μs),包含AVB数据的以太网等时帧就会被进行转发。在优先保证等时帧数据传输的条件下,继续提供普通异步传输的服务,这就是Qav的优先级管理(Prioritize)及流量整形(Traffic Shaping)。

当数据经过多个交换机进行传输时,即使在相同的带宽下,也会因为路径不同导致传输时间的偏差,如何保证在整个网络里都具备相同的时间间隔呢?还需要一个时钟同步机制,将网络中的所有设备同步到相同的时钟上,来提高AVB流量整形的精准度。

802.1AS:精准时间同步协议(Precision Time Protocol,简称PTP)

时钟同步的目的是维护一个全局一致的物理或逻辑时钟,或者说把分布在各地的时钟对准(同步起来),使得系统中的信息、事件有一个全局一致的解释。IEEE802.1AS采用点对点的工作模式,时间同步过程只在相邻设备之间进行,设备自己通过外带方式实现接口之间的时间同步,不经过内部交换板。它定义了主时钟选择与协商算法、路径延时测算与补偿算法、以及时钟频率匹配与调节的机制,可用于生成时钟以及对网络音视频系统的修复。PTP定义了一个自动协商网络主时钟的方法,即最优主时钟算法(Best Master Clock Algorithm,简称BMCA)。BMCA定义了底层的协商和信令机制,用于标识出AVB局域网内的主时钟(Grandmaster)。

IEEE802.1AS的核心在于时间戳机制(Time stamping)。PTP消息在进出具备IEEE802.1AS功能的端口时,会根据协议触发对本地实时时钟(RTC)的采样,将自己的RTC值与来自该端口相对应的主时钟(Master)的信息进行比较,利用路径延迟测算和补偿技术,将其RTC时钟值匹配到PTP域的时间。当PTP同步机制覆盖了整个AVB局域网,各网络节点设备间就可以通过周期性的PTP消息交换精确的实时时钟调整和频率匹配算法。最终,所有的PTP节点都将同步到相同的“挂钟”(Wall Clock)时间,即Grandmaster时间。消息交换过程如下:
1. Master发送Sync消息,记下该消息的本地发送时间t1。
2. Slave接收到Sync消息,并记下其接收到该消息的本地时间t2。
3. Master有两种方式告诉Slave该Sync消息的发送时间t1。
  1) 将t1时间嵌入到Sync消息中,这需要某种硬件处理以获得高精度。
  2)在后续的Follow_Up消息中发送
4. Slave发送Delay_Req消息往Master,并记下发送时间t3。
5. Master接收到Delay_Req,并记下该消息到达时间t4。
6. Master发送Delay_Resp消息告知Slave t4。
利用这四个时间可以算出Master和Slave之间的时钟差值,前提是链路是对称的,即发送和接收延时一样。计算公式为:
offset = ((t2 – t1) – (t4 – t3))/2
one_way_delay = ((t2 – t1) + (t4 – t3))/2

 
浅谈数字音视频传输网络——AVB[通俗易懂]

图15

在最大7跳的网络环境中,理论上PTP能够保证时钟同步误差在1μs以内。由于串行连接交换机会影响延时的对称性,使同步精度降低,因此在构架AVB网络时建议采用对称的链路设计。

一旦主时钟被选定,所有局域网节点的PTP设备将以此主时钟为参考值,如果Grandmaster发生变化,整个AVB网络也能通过BMCA在最短时间内确定新的主时钟,确保整个网络保持时间同步。

该标准所规范的协议严格保证了实时数据流在基于以太网延时固定或对称的传输媒质中的同步传送。其内容包括在网络正常运行或添加、移除或重新配置网络组件和网络故障时,对时间同步机制的维护,为以太网提供完美的低延迟、低抖动的时钟,保证高质量的带宽,使服务快速抵达。

在确保了时间精准之后,如果带宽不充足会导致漏桶很快存满并且有数据溢出,如果是音、视频数据溢出被丢弃,就会出现断断续续的问题,还有可能丢失掉一部分声音或画面,因此我们还需要保证有足够的带宽可以传输实时音视频数据流。

802.1Qat:流预留协议(Stream Reservation Protocol,简称SRP)

为了提供有保障的QoS,流预留协议确保了实时数据流设备间端到端的带宽可用性。如果所需的路径带宽可用,整个路径上的所有设备(包括交换机和终端设备)将会对此资源进行锁定。符合SRP标准的交换机能够将整个网络可用带宽资源的75%用于AVB链路,剩下25%的带宽留给传统的以太网流量。

在SRP中,流服务的提供者叫做Talker,流服务的接收者叫做Listener。同一个Talker提供的流服务可同时被多个Listener接收,SRP允许只保障从Talker到Listener的单向数据流流动。

只要从Talker到多个Listener中的任意一条路径上的带宽资源能够协商并锁定,Talker就可以开始提供实时数据流传输服务。SRP内部周期性的状态机制维护着Talker及Listener的注册信息,能够动态的对网络节点状态进行监测并更新其内部注册信息数据库,以适应网络拓扑的动态改变。无论Talker还是Listener,都可以随时加入或者离开AVB的网络,而不会对AVB网络的整体功能和状态造成不可恢复的影响。

1722:音视频桥接传输协议(Audio/Video Bridging Transport Protocol,简称AVBTP)

AVBTP定义了局域网内提供实时数据流服务所需的二层数据格式,实时数据流的建立、控制及关闭协议。AVBTP为物理上分隔的音、视频编解码器之间建立了一条带有低延迟的虚拟链路。

各种压缩的与非压缩的原始音频、视频数据流经由AVBTP协议进行打包(填充由SRP保留的流ID,打上PTP产生的时间戳以及媒体类型等相关信息),通过AVBTP专用的以太网帧类型进行组播,从流服务的提供者(Talker)发出,由AVB交换机进行转发,再被注册过此实时数据流服务的接收者(Listener)接收并解包、解码然后输出。

AVBTP每125µs发送一次这个帧,它总是相同大小的数据流。每个流中可以由1-60个通道组成,最多可支持64个流。

AVB——以太网音视频桥接技术(Ethernet Audio Video Bridging)是IEEE的802.1任务组于2005开始制定的一套基于新的以太网架构的协议,用于实时音视频的传输协议集。除了以上描述的相关协议之外,还包括:

802.1BA:音视频桥接系统(Audio Video Bridging Systems)

AVB系统标准定义了一系列在生产制造AVB兼容设备过程中使用的预设值和设定,使得不具备网络经验的用户也能够去建立、使用AVB网络,而不必对其进行繁琐的配置。

1733:实时传输协议(Real-Time Transport Protocol,简称RTP)

RTP是一种基于三层UDP/IP网络的协议,为了在基于IP的三层应用上利用二层AVB的性能,IEEE 1733对RTP进行了扩展,在通过桥接及路由的局域网内提供时间同步、延迟保障和带宽预留的服务,以提供实时数据频流的传输。其中涉及到封包格式,流的建立、控制、同步及关闭等协议。

1722.1:负责设备搜寻、列举、连接管理、以及基于1722的设备之间的相互控制。用于AVB设备的发现,枚举,连接管理,固件升级等。

TSN (Time Sensitive Network)时间敏感网络

IEEE 802.1任务组在2012年11月的时候正式将AVB更名为TSN——Time Sensitive Network时间敏感网络。也就是说,AVB只是TSN中的一个应用。

此外,TSN还应用在汽车控制领域、商用电子领域、实时监控或实时反馈的工业领域。如果大家想更多的了解有关TSN网络的相关信息,可以浏览AVnu联盟的网站http://avnu.org/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129737.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 兴师动众解决由cookie引发的400报错问题

    兴师动众解决由cookie引发的400报错问题背景是这样的,做的是一个机票的购票业务,包括了购票(单程购票和往返购票)等功能。购票的航班信息需要从航班搜索页带到下单页,所以在跳转至下单页前将航班信息存在了cookie,用于在下单页展示所选航班信息。遇到的问题是购买单程机票的时候,一切流程正常(从航班查询页,选择需要的购买的航班,进入到下单页,进行下单操作);但是购买往返机票的时候,进入到下单页时,发现下单页所有接口都报了400的错误,继而再访问该网站的其他页面也都报了400的错误。一般来说400报错是因为前后端参数格式或者请求头不一致导致的问题,前.

  • 2060s

    2060s2060s老版本三星核心:175显存:2030功耗:125算力:43+镁光核心:-400显存:1050功耗:125算力:37+升级系统后三星核心:1035显存:2030镁光核心:1035显存:1050

  • ubuntu python安装pip_ubuntu离线安装pip

    ubuntu python安装pip_ubuntu离线安装pip说明pip是一个安装和管理Python包的工具。在Pip的帮助下,你可以安装独特版本的包。最重要的是,Pip可以通过一个“requirements”的工具来管理一个由包组成的列表和版本号。Pip很像easy_install,但是Pip有一些额外的特色。ubuntu安装pip#建议在操作前将源替换为163或阿里的源#1.更新系统包sudoapt-getupdatesud

    2022年10月27日
  • c0000005 access_violation_0X0000005

    c0000005 access_violation_0X00000050xC0000005:AccessViolation-vc++6.0aps001,002,003创建的C:\SMW200DATA\DATA,内容是不一样的,不通用的。读取相关文件就会报错咯。如果想要运行,则目录内容得删除。然要运行时,自动创建。每台设备已经有了数据时,需要先备份C:\SMW200DATA\DATA里面的内容。否则数据丢失。参考:https://blog.csd…

  • c#中重定向windows控制台程序的输出信息

    这个问题来自论坛提问,答案如下.这只是一个简单的ipconfig命令.如果是复杂的,比如oracle的exp之类的命令,能在调用的时候显示出来,还是相当酷的.推荐:http://www.cnblog

    2021年12月27日
  • Android – 除首次使用状态(SharedPreferences)

    Android – 除首次使用状态(SharedPreferences)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号