成本与体验的“非零和博弈”

news2024/11/25 3:44:15

随着移动互联网和智能终端的普及,越来越多的海内外互联网企业开始发力短视频业务。在短视频用户全球化,短视频产品及内容消费井喷式增长的今天,用户开始逐渐对体验有了越来越高的要求。为了更清晰更流畅地播放,用户播放成本也随着提升。本次LiveVideoStackCon 2022北京站邀请火山引擎点播基础技术研发负责人——马茜,为大家介绍点播体验优化中,成本的平衡之道,重点介绍我们如何在保证用户播放体验基本无损的情况下,挖掘并进行点播业务端到端成本优化的一些实践与思考。

文/马茜

编辑/LiveVideoStack

大家好,我是马茜,目前主要负责火山引擎视频云点播技术的相关工作。标题中提到的“非零和博弈”更多在经济学中被提起,与之相对的是零和博弈,当出现一些对立面需要进行平衡和参考时,如何通过综合性的考虑使得整体的收益或损失处于非零和的状态。

在前几年的技术分享中,我们会更关注体验,但随着整个业务的规模效应达到某个阶段后,成本显得愈发重要,且在线上质量与体验天花板逐步接近时,关于如何更好地完成精细化的体验优化这一问题,也必须考虑成本的相关性约束。由此,引发了我们在如何平衡成本和体验之间做好决策的实践和思考。

02b3f7a8e200c80fc6750f63b3494fa2.jpeg

接下来会和大家分享一些我们在实践过程中的案例及思考。

从整体来说,视频云作为一个中台,一直支持抖音集团的抖音、今日头条等相关业务,在这段时间中,我们沉淀了一套端到端的整体点播解决方案。此外,为了及时响应业务侧的持续需求、技术优化驱动业务增长,我们沉淀了很多方法论和技术方案,从而快速进行技术迁移、体验优化及成本优化。

通过对这几年相关需求的总结,可以发现面向点播产品的持续性需求主要分为高体验和低成本两方面。整体看来,命题作文其实就变成了如何用最小的成本去做最好的体验,而体验本身有很多维度的指标和参数用以参考,如卡顿、首帧、播放成功、画质......随着网络整体的基建越来越成熟,所有的需求也随之分为两类,高画质及零卡顿。

高画质主要指端侧画质体验的提升,主要针对转码和渲染的优化,如HDR、超分或更高效的编码器的优化和迭代。卡顿则更多与IO相关,如预渲染、预加载等一系列流控的策略去进行相关优化。

以上提到的所有优化都可能在不同维度造成点播技术成本的上涨,如转码、带宽流量。于是如何在0增长或小增长的情况下进行体验的优化便成为了近期我们需要探索的关键问题。

1.理解体验与成本

在讨论体验和成本之前,不妨想一下,我们是如何理解两者的。单说两者可能比较宽泛,但对应到技术层面,则更偏向于通过不同指标反映成本和体验,这也是希望和大家进行分享的。

599719df46a5d26423914c9c438b156a.jpeg

大家在工作中一定会面临几个问题,比如迭代了编码器算法,随之而来的是高复杂度的计算及相关转码成本,甚至由于转了更多的档位而带来了存储成本。那就不得不在播放零卡顿、画质优化、转码和存储成本的提升上进行相应平衡,这时该如何决策呢?

另外,作为中台,我们每个月或每个季度都会给业务对账,在对账的时候有时会被问到,业务规模没有涨幅,为何成本上涨了?此时便需要对整体的点播成本账单进行解读和拆解,从而一方面能够指导业务,发现当前整体的点播体验或成本存在的问题,或是成本增长的原因。另一方面能够指引我们找到在接下来技术优化解决问题的出发点。最后一个问题,既然在进行优化,天花板在哪里?究竟要做什么事情?所以点播成本和优化空间也是我们持续探索的问题。

5144dac6a172e7f3153dc21ad5f97334.jpeg

说到体验成本,就不得不关注体验相关的指标,大家应该对此有共识,就体验类指标而言,通常分为三层,因为体验一定是面向增长的,第一层最关键的指标便是业务数据,与之相关的便是DAU留存广告收入。在后续计算ROI时,一定要关注成本数据。

拆解完业务数据之后,与点播场景相关的指标即为二级指标——QoE指标,在QoE中,更关注业务场景中的核心指标,包括播放时长、播放次数、完播率等。

