工程实践,淘宝直播高画质低延时技术探索-程序员宅基地

技术标签: 算法  网络  计算机视觉  编程语言  大数据  

本文转载自淘系技术。

前言


目前5G新基建正在迈入起航阶段,5G相比目前广泛使用的4G,它具有更高的速率,更大的容量,同时延迟更低,可靠性更高。在5G时代,视频得益于网络带宽的提升,未来将成为主流的传播媒介。越来越多的业务和应用将视频化,直播化。大量互动的内容将通过5G以低延时的方式以视频的形式传输。

5G将对视频分辨率和清晰度提出越来越高的要求。淘宝作为一个数亿级用户的短视频与直播平台,业务多样,两端用户分布广,设备和网络情况复杂,给多媒体内容存储和分发带来巨大挑战。在内容生产过程中把控好质量和成本,在内容分发和消费过程中确保用户体验,是当前面临的主要问题。为了解决这个问题,我们有两个优化目标,一是在画质不变的前提下降码率,二是在码率不变的前提下提升画面质量。

淘宝直播高清低延时系统架构

在降码率上,我们自研高效编码器,升级播放架构,添加智能ROI,场景编码,智能码控等工具,有效地降低了视频码率带宽。在这些技术中,高效的编码器能够在质量不变的前提下显著降低码率;场景编码能够根据不同的画面内容配置合适的编码参数;ROI挑出画面中人眼比较关注的区域交给编码器重点编码;智能码控根据人眼主观特性,消除因为超过人眼阈值而浪费的码字。

在画质上,我们使用前处理增强,去噪,超分高动态范围等算法提高生产内容的观感质量;在体验优化上,通过低延时编码技术,在降低了编码延迟的同时损失很小的码率,增加观众和主播的体验。

围绕着提高问题发现、问题处理效率的出发点,具备数据采集、存储、异常事件收集、智能告警、告警数据运营、可编码诊断平台、故障自动化处理、变更联动等能力。我们搭建了一套基于淘宝直播的全链路监控体系,从音频,视频,网络这三个方面入手去解决目前淘宝直播全链路的现有问题以及将来可能出现的问题。不断去优化整套高画质低延时系统。

与此同时,我们建立了客观质量和主观质量评价体系,采用vmaf,psnr,ssim这一系列的指标作为客观质量评价。针对海量无源场景,我们还基于cnn建立了无源评价模型,保证无源场景下质量评价的准确性。以这些有效的评价手段来确保“画质不变”,并监控线上视频质量。


端上窄带高清



▐  S265编码器

带宽成本是视频服务中非常重的基础设施成本,如何在保证视频质量的前提下降低成本是整个链路中至关重要的一环。相机采集到的视频数字信号,数据带宽通常都非常高,以720p 25fps为例,带宽高达263.67Mbps,很难存储和发送。

好在视频图像内部,帧与帧之间存在非常高的相关性,采用压缩技术去除相关性后,可以将带宽降低到原来的100-400倍。视频压缩标准主要由ISO(国际标准组织)制定的MPEG系列和ITU(国际电信联盟)主导的H.26X系列,每隔十年时间,视频压缩标准升级带来的压缩率会提升一倍。

h265作为比h264更新一代的视频压缩标准,提供了更灵活的编码结构和划分方式,并在在运动补偿、运动矢量预测、帧内预测、变换、去块滤波、熵编码等方面进行了大量改进与优化,得益于这些新的编码工具和特色技术,相同画质下最高可以比H.264节省一半码率,为了在不牺牲画质的前提下节省码率,h265成为我们首选的编码标准。

Ali265是淘宝自研的高性能H.265编码器,对比业界开源的X265可实现BDrate20%以上的增益,对比X264则有40%以上的增益。目前已在淘宝直播,优酷视频,阿里郎会议,VMate,UC云盘等业务中上线使用。

Ali265 JCTVC class B~F sequence


Ali265 VS   X265(RC=ABR)

Ali265 VS   X264(RC=ABR)

速度档次

BitSaving@

Same quality

SpeedRatio@

same bitrate

BitSaving@

Same   quality

SpeedRatio@

same bitrate

Veryfast

-20.2%

210%

-40.7%

55%

Medium

-18%

396%

-42.3%

66%

veryslow

-21.5%

620%

-50.4%

62%

淘宝直播技术团队联合阿里云团队开发了s265编码器,对比业界常用的开源软件X265,1pass单遍编码在相同psnr指标下:

  • veryslow速度档次有28%码率节省。

  • medium速度档次有36%码率节省。

  • crf模式与abr模式节约的码率接近。

S265编码从码率控制,编码工具两个方向优化编码质量,并从快速算法,工程算法两方面引入速度优化算法。

码率控制

为了进一步提高压缩质量,在编码器框架标准一定的情况下,编码器算法优化主要的方向是找到策略选择出最优的编码方法和编码参数,从而获得更好的码率节约。合理分配码率是编码器的一个重要工作,码率控制的目标是把码字分配到更有价值的地方,从而在目标码率下使得编码失真降到最低,或者在失真固定的前提下使码率降到最低。

码控需要解决两个经典问题,一是帧级码控和块级码控根据目标码率来分配每个GOP、帧、编码块的码字数量,二是块内编码时以最合理的方式把这些码字分配到每个编码块中。

在帧级别码控中,传统方法统计所有已编码帧的长期复杂度,根据长期复杂度及当前码率之间的比例计算出QP,这样一来,QP对帧复杂度越来越不敏感,导致编码质量下降或码率过剩。特别是在计算首帧qp时,以往算法采用了一个只和当前码率有关的经验值。我们基于cutree理论准确估计预分析长度中ipb帧的码率占比和预期编码大小,从而在编码前获得更准确的量化系数。

块级码控分配则受时域cutree和空域AQ影响。在时域上IBP帧的重要性是明显不同的,被后续帧参考的块,不仅影响自已本身的质量,还会影响到后续帧的质量,因此被参考更多的块需要进行高质量编码。cutree算法根据帧内预测代价和帧间预测代价计算信息的传递比例,算出当前块对后续序列的影响程度,进而调整qp偏移。但考虑到在不同的噪声能量,运动强度,纹理边缘强度,以及编码参数下,不同参考块的调节为后续帧的节约比例是不一样的, 所以s265通过参数训练的方法,获得多个因素对传递效率的影响,得到一个更准确的信息传递比递,从而更合理地在时域上分配码率。

cutree传递过程

另一方面,空域上各块之间的重要程度也是不一样的。人眼是视频的最终观察者,从人类视觉系统出发,不同的块在人眼中的视觉冗余不相同,比如人眼存在视觉掩蔽效果,它对显著纹理和强边缘附近的噪声不敏感,将码率更多分配向人眼敏感的平坦区域,可以得到更好的主观质量。在编码器中,我们通过计算块的方差能量及边缘能量作为块的代价,研究不同块能量和人眼感知程度之间的关系,估计出块间码率配分对人眼注意力的影响,合理分配码率到更重要的纹理块,提高视频感知编码效率。

编码工具

在编码工具上,S265对传统的场景切换检测,帧类型决策,SAO,DEBLOCK,两遍编码,RDOQ等编码工具算法做了改进,并实现一批编码工具。

比如在参考帧模块,有较多的工具可以提高参考效率。首先长期参考帧和广义B帧等帧类型可以提高预测质量,长期参考帧针对背景很少发生变化的直播场景,它有效减少信息经过多帧传递带来的损失,引用长期参考帧可将平均EV提高大概0.25dB。而传统P帧改为广义b帧,采用双向预测取代单向预测从而降低噪声,光照变化,采样误差等预测残差源。

在扩充了帧类型后,我们基于参考强度做IBP帧帧类型决策。然后在minigop内部,我们使用金字塔结构的参考关系,得到比传统结构获得更短的参考距离。最后,在管理和选择参考帧时,我们考虑到静止块和运动块的区别,静止块倾向于参考质量高的帧,运动块倾向于参考时间近的帧,所以针对场景筛选出这两种类型的参考帧能得到更好的参考质量。

速度优化

HEVC编码器带来了编码效率的提升,但很多新的编码工具都存在计算复杂度过高的问题。因此,优化编码器速度,在高端机上能打开更多的编码工具,搜索更大的编码模式空间。进一步提升编码质量。在低端机上则能降低CPU发烫和编码卡顿的现象。

HEVC可以将图像块从64x64划分到4x4,同时块的类型模式激增,备选的编码模式数量是h264的数倍,块划分及模式决策因此成为一个重要的瓶颈。