第三个指标更偏向于技术能够理解且可执行的指标,即在离线分析或离线仿真能够评估及优化的指标,而这些指标主要是分为4大类,第一个是失败率,第二个是起播时间。起播时间又分为开始的播放时间以及SEEK之后的实际起播时间,另外还包括卡顿和画质。

除此之外,用户反馈集中提到了音画不同步、画面静止等问题。基于此衍生出了丢帧率及音画不同步率等指标。基于这些技术指标的优化,驱动QoE的正向优化,正向引导业务指标增长的链路。

f6f3f21439c00d3fef64bfb9cd3f49fa.jpeg

第二部分是播放成本,比较好理解的技术成本包括整个播放端到端链路,从上传到转码,再到分发及播放。整体上分为三块,媒体分发成本、媒体处理成本及媒体存储成本。

媒体分发成本比较好理解,就是CDN的带宽成本,而这一部分的CDN带宽成本在整体计费项中还包含后续会依赖的播放请求、平台服务的监控告警统计等成本。

媒体处理成本主要是转码成本,更偏向于计算成本。

媒体存储成本就是视频相关衍生物,比如投稿视频、转码视频带来的存储成本。

从成本出发,我们所做的优化动作是否能够真实响应到成本优化中,由此便衍生出了能够剔除业务波动这部分因素的单位成本的概念。我们将单位成本整体定义为万分钟播放成本,总体来说是把点播总成本除以万分钟播放时长,从而形成单位成本。这样的好处在于账单解释时,可以保证在这段时间内,我们所做的优化在无论是暑假或是节假日所导致的播放时长的波动中都能够进行成本的量化及评估。

6038f919e03b60a5d1a5552fedd92b6b.jpeg

体验和成本的关系可以类比为跷跷板的平衡状态。这就回归到一个问题,如何理解产品价值。作为一个业务,增长一定是第一要素,如何衡量播放成本,更好地理解产品价值也是需要持续理解的问题。

对于体验优化,简单来说,如果它不带来任何的成本增长,所有的收益都是正向,那么直接上线即可。体验优化本身一定会带来成本增长,这种情况下就需要评估体验优化的价值。最直接体现在ROI计算公式的思考方式,将体验收益通过播放时长等指标置换到对应现金流收入的规模,再除以成本增长本身在万分钟评估中产生的具体金额,从而得出上线优化后会带来的体验优化价值,

不同的业务线对ROI的定义不同,它可能会衡量是否应该追求更高质量的体验上线,从而带来更大的收益预期。体验优化的价值也会随着不同业务线的场景及所处阶段有不同的预期。对于成本优化来说,当下更多面向的成本优化的大背景是体验一定不能是显著负向,也就是对线上业务本身来说,不会造成非常明显的损害。在这种情况下我们会进行置换。

首先ROI公式的分子是成本优化所带来的实际性收益,分母是通过体验负向推演出的可能在收入方面造成的一些影响,这些影响便成为成本优化价值的系数,会随着不同的业务的阶段出现波动。

总体来说,业务最核心的是驱动其整体增长和收入,这会作为QoE的核心指标。最好理解的是QoS,通过QoS整体优化或劣化的衡量,再考虑成本的约束条件,便形成了无论对于成本优化还是体验优化来说,三者互相联动的价值评估链。

6c6de8581cacbec54cf89809ade1e598.jpeg

在短视频业务中,CDN带宽成本占到70%左右,这也是为什么在很多点播成本的优化中,更多的是面向CDN也就是传输网络之间的带宽成本优化。CDN的存储和转码之间存在一些置换性,就像上文提到的高复杂度的编码优化,虽然在转码成本方面有所提升,但更多的是带来了码率的优化,码率优化又带来类似卡顿、首帧等一系列QoS的优化,随之一定会有相关的体验提升,也会带来一些收益性增长,这便形成了成本体验之间的正反馈。

上文提到预加载方案,它通过数据冗余端侧的实现方式,带来了更多体验类的增长,这部分的置换便是体验和成本之间的置换。

0398a9d8120a92b69107354f131a3ced.jpeg

回来最初的问题,关于业务方问到播放时长没涨,但点播技术成本上涨,我们会把播放成本在账单中分为存储、转码和带宽成本。当发现相关成本上涨后,我们需要去追踪其原因。如存储成本上涨,那对应的需要关注其原因,平均播放时长没涨,此时问题可能在于投稿数量上涨,也就是用户投稿积极,在原有的转码或存储系统没有继续优化的情况下,直接导致存储及转码成本的上涨。