所以在RDO中,减少CU划分层级的搜索次数,筛选出一些必要的层级是减少计算量的重要手段。首先利用时间和空间相关性,可以从参考块获取到一些先验信息,再结合本块的运动信息和纹理信息,分析预判出当前块CU层级的最大估计层级和最小估计层级。

其次,在决策过程中的提前跳出策略也可以大幅降低计算量,我们根据图像纹理的平坦程度,或者各种模式下的rdcost对比,提前跳出当前的模式遍历。而在一些图像非线性的场景,我们通过CNN深度学习模型辅助决策模式。

进入决策模块的内部,同样存在大量复杂的计算。帧内预测存在35种模式,我们可以通过贝叶斯理论,求出最简单的几种模式后,估计出最佳模式最可能出现的位置,从而为帧内模式筛选过程提升一倍速度并将损失控制在0.01db。

另外,帧间预测的运动搜索是从参考帧寻找最佳匹配块的过程,它的分像素搜索需要做7抽头或者8抽头的插值滤波,计算量很大。我们所以可以利用整像素的信息建立二元二次误差平面方程,估算最佳分像素点的位置,避免了分像素的完整搜索过程。

在评价模式的优劣时通常采用rdcost作为模式的代价,它需要计算编码比特数和编码失真。这就需要将编码系数进行熵编码计算码流长度,同时还要将编码系数变换回时域求失真。为了降低rdcost的计算量,我们采用了失真和码率的线性估计算法,包括两个部分:

其一是量化误差能量在频域计算,利用IDCT变换的能量不变性,计算量化余数的平方和估计失真;

其二是建立编码系数特征信息和码流大小之间的线性关系,直接从系数特征信息估计出熵编码的大小。通过这个方法可以跳模式代价计算的熵编码过程以及,反变换,反量化,重建,SSE等过程。节约了大量的计算。

在rdo之外,我们还改进了slicetype决策算法,动态拉格朗日因子调整算法,快速deblock和sao决策等。

在工程优化方面我们也添加了多项优化,首先是C函数优化,我们通过优化流程逻辑,拆分特殊路径,合并分支,查表,循环优化等方法给rdoq模块,系数解析,deblock等模块带来了接近一倍的提升;其次针对密集计算的函数我们simd化并优化汇编代码的执行速度。

s265经过快速算法与工程两个层次上的优化,我们为HEVC编码带来了明显的性能提升。从而在低端iphone上实现720P 30帧每秒的实时编码。

▐  智能码控

智能码控是淘宝自研的码率控制算法,普通ABR或CBR码率控制为了追求目标码率,在低复杂度场景浪费了大量码率,根据人眼主观质量模型,当psnr高于一定阈值后,再提高质量,人眼无法察觉,只会消耗过多码字。我们使用机器学习方法,根据17种历史编码信息和待编码帧的复杂度,预估出待编码帧在质量阈值以上的量化系数,并限定在ABR目标码率以下,确保每个帧都能以最合适的码率编码。

经过淘宝直播线上验证,可达到15%的省流,在钉钉直播中使用更是节省了52%的带宽并降低了62%的推流侧卡顿。

▐  场景编码

由于当前淘宝直播种类的丰富性,各种场景下的纹理,光照,背景,运动程度都是不一样的。户外主播经常走动,画面帧变化幅度频率高。美妆主播大多坐在室内,光照基本上比较偏亮。珠宝类主播主要是拍摄物品,画面多静止不动。面对形形色色的直播场景,单一的编码器配置并不能满足当前淘宝直播的需求,开启或关闭某些编码工具对视频编码效果影响不一致,如何针对内容选择最佳参数成为业界研究的方向。

在此需求下,我们提出了基于不同场景的编码参数配置策略。首先,我们通过多个深度学习与机器学习模型对数万条各种内容的直播视频进行了数据训练分类,包含两个大的特征维度,分别是语义特征信号特征

语义特征包含:主播分级,商品特征,环境特征,声音特征,时域空域RoI。

信号特征包含:运动特征,纹理特征,噪声特征,亮度特征。通过对不同特征种类的视频集,我们单独使用大规模服务器集进行最佳编码参数搜索,自动化高效地搜索到适合当前视频编码的最佳编码参数组合,在提升画质的同时能尽可能地减少码率消耗。并最终根据编码参数集进行聚类分为多个参数配置项。

在主播需要推流的时候,首先进行标准的编码参数配置进行推流。收集一定的数据之后,我们将得到的视频语义特征和信号特征送入自适应决策引擎,通过里面的深度神经网络进行视频分类,决策出当前视频应该下发的编码参数配置,然后我们将新的参数配置重新送入编码器进行新的推流,以此优化使主播获得当前情况下最优质的视频编码。通过此方法,我们在淘宝直播里面获得了7-10%的BDrate收益。在淘拍场景下获得了40%的BDrate收益。

▐  低延时编码

在直播中,低时延意味着高效率和优质体验。试想以下场景:

  • 场景一:当主播展示下一个商品后,10秒才收到上一个的商品的提问。

  • 场景二:钉钉课堂直播中,老师提问后迟迟得不到学生的反馈,浪费部分时间。

这些场景给用户带来糟糕的体验,使得直播卖货、直播课堂效率低下。当5G普及,会带来更低的时延,带来更好的体验,但是当下还是4G为主,降低时延有很有必要。

端到端延迟主要分布在采集、编码、传输、转码、分发、播放等各个部分,这部分主要优化编码延迟。编码延迟又分为多线程导致的延迟、缓存帧数延迟、B帧数带来的延迟等。

其中编码延迟最大的一部分来源于编码器缓存,通过分析编码前的缓存图像,可以大大的增加编码效率。如果粗暴的降低编码器缓存,可以实现较低的延迟,但是质量损失比较高。

所有产生了一种想法,能不能用较少的缓存去模拟较长的缓存的效果?

通过分析cutree的原理,结合统计lookahead长度跟传递代价的关系,可以发现缓存长度跟传递代价很强的线性关系,如下图所示:

根据场景可以用不同的预测模型变种,最终实现用较短的lookahead模拟较长的lookahead的效果,测试在直播素材中lookahead4优化后比优化前可以节省13.5%的码率,有效的降低了编码延迟,结果示意图如下。

同时,在之前的测试中发现,该优化对场景不敏感,运动简单场景和运动复杂场景提升同样有效。

过去一年,我们采用前述优化,将265码流在画质不变的前提下,将码率从1.4M下降到800K。

▐  画质增强

在淘宝直播的场景中,大主播有自己的专业设备与团队,直播出来的视频与音频都是比较高质量的。但是针对中小主播,用户的行为不可控。因此产生的结果就是很多中小主播产生的视频质量比较低,收获的观众数量也比较少。针对这种情况,我们选取了用户习惯产生最严重的几种情况,对这一类主播进行了画质增加的,显著提升了用户的直播体验。


下面介绍一些已经有的应用效果。

去抖:

现代编码器能够较好的处理平坦纹理和平移运动,前者通过帧内预测来消除空间相关性,后者通过运动搜索来消除帧与帧之间的时间相关性。但是在视频采集过程中,由于摄像机抖动产生的视频帧抖动,编码器不能够很好的处理;由于抖动剧烈的一般是中小主播,且携带的设备比较老旧,我们考虑从采集源来改善视频帧,最终在这里我们采用相机路径平滑算法来去除视频帧中的抖动。

去噪:

视频直播在灯光不太理想的情况下,摄像头采集的画面会产生明显的飞蚊噪声和高斯白噪声,严重影响用户对视频内容的感受,这种情况下,有必要对视频进行降噪。

现有的很多优秀的云端去噪算法,其实对于移动端来说采用深度学习的方法就不合适。虽然现在有很多移动端深度学习框架,但是毕竟还没有跟机器是配得非常好,针对很多中低端的手机其实跑不动这种生成模型的。基于此,我们在移动端主要是考虑效率,那么我们就采了基于维纳滤波的时域降噪算法方式来实现,进行训练和优化。

超分:

针对一些小微主播,录播设备只能支持360p,最终观众端看到的视频会通过插值等传统方法进行放大为720p。这样获得的视频帧难免产生模糊效果,影响直播观感。得益于深度学习在移动端的优化,我们在部分高端机实现了移动端视频帧的实时超分。

在众多的网络架构中,我们最终选择了性能最佳的FSRCN方案,网络的架构图如下所示。在训练过程中,我们精选了1W+淘宝个品类的高清大图,结合业界的高清开源数据集,利用样本增强技术,训练了5000轮左右的模型达到收敛效果。此外,为了消除图像分块带来的边界效应,我们做了图像重叠合并的操作,在增加部分计算时间的情况下带来了更好的超分效果。