再者,如果带宽成本发生变化,即使播放时长等端侧消费整体的QoE数据没变,也可能会出现一些情况,即业务的播放场景变化,最直接的例子是自动播放,开启后会产生更多的数据冗余及数据流量的浪费。

此外,对于端智能中用到的各种策略,进行的相关性调整,这些可能都处于实验阶段下,不一定带来正向显著的收益。这会出现带宽成本负向的问题,那我们会把整体的总成本下转化为技术可以理解的东西,比如文件的大小、转码的任务数、播放的码率及带宽利用率等指标,这样从最开始的总成本分解到优化、劣化或是我们能够理解的一些技术性指标做相关性对应。

2.“非零和博弈”的优

a2f556c8961c72fe754c2a7a87ca4d50.jpeg

上文理解了相关体验和成本,下面会主要介绍如何进行非零和博弈优化。

首先要理解视频的生命周期,这里提到的视频生命周期更偏向于短视频业务对应的生命周期。对视频本身来说,一定会出现从新视频变成沉默期的整体的变化。而在此变化中,它又会从新视频开始,逐步在不同的用户流中进行相关推送。

如果视频内容非常棒,深受用户喜爱,那么便成为了高热视频并被广泛分发,接着热度逐渐减退,便又快速地进入了视频播放热度的衰退期,随着不同业务推荐整体时长的调整,如60天、90天甚至一年等周期,此时视频便进入了沉默期。

理解了整体的生命周期后,便产生了如何对其加以利用的思考。视频从成长期到高热期中,最可能带来的成本增长是什么?答案是带宽。视频的播放从1到1万再到100万甚至1000万的量级,其中每一个视频都会进行分发,而视频对应的分发成本一定是高速上涨的。如果我们能够提前感知这个视频会进入高热的可能性,也就是预测出视频流行度的增长趋势,那么就能够通过更高级的算法对其进行编码从而降低带宽成本。

从高热到沉默期的这段时间内我们能做些什么?首先,沉默期的特点在于,视频存在但不分发,此时即使存储和转码成本所占比例不高,但依旧存在。这就需要对其进行存储优化,这是我们能够做到的对体验影响最小且成本优化程度最大的事情。

c0a4962795ccad794e4b5e9168d642c8.jpeg

接下来针对以上提到的思路,会和大家介绍我们具体的实践案例。

首先是存储成本,不同于带宽及转码成本,存储成本存在着存续成本的可能性,即视频一直存在,去年的视频一直没删,那么就会一直计费,像滚雪球一样持续存在。

上文提到了视频从衰减期到沉默期的变化,那么也就不难理解,我们在进行存储成本优化时,核心在于抽象出两个概念,存储量和存储系数,它更偏向于反映存储单价,而存储单价本身和存储的基础架构有一定关系。

一般来说,在逻辑存储概念中,一个视频文件对应的是三副本,但当视频进入了衰退期或沉默期时,我们会对其进行冷频迁移,从技术层面就是减去一个副本,这会导致容灾的下降,且使得播放首帧延长。

又因为衰退期的存在,这种体验的劣化所占比例非常小,我们会基于存储分级的概念使其发生一些变化,这个变化可以区分视频是热视频、冷视频还是低频视频,从而对其进行相关存储架构的选型。

其次是存储量,它的定义更偏向于指导我们删谁,一个视频在多码率的条件下,会形成不同codec,不同的分辨率。一个视频甚至会有几十个不同的档位。

c7186e19735b21e12d0f69bfacee37f9.jpeg

当一个视频进入沉默期后,在所有的存续成本中,片源占比非常大,片源的优势在于如果后续再进行重转码或视频相关性定位时,它起到的作用很大。但由于转码之后高画质的保障,高档位的视频能够直接替换片源本身的大小,于是我们会进行一些档位的替代,删除相关的片源,从而进行存储的优化。

此外我们还会进行其他冗余的清理,比如存量的滚动删除,图中左侧是一个特别示例,比如一个视频在不同的分辨率下都有相关的档位,并且有不同的流媒体档位,有Dash、MP4,再者还有不同codec的档位,那么在清理时会遇到一个关键问题,视频进入沉默期后,如何最大程度保障它的可播。在能够保障可播及体验可控的情况下,我们形成了对不同视频分级做相应冗余清理的方案。