为了在手机端实时运行,避免占用过多资源,我们优化反卷积计算,并针对人眼视觉特性,对强纹理和静止区域部分像素进行超分,以此大幅提高移动端的效率。

▐  4K实战

淘宝直播与中国电信浙江公司合作了全国首场5G电商直播,利用5g直播下的超高清画质和超低时延给消费者更好的线上购物体验。消费者除了可以看到直播间的整体情况,还能够远程自主对局部进行放大,非常清晰地看到商品的细节信息。让线上购物具有逼真的线下现场购物感受。

未来凭借5G通信技术与极致的编码优化和画质优化的结合,能给直播带货体系带来深层次的改变。4K,VR,AR等技术的成熟将会给直播场景带来更多产品和更好的体验,带来更多新型的应用场景,沉浸式体验和全画幅体验使用互动感和真实感更强。通过技术的赋能,淘宝直播间的可看性越来越强,淘宝直播所能覆盖的场景、所能覆盖的领域也会越来越广。



低延迟传输



▐  低延迟播放器

常规播放器的延迟分析。目前基于TCP的直播传输技术主要有 HLS和RTMP/HTTP-FLV两个协议,其中HLS直播的延迟一般在10秒以上,HTTP-FLV直播的延迟一般在6到9秒,从推流、cdn分发到播放的整个直播链路看,延迟的大头来自播放端。在播放器中,几乎每个线程都有自己的缓冲区,这些缓冲区的作用是平滑整个播放链路的抖动,它们的大小决定了播放过程中的播放延迟和播放的流畅性。VideoBuffer和AudioBuffer用来存放待解码的音视频 packet,该缓冲区是为了平滑网络的抖动,推流、CDN传输和播放下载的抖动都会堆积到播放端,这是常规播放器延迟最大的一个产生点,为提升直播的整体流畅度,缓冲区延迟一般在5秒以上。

基于TCP的媒体传输并不适用于低延迟直播场景,主要原因如下:

  • 重传慢,TCP追求的是完全可靠性和顺序性,丢包后会持续重传直至该包被确认,否则后续包也不会被上层接收,且重传超时时间一般200ms,会造成接收侧帧抖动。

  • 上层无法针对优化,TCP拥塞控制和 Qos 策略在操作系统内核层实现。

  • 拥塞判断不准确,基于丢包的拥塞控制跟实际网络情况不符,丢包并不等于拥塞,也会造成发送链路 bufferbloat,链路RTT增大。

我们的低延迟传输SDK是基于WebRTC打造的,使用了WebRTC的几个核心模块,包括 RTP/RTCP、FEC、NACK、NetEQ、JitterBuffer、音视频同步、拥塞控制等。NetEQ和JitterBuffer分别是音频和视频的网络抖动缓存区,这是传输SDK延迟最大的一个产生点。RTP over UDP能够更好地对抗公网的丢包,结合自适应缓存和Qos优化,确保直播整体流畅度的条件下,我们的JitterBuffer的缓冲区延迟能够控制在700毫秒以下,直播观看延迟在1秒左右。

播放器对低延迟传输SDK的接入适配。我们对低延迟传输模块封装了FFmpeg的扩展demuxer,将支持低延时传输协议的demuxer注册到FFmpeg,播放器通过FFmpeg打开网络连接读取数据,这种接入方案基本不影响播放器原有逻辑,对播放器改动较小,主要改动点如下:

  • 缓冲区大小控制。使用低延迟传输协议拉流时,网络的抖动缓冲区是底层传输模块的JitterBuffer,播放器层的JitterBuffer的缓存应设置为0秒,否则会引入多余的延迟。

  • 卡顿统计修改。一般播放器根据缓冲区水位大小判断卡顿事件,当缓冲区为空或持续空一段时间,这会导播放画面卡顿,同时触发卡顿事件,播放器的JitterBuffer被低延迟传输SDK接管后,卡顿事件也应该由低延迟传输SDK触发。

  • 音频解码流程。从NetEQ获取的音频已经是PCM数据了,播放器读取的音频数据可直接渲染,如果音频使用硬解,可能会出现解码兼容问题,现象是听不到声音,使用FFmpeg软解也是可以兼容的。