当然它一定是存在负向的。首先,上文提到的片源,如果删除了片源,并用高质量的视频进行替换,那么在画质不完全对等的情况下再进行重转,一定会损伤画质。其次,假设一个冷视频突然翻新,热度突然变高,而此时许多档位已经被删除,播放体验一定会有所降低。所以冗余清理,关键点在于我们用何种周期定义新增视频和存量视频的删除逻辑。

12591fdd0cd474e5425f0b102b2fdf93.jpeg

这是整体优化效果的示意图。从2021年12月底我们开始进行存储优化,2022年大概有40%的成本节约收益。

9a042878e4bf72e98142122b665764bf.jpeg

对于转码来说,最核心的逻辑就是如何判断高优。通常情况下,codec升级需要考虑设备兼容性,所以在原有档位保留的情况下会新增转码档位,这也就导致隐性成本的增加。但对于显性收益来说,因为码率的下降,卡顿也下降,播放体验也因此提升。同时因为码率下降,CDN的带宽容量下降,带宽成本也有所下降。

如何提前预判视频是否会变热,热度的范围是什么,这就需要一个量化指标,例如是否可以利用10%的计算成本去提升90%的用户的播放体验,从而带来带宽成本的节省。

4a1a063def8fb3819264024d26b946b6.jpeg

图中显示了从视频上传一直到视频沉默整体的视频周期。对于触发转码的时间点,要在热度之前,而且越早越好。为此就需要更多的信息输入,从而保证热度预测的准确性。预测有不同的迭代,需要根据业务对应不同的关键信息,例如头部作者、转码信息、播放请求或者视频理解等。例如从BVC0到BVC1初步只转720p。但有些场景则需要540p或1080p。如果这样的档位不存在,就需要基于播放请求去进行兜底转码,最终形成不同分层的视频热度预测。

视频的转码任务分为两种,一种是实时转码,另一种是闲时转码。我们可以把计算资源理解为一堆机器,这堆机器存放在机房里。视频投稿存在一个高峰期,当视频的投稿和视频的播放热度到达高峰期时,一定会出现视频转码任务高峰期排队的情况。与之对应的是闲时期。如何将闲置的机器转变为收益?通过利用闲时转码转码非头部10%的视频,降低整体的带宽成本。

转码存在几个指标,第一个就是转码整体CPU的利用率,第二是转出来的视频分发利用率。从实验结果来看,在BVC0到BVC1的推广过程中,我们实现了10%或者百分之十几的视频覆盖90%左右的vv。在节省带宽成本的同时,我们的转码利用率也能够达到90%以上。实现了在避免算法的浪费的同时得到带宽成本的直接性收益的预期。

f9c9a2de35946bc6bdf620e1a860347a.jpeg

对于带宽成本来说,最直接的理解是CDN的计量计费。推流多少,就需要按照多少量计费。但在实际业务中,这么多的数据不一定会全部播完,这便引申出了带宽利用率。带宽利用率的分子是真实在播放器里面播放的play size,分母是CDN计量的分发字节数。理想情况下是利用率达到100%。但在实际使用中,基本上都小于70%,甚至有的小于50%。了解带宽浪费到底在哪是非常重要的环节。

首先如果视频加载完了但没播完,那么后面的视频一定是浪费的。第二个场景SEEK,当发生了相关的SEEK的动作之后,原有的视频播放时会有续存的Buffer缓存,也就产生了浪费。第三,无论使用ABR还是手动切挡,都对应不同流的拉取。在这种情况下会出现原有档位的后续没播完的视频浪费。在短视频业务里,为了保证首帧,会非常激进地使用预加载策略,如果播完这个视频就结束,后面所有预加载任务可能都没有用到,或者一个视频是用户不喜欢的类型,立刻划走,其预加载视频可能远远大于播放的视频数据,浪费由此而来。

2393f929b76babf50198670d22cc456e.jpeg

为了解决这个问题我们进行了相关的算法优化。左边是较为传统的预加载算法。先把当前视频加载完,然后加载之后的视频,不存在任何的区分度。虽然这样做在不产生当前播放任务竞速的情况下可以使得缓存命中率很高,但是也有很多数据冗余。而且这些预加载是固定长度的,并没有考虑很多业务的交互信息、卡顿信息、视频热度信息。于是我们就衍生出动态加载。

动态加载会考虑安全水位和危险水位。只有达到安全水位才会触发下面的预加载任务。

同时安全水位会基于码率和网速进行相关性的判断。当网络好的时候,并不需要加载那么多视频,实时下载的数据足够保持播放,安全水位此时较低,可以用更多的网络带宽和数据去加载后面的视频。当网不是特别好时,安全水位需要高一点,可能会出现播完就卡顿的情况。其根本在于使用的数据和需要加载的数据是不是达到一个良好的供需关系。通过这样的算法,将加载的下载任务切换成很小的片,从而精细化的去调度应该先去加载+1+2,还是应该去加载+n。

b3523faf640dd78450d101077ee40e44.jpeg

讲完了预加载之后会发现一个问题,在整个播放链路里,除了预加载当前对应的浪费,想要去优化的整体的带宽利用率是全链路的,所以就需要控制全链路的缓存。想理解全链路缓存控制,就一定要回答浪费到底在哪。为此我们要理解浪费在数据中可以用那些抽象指标量化出来,进而去做相关的优化。

这里的优化可以分为三块。首先,除了端侧因为预加载播放等等一系列的问题带来的相关的码率优化之外,还存在一部分缓存在服务端。为了使数据整体拉得更快,服务端侧也会有对应的socket  buffer。CDN对应的缓存数据对于全链路来说也是一个不可小觑的环节。

第二块是下载器缓存。预加载的利用率优化就是下载器缓存优化。

对于媒体数据通道来说,在早期的播放器解决方案中,为了满足边下边播或者快速切换播放,通常会使用local server技术。但使用local server方案不可避免的会因为socket buffer造成的成本浪费。最直接的解决办法是去local server。将所有数据在native层进行传输和获取。

96266b4ad0fb666fc990749827a6b34b.jpeg

这张图是全链路缓存的大致流程。左侧是通过预加载缓存控制整体流量波动,右侧则是链路缓存。这里有两个概念,安全水位和危险水位,分别对应预加载的开始和停止。安全水位达到的情况下进行预加载,危险水位达到的情况下停止预加载。至于播放缓存应该要缓存多少,则需要通过数层的迭代和演算去定义。第一层是比较常见的解决方案,利用用户的网络信息、机有码码率信息以及卡顿信息进行相应的训练和理解。第二层。大家细心一点可以发现,在短视频业务中,前半部分出现卡顿导致用户的离开的概率是远远大于后半部分的。不难理解,当用户看了一会后,会更有耐心等待加载以看完该视频。于是在这种情况下,基于大盘的完播率或者播放完成度,视频前期和后期的安全水位也会及时调整。

第三块,对于buffer本身,我们需要去辨别视频是否有足够的热度,如果有,就可以在视频的片段的维度下面去进行相关的切换和水位的前置性的处理。

通过上述方法,我们甚至可以做到在基本上没有出现负向的情况下,节省5~20%左右不同业务线CDN带宽成本。

3.理解QoE,寻找平衡点

a4ed7d4114d423fd1eab29531f341488.jpeg

回到一开始的问题,既然要做优化,就需要理解优化的的空间和天花板在哪里。于是我们以QoE为支点,通过QoE的建模去寻找体验和成本之间优化的平衡点。

以卡顿为例。卡顿存在数个技术指标,例如卡顿的位置、卡顿前后、卡顿次数、卡顿时长、卡顿长短等。不同的卡顿其技术指标也各不相同。卡顿对于QoE的影响促使我们考虑,什么样卡顿会导致用户的直接划走,降低了视频播放的时长。这里我们提出了一个概念,基于卡顿所影响的退出率。该退出率会成为直接影响并撬动QoE支点。图片左边其实是体验优化的空间,右边是成本优化的空间。

想要知道体验优化是否对卡顿有成效,就要关注优化措施带来的结果是否会引起QoE建模计算出的退出率有影响。如果退出率没有明显的改观,那么用户使用时常大概率也不会有非常正向的改观。成本优化更多的是为了去冗余。冗余的直接作用是限制下载数据的量。失去了冗余,就会有卡顿的可能性。想要知道出现卡顿时到底劣化了多少,就再一次回到了刚刚提到的退出率。当卡顿劣化了0.5或1以后,退出率是否有所上升?

如果退出率不增加,那么本次操作基本是一个无损操作。如果退出率上升,就需要折算出对播放时长带来的劣化,进而在离线的验证过程中,把成本优化所带来的收益和QoE劣化所带来的对体验和收入的影响结合,算出来对应的ROI,从而决定这个实验是不是具有可行性。