▐  低延迟服务器

低延迟传输是一个综合性的问题,要从整体入手,不仅要从设计上考虑,还需要客户端,服务器,数据系统紧密配合。从传输协议设计上采用rtp/rtcp方案。基于udp半可靠传输,技术成熟,更加适合音视频场景。难点在于既要降卡顿,也要降延迟。我们使用的整体算法策略如下:

  • 拥塞控制

拥塞控制gcc&bbr算法针对直播场景深度优化,同时兼顾秒开和延迟。

  • 分层丢帧

基于B帧的SVC算法和丢gop策略在网络拥塞时保证快速降低码率,解决拥塞。

  • 重传控制

重传控制既要抑制重传风暴,也要保障快速重传。

  • 平滑发送优化

平滑发送策略防止网络突发,平滑流量。同时针对秒开场景深度定制。重新设计发送机制和算法,发送性能大大提高。

  • 秒开优化

服务器和端配合的多种秒开策略,保证极速开播。淘宝直播大盘平均秒开率94%以上。

  • 信令优化

从信令设计上采用rtcp app私有协议,和音视频传输使用一个socket连接。建联协议更加精简,保障 1RTT 快速给出媒体数据。

除此之外还进行了大量策略到算法上的改进和优化。上面整体策略,基于数据驱动,针对场景不断迭代优化。


▐  端到端全链路分段统计

我们设计的端到端延迟分段统计系统,既能统计单次播放的延迟,也能统计每个阶段延迟。不依赖ntp时间,适合超大规模网络。通过分析不同平台推流端,服务器,播放器各个阶段的延迟情况,大盘展示出来,可以针对专项做优化。



面向未来


伴随着5G网络的提速,主播侧到用户侧的延时将会越来越短;移动端本身的性能提升,各种画质增强,图像渲染技术也会慢慢硬件化。移动端的深度学习模型也逐渐变得轻量化。这使得学术界各种越来越先进的创新也得以工程化。近期淘宝直播推出的智能虚拟主播也圈起了一波粉。将来,越来越有趣的玩法也会逐渐推出,使淘宝直播不再仅仅只限于“卖货“。更可能有更多有趣的玩法,例如:主播观众实时游戏互动,虚拟主播完全代替真人直播,观众沉浸式地通过VR或者AR进行直播购物。这些都会慢慢变成现实。淘宝直播的技术将来会为用户带来越来越丰富的直播购物体验。

END

备注:视频

视频处理与理解交流群

视频相关技术,分类、理解、视频摘要等技术,若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:[email protected]

网站:www.52cv.net

在看,让更多人看到  

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/moxibingdao/article/details/109523805

智能推荐

BAT批处理脚本实例学习(三)清理系统垃圾_bat脚本清除windows通知-程序员宅基地

文章浏览阅读802次。windows系统随着使用时间,系统会越来越卡,是因为系统盘里面的临时文件、回收站文件、日志文件等占用了大量的空间。怎么快速删除这些一般人都不会用的“系统垃圾“”呢?将下面的脚本复制粘贴到空白的文本文档,并将后缀txt该为bat或cmd,运行即可:@echo offecho 正在清除系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpdel /f /s /q %sys..._bat脚本清除windows通知

金三角图形c语言,多方炮过金三角K线是什么?怎么操作-程序员宅基地

文章浏览阅读388次。多方炮过金三角K线是什么?在两个高点连线下方这一个较大的区间,股价都处于潜伏状态,目前正在冲击这两条线所形成的夹角地带,这个夹角我们叫它金三角,图中两阳夹一阴K线图形,就叫多方炮过金三角。现在股价正在冲过金三角,正是买进的时候。我要讲一下多方炮,两根阳线夹一根阴线,放量,这是典型的多方炮态势,它的市场意义是什么呢?第一天开始拉高,然后轻轻地放下来,看看有没有人吐出来,让股价回一下,然后再上去,在这...

Android连接或断开蓝牙设备 Activity onCreate() 重新创建的解决办法_android当已连接的蓝牙设备开关变化时, oncreate(bundle savedinstan-程序员宅基地

文章浏览阅读773次。最近在调试的一个项目中,发现每次连接或断开蓝牙,回到APP界面就会重新触发调用onCreate方法,最后查阅资料发现,蓝牙耳机、输入设备、软键盘这些的连接或弹出,都会让程序就重新触发onDestory() -> onCreate()。这种情况还会导致Fragment出现重叠的现象,解决办法:在AndroidManifest.xml的activity节点,声明configChanges属性如下:android:configChanges="orientation|keyboard|ke..._android当已连接的蓝牙设备开关变化时, oncreate(bundle savedinstancestate) 执

关于Win10电脑连上wifi后没网的解决办法_win10电脑连接wifi没网-程序员宅基地

文章浏览阅读700次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器关于Win10电脑连上可用wifi后没网的解决办法。#点击开始按钮Windows Powe_win10电脑连接wifi没网

element-ui常见问题总结(表单校验、表格checkbox自动取消选中等)_为什么用rpaclick过后会自动解除勾选-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏6次。在vue中使用element-ui过程中遇到的问题总结将element-ui的默认语言设置为英文1.main.jsimport Vue from 'vue'import ElementUI from 'element-ui'import locale from 'element-ui/lib/locale/lang/en'Vue.use(ElementUI, { locale })2.webpack.dev.conf.js 和 webpack.prod.conf.js 在plugins增加_为什么用rpaclick过后会自动解除勾选

Tool-微软Edge浏览器打开github慢的问题解决_edge github插件-程序员宅基地

文章浏览阅读2.8k次。Edge打不开github或者加载很慢,如果不是个人网络有问题,可以尝试在Edge浏览器的Extensions里搜索“github加速“,找到github加速插件,安装后,使用默认设置即可。然后,重新尝试打开github.com,速度变得很快。Edge打不开github或者加载很慢,如果不是个人网络有问题,尝试换用chrome浏览器,一般就可以解决了,简单快捷。_edge github插件

随便推点

已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头 (使用Access-Control-Allow-Origin解决跨域)_已被cors策略阻止:请求的资源上不存在“access control allow origin”标-程序员宅基地

文章浏览阅读6w次,点赞8次,收藏22次。问题:已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头(跨域请求失败)解决方法:使用过滤器设置Access-Control-Allow-Origin解决跨域请求第一步:创建过滤器package com.ljw.filter;import java.io.IOException;import javax.servlet...._已被cors策略阻止:请求的资源上不存在“access control allow origin”标头。

POJ 1144 Network(割点数量)_本题就是求图割点数量-程序员宅基地

文章浏览阅读479次。题目连接:Network解题思路:求无向图中割点的数量,直接套用模板,输入的时候注意一下,这里输入的量不定#include#include#define MAX 110int map[MAX][MAX], v[MAX], num[MAX], low[MAX], c[MAX], n, ans; void cut(int cur, int father, int de_本题就是求图割点数量

Ubuntu20.04LTS双系统安装详细图文教程_ubuntu20.04安装教程硬盘分区-程序员宅基地

文章浏览阅读1.9w次,点赞25次,收藏221次。本文解决了在安装中的多个问题,解决了压缩卷内存过小问题,解决了安装过程中的Turn off RST错误,提供几个好的分区方案。 _ubuntu20.04安装教程硬盘分区

直播源列表转换php,TeleList(直播源列表转换软件)V2.3.11 正式版-程序员宅基地

文章浏览阅读909次。TeleList(直播源列表转换软件)是十分优秀好用的一款直播源列表创建转换辅助工具。小编推荐的这款TeleList软件功能全面强大,简单易用,可以查重复,自定义设置多种选项,给用户提供很多使用便利,非常高效实用。TeleList快速制作支持 VLC 和 Potplayer 等播放器的 XSPF、DPL、M3U 等播放列表格式,方便实用,能够节省不必要的操作。有需要的朋友欢迎来下载使用。更新日志:..._telelist怎么用

android 定制Dialog (一)-程序员宅基地

文章浏览阅读2.2k次。主要是修改dialog的资源,也就是替换图片,或者还一个主题。主要系统的对话框,Ok下面是修改之前的系统的对话框的样式: 在桌面长按出现的对话框,或者在settings中设置动画的对话框 修改之后的对话框的样式如下: 系统对话框的样式和资源文件都在fram

ubuntu16.04 socket传输文件,开源软件SocketFileTransfer_ubuntu 转发socket-程序员宅基地

文章浏览阅读323次。socket 文件传输_ubuntu 转发socket