f72175bd75270e715b379c2779e6954c.jpeg

在实践中我们也发现了一些问题。QoE建模不是一个大而全的事物,在不同的使用场景中卡退的表现差异也很大。在左边的场景体验下,会很快速的达到卡顿的停滞期,即出现了一个时间段即使卡顿也不会影响退出。

仔细分析发现,用户在视频播放前期对卡顿是非常敏感的。我们想到第一个办法是用起播时长置换卡顿。通过水位控制或者卡顿水位的配置提升使用体验。第二个是考虑用长卡顿去置换短卡顿。部分场景中卡顿次数的干扰明显大于卡顿时长的干扰,该办法会较为适用。所以,在优化过程中需要更多地注意一些显示指标从而帮助判断优化是否达到预期的效果。

4.使命与愿景

a693973883ba07845347ae3a6fe48437.jpeg

在做点播需求和点播整体的产品化道路上,最为直观的就是体验和成本。我们致力于找到那个平衡点,用有一定约束的成本为用户带来极致的体验。也就是关注成本,面向体验。

以上的是我的分享,谢谢大家。


698e2a7bf95b988df688e76727673947.jpeg

LiveVideoStackCon 2023上海讲师招募中

LiveVideoStackCon是每个人的舞台,如果你在团队、公司中独当一面,在某一领域或技术拥有多年实践,并热衷于技术交流,欢迎申请成为LiveVideoStackCon的讲师。请提交演讲内容至邮箱:speaker@livevideostack.com。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TensorFlow GPU不可用,WSL2安装

这个帖子写给23年刚买电脑、系统是win11,tensorflow版本是2.10以上的兄弟们。不符合的可以去看其他答案了。 这是以我三天来的安装经历来写的,希望能给后来的兄弟们减少时间的浪费。 win11,安装的tensorflow的版本都是2.12的,但…

(二)Cmd Markdown 编辑阅读器的使用效果 | 以 Cmd Markdown 编辑阅读器为例

Cmd Markdown 编辑阅读器使用指南 (一)Cmd Markdown 编辑阅读器的使用示例 | 以 Cmd Markdown 编辑阅读器为例(二)Cmd Markdown 编辑阅读器的使用效果 | 以 Cmd Markdown 编辑阅读器为例 在 Cmd Markdown 编辑阅读器( …

C语言实现Allan方差计算

Allan方差专有概念解释 1.量化噪声 量化噪声是一切量化操作所固有的噪声,只要进行数字量化编码采样,传感器输出的理想值与量化值之间就必然会存在微小的差别,量化噪声代表了传感器检测的最小分辨率水平。 2.角度随机游走 角度随机游走是宽带角速率白噪声积分的结果,即陀螺…

金三银四,大伙冲刺,SpringCloud 的 25 个面试考点

今天给大家分享SpringCloud高频面试题。 Spring Cloud核心知识总结 下面是一张Spring Cloud核心组件关系图: 从这张图中,其实我们是可以获取很多信息的,希望大家细细品尝。 话不多说,我们直接开始 Spring Cloud 连环炮。 连环炮…

直播协议:RTSP、RTP、RTCP、RTMP、HLS

流媒体传输一般采用HTTP/TCP(RTCP)协议来传输控制信息,而用UDP(RTP)协议来传输实时媒体数据(TCP开销相对较大,所以不太适合传输实时数据)。 流媒体传输一般都是采用建立在UDP协议上的RTP/RTSP等实时传输协议。为何要在UDP而不在T…

Spring事务:事务的基础 以及使用

目录 GTP前言 一、关于事务 1.事务的四大特性ACID 2.脏读、不可重复读、幻读 ① 脏读 ② 不可重复读 ③ 幻读 3.事务的隔离级别 4.事务的传播机制 ① Propagation.REQUIRED 默认 ② Propagation.SUPPORTS ③ Propagation.MANDATORY ④ Propagation.REQUIRES_NEW ⑤…

APK一键注入网络验证后台PHP源码ThinkPHP开发版

APK一键注入网络验证后台PHP源码ThinkPHP开发版 APK一键注入网络验证后台PHP源码ThinkPHP开发版 源码: https://url11.ctfile.com/d/25976711-55383299-827d49?p6724 (访问密码:6724) 修复 已去除登录提示到期问题。 功能简介 - 无注…

庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合>

庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合> 效果展示: 正文: 一、特效类大纲: 1、特效 透 2、特效 动 3、特效 映 二、特效:AC:透…

学习 Python 之 Pygame 开发魂斗罗(十三)

学习 Python 之 Pygame 开发魂斗罗(十三)继续编写魂斗罗1. 创建敌人2类2. 编写敌人2类的draw()函数3. 编写敌人越界消失函数4. 编写敌人开火函数5. 把敌人2加入地图进行测试继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗(十…

英特尔CEO基辛格:开创可持续计算新时代

近日,帕特基辛格作为英特尔CEO后,第一次来华访问。在2023英特尔可持续发展高峰论坛上,笔者有幸聆听他的演讲。他严谨又不乏幽默地给我们分享了英特尔如何践行可持续发展的思考和举措。 基辛格表示,身处科技行业,我们不…

Jetson Nano驱动机器人的左右两路电机

基于Jetson Nano板子搭建一个无人车,少不了减速电机驱动轮子滚动,那如何驱动呢?从Jetson.GPIO库文件来说,里面没有支持产生PWM的引脚,也就意味着Jetson nano没有硬件产生PWM的能力,所以我们不得不使用别的方…

容器的崛起——Docker与K8s的相爱相杀

容器的崛起 对于K8s启用docker,作为普通开发者的体感是,k8s不就是docker的集群操作吗?k8s弃用docker就像鱼反对水一样不可思议,那么这两个技术究竟是什么关系,Kubernetes 是如何一步步与 Docker 解耦的,请…

k8s学习-CKS真题-Runtime设置gVisor

目录题目环境搭建解题参考题目 该 cluster 使用 containerd 作为 CRI 运行时。containerd 的默认运行时处理程序是 runc。 containerd 已准备好支持额外的运行时处理程序 runsc (gVisor)。 Task 使用名为 runsc 的现有运行时处理程序,创建一个名为 untrusted 的 Ru…

MIPI D-PHYv2.5笔记(20) -- High-Speed Data-Clock Timing

PHY是在Forward Direction中的源同步接口(source synchronous interface)。无论是处于Forward还是Reverse信号模式,只能有一个时钟源。在Reverve Direction中,时钟是在Forward Direction中被发送的。 图1 Conceptual D-PHY Data a…

本地目录映射到公网访问

1 环境搭建 1.1 nodejs安装 首先是安装nodejs,下载地址:https://nodejs.org/zh-cn/download 选择windows exe版本直接下载。 解压可以得到如下文件: 然后添加环境变量保证在任意终端可以直接使用命令。 当然也可以直接下载msi文件进行安装…

AD8226ARZ-R7-ASEMI代理亚德诺AD8226ARZ-R7车规级芯片

编辑-Z AD8226ARZ-R7芯片参数: 型号:AD8226ARZ-R7 输入电压噪声:22 nV/√Hz 输出电压噪声:120 nV/√Hz 电流噪声:100 fA/√Hz 输入偏移:200μV 输出偏移:1000μV 输入偏置电流&#xff…

得物 API一站式协作平台的一些思考

1.背景 Mooncake是得物API一站式协作平台。从2022年3月份开始负责Mooncake,到现在已经一年了,回顾这一年,Mooncake大的阶段上,总共经历过两个版本: 1、Mooncake 1.0: 面向前端和客户端的mock平台,主要解决接口调用者…

PHP实现以函数的方式计算阶乘,使用函数输入数值逆序输出的两个代码程序

目录 前言 一、实现以函数的方式计算阶乘 1.1运行流程(思想) 1.2代码段 1.3运行截图 二、使用函数输入3个数求和,并以表单形式输出 2.1运行流程(思想) 2.2代码段 2.3运行截图 前言 1.因多重原因,…

项目沟通管理流程的6大规范步骤

1、建立沟通计划 需要对整个项目的沟通对象、沟通内容、沟通频率、沟通方法等各方面,进行计划和安排。尤其需明确沟通机制,建立完整的沟通计划。并根据项目沟通的具体情况,实时添加和修订计划,以保证沟通管理计划的持续适用性。 项…

电脑重装了系统开不了机怎么办?

我们的电脑办公用久后也会出现故障问题,例如卡顿反应慢等等,这时候就要进行重装系统了,但是很多小伙伴重装系统后会出现开不了机的问题,其实我们比较常见的也就是电脑重装系统开不了机的情况。有很多小伙伴反映自己不知道应该怎么…