SVC入门知识和JSVM基础实验_yuv 编解码 svc-程序员宅基地

技术标签: svc  网络  视频  视频编码  yuv  系统  

基础之一  yuv格式

         其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。


1. SVC基础知识

     

1.Scalable Video Coding – 可分级视频编码

 

-为什么需要可分级视频编码技术(SVC)

 

  实际应用中,存在不同的网络和不同的用户终端,各种情况下对视频质量的需求不一样。例如,在利用网络传输视频信息时,由于网络带宽限制了数据传输,因此要求当网络带宽较小的时候,只传输基本的视频信号,并根据实际网络的状况决定是否传输增强的视频信息,使视频的质量得到加强。

 

  在这样的背景下,利用可分级视频编码技术实现一次性编码产生具有不同帧率、分辨率的视频压缩码流,然后根据不同网络带宽、不同的显示屏幕和终端解码能力选择需要传输的视频信息量,以此实现视频质量的自适应调整。



-可分级视频编码(SVC)是什么

 

  为了能够实现从单一码流中解码得到不同帧率(时间可分级)、分辨率(空间可分级)和图像质量(SNR可分级)的视频数据的编码技术。

  H.264 SVCH.264 AVC视频编解码器标准为基础,利用了AVC编解码器的各种高效算法工具,在编码产生的编码视频时间上(帧率)、空间上(分辨率)可扩展,并且是在视频质量方面可扩展的,可产生不同帧速率、分辨率或质量等级的解码视频。

 

2.H264 Scalable Video Coding Extension

 

H.264 SVCH.264可分级编码)作为H.264标准的一个扩展最初由JVT2004年开始制定,并于20077月获得ITU批准。

 H264可分级视频编码是H264/AVC标准的扩展 (Annex G , 2007),它是以H264/AVC标准为基础,通过各种编码工具,形成分层编码(multi-layercoding)方式,以提供时间(Temporal)上,空间(Spatial)上和图像质量(Quality)上的可调整特性,可产生不同帧率、图像分辨率或图像质量等级的解码视频。



-H264 SVC结构

 

H264可分级视频编码采用分层编码方式实现,由一个基本层(Base Layer)和多个增强层(Enhancement Layer)组成,增强层依赖基本层的数据来解码。其中,基本层(base layer)编码了基本的视频信息,实现了最低图像分辨率、帧率,并且基本层的编码是兼容H264/AVC编码标准的,能够采用H264/AVC解码器进行解码。


H264 SVC以不同分辨率的图像为基础形成分层结构(inter-layer prediction),并在此基础上每一层用Hierarchical B-picture来实现TemporalScalablity,用MGS编码来实现Quility Scalability (SNR Scalability)

 

每一层内的编码都使用了H264/AVC中帧内和帧间预测编码工具,而相邻层之间使用了SVC独有的层间预测编码工具。

 

EL(Enhancement Layer)的参考,可以是来源于同一层的其他帧,也可以是低层上采样的帧。但是不可以是更高层的帧,那样的话丢弃高层的nalu会导致低层无法解码。





     SVC(scalable video coding)的可分级 视频编码概念,简而言之,就是把视频序列分成不同的部分并赋予不同的等级,这样的思想已经渊源流传,并非H.264/SVC所独创。2007年由ITU推出的H.264/SVC标准,继承了H.264的高效压缩性,随着网络应用的普及,SVC的灵活码流适应性和对不同终端产品的匹配性,显得尤为重要。

 
SVC对分级的策略是从时间,空间和质量上,对视频序列进行分级编码(如下图)


下面,将详细描述一下SVC怎么在这些方向进行分级的:

(1)时间分级(TemporalScalability)

       时间分级就是给序列的视频帧分配不同的重要等级,以便于在实际应用中按重要程度显示帧(或在恶劣网络条件下主动放弃低等级的帧)。其实现方式是采用如下图所示的hierarchicalB结构。可以按照具体应用来设计分等级的B帧结构,然后组织起一个个GOP,再架构成整个编码序列。由于H.264/AVC中允许进行参考帧管理,使得时间分级可以直接利用这一特性得以实现。


(2)空间分级(SpatialScalability)
        空间分级的用于形成不同的图像(帧)分辨率,在实际应用中可以给不同显示屏幕的终端设备提供适配的画面,以达到提高带宽使用率的目的。具体的变现如上面的图,是在不同的分辨率序列层中进行预测,利用去相关性节省码流。在SVC中,除了提供传统的层间intra预测(Inter-layerintra prediction),还提供层间宏块模式与运动预测(Inter-layer macroblock mode andmotion prediction)和层间残差预测(Inter-layer residualprediction),这三种模式可以充分利用图像的时间和空间相关性进行分级编码,
  i.层间intra预测(Inter-layer intra prediction)
  这种预测方式的宏块信息完全由层间参考帧(一般是低分辨率的重建帧)通过上采样预测得到,在H.262/MPEG-2 Video,H.263,  和MPEG-4等编码模式中也经常被用到,但是这种方式缺乏消除时间相关性所得到的码率削减。
  ii.层间宏块模式与运动预测(Inter-layer macroblock mode and motionprediction)
    宏块使用类似AVC的帧间预测进行编码,其宏块模式采用层间参考帧相应块的模式,其对应的运动矢量也利用层间参考帧相应块的运动信息进行预测编码。这就是所谓的层间运动预测(inter-layermotion prediction)。
  iii.层间残差预测(Inter-layer residual prediction)
  利用残差的层间相关性,可以对于帧间预测的图像继续进行层间预测,以进一步削减码流。
    三种层间预测的概要图示如下:
   
在【1】中提到一个SVC设计的重要特性,每个空间增强层可以在单一的运动补偿环中解码。在对一个目标帧的解码中,其空间参考帧需要重建自己层间预测相关的intra-coded宏块和残差块,并对自己的运动矢量进行解码,运动补偿和对帧间预测的去方块滤波仅在目标帧中进行。


(3)质量分级(QualityScalability)

        质量分级往往可以被认为是一种特殊(解析度相同)的空间分级编码,因此传统的coarse-grain quality scalablecoding (CGS,粗粒度质量分级编码)很容易被想到,而在实际应用中,还发展了medium-grain qualityscalability (MGS,中等粒度质量分级编码),下面将分别描述他们:
i. CGS
CGS有类似空间分级中层间预测,但是无需有上采样的过程,为了更好的视频质量需要呈现更多的图像纹理,因此,在质量分层的层间预测中,对纹理的提纯通常通过采用更小量化步长的重新量化。为了减少计算复杂性,用于层间intra预测的参考帧deblocking被忽略,而且层间intra预测和层间残差预测将在DCT系数阶段被直接处理。
ii. MGS
由于CGS对码率控制不能灵活处理,一种叫MGS的衍生方式被提出采用,MGS可以灵活的权衡漂移(draft,运动补偿预测循环中的编解码不同步)和层次预测的编码效率。下面的图,蓝色的表示用于基础质量序列,红色表示较好质量的序列,可以根据策略灵活组合他们之间的参考关系。
其中上图(c)(d)就是MGS的灵活方式。以(d)来说,就是对 有黑色标注的Keypicture,用基础质量图像做参考,而对非Key picture使用较好质量的图像做参考, 一旦增强层丢包,则可能造成drift,drift被控制在两个Keypicture之间
对于质量分级, SVC还支持两个特性,Partitioningof transform coefficients和SVC-to-AVCrewriting,前者提供用slice来分散增强层变换系数的方法,以便于同一增强层数据被分散到几个包中,后者提供了SVC-》AVC的转码便利。
 
至此,SVC的基础入门概念就描述完了,下面将要开始看看怎么使用JSVM来做分层编解码实验。
 
2.JSVM基础实验 
 
(1)编码实验
  jsvm的实验可以从编码开始,编译完JSVM代码后,可以运行H264AVCEncoderLibTestSta ticd.exe来进行SVC编码,在这里的基础实现中首先关注spatialscalability的编码,通常可以结合temporary scalability一起进行。用以下命令运行编码:
  H264AVCEncoderLibTestSta ticd -pfencoder.cfg
  这里仅仅使用最简单的参数:
  文件encoder.cfg
******************************************************************
# Scalable H.264/AVC Extension Configuration File
OutputFile                          D:\workspace\264\svctest.264            # Bitstream file
FrameRate                            25                            # Maximum frame rate [Hz]
FramesToBeEncoded            32                              # Number of frames (at input frame rate)
GOPSize                                                                # GOP Size (at maximum frame rate)
BaseLayerMode                                                    # Base layer mode (0: AVC w larger DPB,
                                                                                      1:AVC compatible, 2:AVC wsubseq SEI)
SearchMode                                                          # Search mode (0:BlockSearch, 4:FastSearch)
SearchRange                        32                                # Search range (Full Pel)
#=================== LAYERDEFINITION ==================
NumLayers                                                                    # Number of layers
LayerCfg                              layer0.cfg                        # Layer configuration file
LayerCfg                              layer1.cfg                        # Layer configuration file
******************************************************************
 
文件  layer0.cfg
******************************************************************
# Layer Configuration File

#================= INPUT / OUTPUT ====================
SourceWidth        176                                        # Input  frame width
SourceHeight      144                                        # Input  frame height
FrameRateIn        25                                          # Input  frame rate [Hz]
FrameRateOut      25                                          # Output frame rate [Hz]
InputFile            D:\workspace\264\mobile_qcif.yuv            # Input  file
ReconFile            rec_layer0.yuv                  # Reconstructed file
SymbolMode                                                    # 0=CAVLC, 1=CABAC
******************************************************************
文件 
layer1.cfg
******************************************************************
# Layer ConfigurationFile
#============================== INPUT / OUTPUT===============
SourceWidth        352                                        # Input  frame width
SourceHeight      288                                        # Input  frame height
FrameRateIn        25                                          # Input  frame rate [Hz]
FrameRateOut      25                                          # Output frame rate [Hz]
InputFile            D:\workspace\264\mobile_cif.yuv            # Input  file
ReconFile            rec_layer1.yuv                  # Reconstructed file
SymbolMode                                                    # 0=CAVLC, 1=CABAC
 
InterLayerPred                                            # Inter-layer Prediction (0: no, 1: yes, 2:adaptive)
UseESS                                # ESS
ESSCropWidth      352            # cropping width
ESSCropHeight    288            # cropping height
ESSOriginX                        # cropping origin X
ESSOriginY                        # cropping origin Y
ESSChromaPhaseX0                # chroma phase x 0 or -1, default = -1
ESSChromaPhaseY0                # chroma phase y -1 to +1, default = 0
ESSBaseChromaPhaseX0        # base chroma phase x 0 or -1, default = -1
ESSBaseChromaPhaseY0        # base chroma phase y -1 to +1, default = 0 0
******************************************************************
本实验将编码双层的SVC文件,分别包含352x288和176x144两个分辨率,需要注意的是这里需要输入的是两个分辨率对应的YUV文件,在开发实际应用中,将是对输入的高分辨率视频按需求进行下采样得到相应低分辨率的输入码流。理解上面的配置文件可以阅读JSVM的“SoftwareManual.doc”。
以下是实验结果
*****************************初始实验结果********************
JSVM 9.15 Encoder
 
profile & levelinfo:
=====================
DQ=  0:  Main @ Level1.1
DQ= 16:  Scalable High @ Level 2.1

AU        0: I      T0 L0Q0    QP28    Y 35.0921  U 36.6779  V36.4204        66768 bit
            0: I      T0 L1Q0    QP28    Y 35.4271  U 37.4696  V37.2485      206872 bit
AU        8: P      T0 L0Q0    QP28    Y 34.7829  U 37.1181  V36.7810        26280 bit
            8: P      T0 L1Q0    QP28    Y 35.4518  U 37.6578  V37.4747      101464 bit
AU        4: B      T1 L0Q0    QP31    Y 32.5973  U 36.1283  V35.5269          4264 bit
            4: B      T1 L1Q0    QP31    Y 32.8378  U 36.9262  V36.4150        21624 bit
AU        2: B      T2 L0Q0    QP33    Y 31.7760  U 35.9120  V35.3318          2272 bit
            2: B      T2 L1Q0    QP33    Y 32.1271  U 36.4808  V35.9225        11352 bit
AU        1: B      T3 L0Q0    QP34    Y 31.9559  U 36.2816  V35.7872          1136 bit
            1: B      T3 L1Q0    QP34    Y 31.4860  U 36.5493  V36.0923          5672 bit
AU        3: B      T3 L0Q0    QP34    Y 31.1236  U 35.5697  V34.9500          1136 bit
            3: B      T3 L1Q0    QP34    Y 31.2954  U 36.0335  V35.5473          6056 bit
AU        6: B      T2 L0Q0    QP33    Y 31.6214  U 35.7877  V35.3442          2368 bit
            6: B      T2 L1Q0    QP33    Y 32.0268  U 36.4989  V36.0755        11080 bit
AU        5: B      T3 L0Q0    QP34    Y 31.2529  U 35.3809  V34.8735          1296 bit
            5: B      T3 L1Q0    QP34    Y 31.4222  U 36.0127  V35.4764          6200 bit
AU        7: B      T3 L0Q0    QP34    Y 31.8522  U 35.9385  V35.6081          1064 bit
            7: B      T3 L1Q0    QP34    Y 31.7233  U 36.4942  V36.0999          6768 bit
.
.
.
SUMMARY:
                                              bitrate      Min-bitr    Y-PSNR    U-PSNR    V-PSNR
                                            --------- ---------- -------- -------- --------
    176x144 @  3.1250    115.5750    115.5750  34.9069  37.0066  36.5668
    176x144 @  6.2500    132.4000    132.4000  33.6463  36.5663  35.8824
    176x144 @12.5000    149.7562    149.7562  32.6071  36.1343  35.3446
    176x144 @25.0000    164.7937    164.7937  31.9890  35.8764  35.0516
    352x288 @  3.1250    514.3438    514.3438  35.4914  37.5844  37.4000
    352x288 @  6.2500    606.0562    606.0562  34.0656  37.1580  36.8032
    352x288 @12.5000    706.5750    706.5750  33.0123  36.7826  36.3039
    352x288 @25.0000    809.1812    809.1812  32.2313  36.4422  35.9078
******************************************************************
从实验结果可以看到,以8帧为一个GOP,实验就像上面hierarchicalB结构图(a)那样分了4个时间层次,并且分别列出两种分辨率。从最后的统计结果可以看到,作为GOP的关键帧,无论是空间基础层还是增强层都占可主要的码流量。
(2)解码实验
解码实验将采用H264AVCDecoderLibTestSta tic,解码输出自能得到最好的流,也就是基础层结合增强层得到的最高层次的流,本实验中是352x288的25帧序列。解码过程显示如下:
D:\workspace\project\jsvm\bin>H264AVCDecoderLibTestSta ticdD:\workspace\264\svct
est.264 D:\workspace\264\rec_svc
JSVM 9.15 Decoder

---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  NON-VCL: SEQUENCE PARAMETER SET (ID=0)
  NON-VCL: SUBSET SEQUENCE PARAMETER SET(ID=0)
  NON-VCL: PICTURE PARAMETER SET (ID=0)
  NON-VCL: PICTURE PARAMETER SET (ID=1)
  NON-VCL: PICTURE PARAMETER SET (ID=2)
  NON-VCL: SEI NAL UNIT
  Frame      0 ( LId0, TL 0, QL 0, AVC-I, BId-1, AP 0, QP 28 )
  Frame      0 ( LId1, TL 0, QL 0, SVC-I, BId 0, AP 1, QP 28 )
---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  Frame      8 ( LId0, TL 0, QL 0, AVC-P, BId-1, AP 0, QP 28 )
  Frame      8 ( LId1, TL 0, QL 0, SVC-P, BId 0, AP 1, QP 28 )
---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  Frame      4 ( LId0, TL 1, QL 0, AVC-B, BId-1, AP 0, QP 31 )
  Frame      4 ( LId1, TL 1, QL 0, SVC-B, BId 0, AP 1, QP 31 )
---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  Frame      2 ( LId0, TL 2, QL 0, AVC-B, BId-1, AP 0, QP 33 )
  Frame      2 ( LId1, TL 2, QL 0, SVC-B, BId 0, AP 1, QP 33 )
---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  Frame      1 ( LId0, TL 3, QL 0, AVC-B, BId-1, AP 0, QP 34 )
  Frame      1 ( LId1, TL 3, QL 0, SVC-B, BId 0, AP 1, QP 34 )
---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  Frame      3 ( LId0, TL 3, QL 0, AVC-B, BId-1, AP 0, QP 34 )
  Frame      3 ( LId1, TL 3, QL 0, SVC-B, BId 0, AP 1, QP 34 )
---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  Frame      6 ( LId0, TL 2, QL 0, AVC-B, BId-1, AP 0, QP 33 )
  Frame      6 ( LId1, TL 2, QL 0, SVC-B, BId 0, AP 1, QP 33 )
---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  Frame      5 ( LId0, TL 3, QL 0, AVC-B, BId-1, AP 0, QP 34 )
  Frame      5 ( LId1, TL 3, QL 0, SVC-B, BId 0, AP 1, QP 34 )
---------- new ACCESS UNIT ----------
  NON-VCL: SEI NAL UNIT
  Frame      7 ( LId0, TL 3, QL 0, AVC-B, BId-1, AP 0, QP 34 )
  Frame      7 ( LId1, TL 3, QL 0, SVC-B, BId 0, AP 1, QP 34 )
 
从上面的过程中可以看到所有的基础层和增强层原始都被使用到了,那么要想仅仅解码基础层的序列该如何操作呢?就要用到下面介绍的流提取工具BitStreamExtractorStatic
(3)流提取实验
用BitStreamExtractorStatic 提取svc文件里的相应子流,在输入的参数不足时,会列出svc文件中可以提取的各层:
D:\workspace\project\jsvm\bin>BitStreamExtractorStatic dD:\workspace\264\svctest
.264
JSVM 9.15 BitStream Extractor
Contained Layers:
====================
            Layer    Resolution    Framerate    BitrateMinBitrate          DTQ
                      176x144            3.1250        115.60          115.60    (0,0,0)
                      176x144            6.2500        132.40          132.40    (0,1,0)
                      176x144          12.5000        149.80          149.80    (0,2,0)
                      176x144          25.0000        164.80          164.80    (0,3,0)
                      352x288            3.1250        514.30          514.30    (1,0,0)
                      352x288            6.2500        606.10          606.10    (1,1,0)
                      352x288          12.5000        706.60          706.60    (1,2,0)
                      352x288          25.0000        809.20          809.20    (1,3,0)
             
下面是一个成取176x144的25帧率序列的实验:
D:\workspace\project\jsvm\bin>BitStreamExtractorStatic dD:\workspace\264\svctest
.264 D:\workspace\264\ext_svc.264 -e 176x144@25:164.8
JSVM 9.15 BitStream Extractor

Contained Layers:
====================
            Layer    Resolution    Framerate    BitrateMinBitrate          DTQ
                      176x144            3.1250        115.60          115.60    (0,0,0)
                      176x144            6.2500        132.40          132.40    (0,1,0)
                      176x144          12.5000        149.80          149.80    (0,2,0)
                      176x144          25.0000        164.80          164.80    (0,3,0)
                      352x288            3.1250        514.30          514.30    (1,0,0)
                      352x288            6.2500        606.10          606.10    (1,1,0)
                      352x288          12.5000        706.60          706.60    (1,2,0)
                      352x288          25.0000        809.20          809.20    (1,3,0)
WARNING: Bit-rate underflowfor extraction/inclusion point

============Extraction Information======
Extracted spatail layer  : 176x144
Extracted temporal rate  : 25f/s
quality_id statistics fordependency_id 0
===========================================
quality_id 0 -total:      16retained:      16
Number of inputpackets:        134
Number of outputpackets:      99
可以对输出的ext_svc.264文件用H264AVCDecoderLibTestSta tic解码,得到176x144的yuv。
 
至此,本文作为入门介绍已经完成,JSVM还有许多辅助工具可以参照 JSVM SoftwareManual,本章的实验结果可以体会到,使用JSVM编码的好速度很慢,还没具体统计,大约每分钟两三帧,而解码在当前一般配置的双核PC系统基本可以达到实时。下一篇文章将进入JSVM的代码分析。
 
【参考文献】
1. HHI,“ The ScalableVideo Coding Amendment of the H.264/AVCStandard
2. Heiko Schwarz, Detlev Marpe,, and Thomas Wiegand, "Overview ofthe Scalable Video Coding Extension of the H.264/AVCStandard"
3. 不屈号的航海长,“ video infuture
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_15437629/article/details/47091197

智能推荐

Spring Boot 获取 bean 的 3 种方式!还有谁不会?,Java面试官_springboot2.7获取bean-程序员宅基地

文章浏览阅读1.2k次,点赞35次,收藏18次。AutowiredPostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。_springboot2.7获取bean

Logistic Regression Java程序_logisticregression java-程序员宅基地

文章浏览阅读2.1k次。理论介绍 节点定义package logistic;public class Instance { public int label; public double[] x; public Instance(){} public Instance(int label,double[] x){ this.label = label; th_logisticregression java

linux文件误删除该如何恢复?,2024年最新Linux运维开发知识点-程序员宅基地

文章浏览阅读981次,点赞21次,收藏18次。本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。下面我们来进行文件的恢复,执行下文中的lsof命令,在其返回结果中我们可以看到test-recovery.txt (deleted)被删除了,但是其存在一个进程tail使用它,tail进程的进程编号是1535。我们看到文件名为3的文件,就是我们刚刚“误删除”的文件,所以我们使用下面的cp命令把它恢复回去。命令进入该进程的文件目录下,1535是tail进程的进程id,这个文件目录里包含了若干该进程正在打开使用的文件。

流媒体协议之RTMP详解-程序员宅基地

文章浏览阅读10w+次,点赞12次,收藏72次。RTMP(Real Time Messaging Protocol)实时消息传输协议是Adobe公司提出得一种媒体流传输协议,其提供了一个双向得通道消息服务,意图在通信端之间传递带有时间信息得视频、音频和数据消息流,其通过对不同类型得消息分配不同得优先级,进而在网传能力限制下确定各种消息得传输次序。_rtmp

微型计算机2017年12月下,2017年12月计算机一级MSOffice考试习题(二)-程序员宅基地

文章浏览阅读64次。2017年12月的计算机等级考试将要来临!出国留学网为考生们整理了2017年12月计算机一级MSOffice考试习题,希望能帮到大家,想了解更多计算机等级考试消息,请关注我们,我们会第一时间更新。2017年12月计算机一级MSOffice考试习题(二)一、单选题1). 计算机最主要的工作特点是( )。A.存储程序与自动控制B.高速度与高精度C.可靠性与可用性D.有记忆能力正确答案:A答案解析:计算...

20210415web渗透学习之Mysqludf提权(二)(胃肠炎住院期间转)_the provided input file '/usr/share/metasploit-fra-程序员宅基地

文章浏览阅读356次。在学MYSQL的时候刚刚好看到了这个提权,很久之前用过别人现成的,但是一直时间没去细想, 这次就自己复现学习下。 0x00 UDF 什么是UDF? UDF (user defined function),即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,就像使..._the provided input file '/usr/share/metasploit-framework/data/exploits/mysql

随便推点

webService详细-程序员宅基地

文章浏览阅读3.1w次,点赞71次,收藏485次。webService一 WebService概述1.1 WebService是什么WebService是一种跨编程语言和跨操作系统平台的远程调用技术。Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准...

Retrofit(2.0)入门小错误 -- Could not locate ResponseBody xxx Tried: * retrofit.BuiltInConverters_已添加addconverterfactory 但是 could not locate respons-程序员宅基地

文章浏览阅读1w次。前言照例给出官网:Retrofit官网其实大家学习的时候,完全可以按照官网Introduction,自己写一个例子来运行。但是百密一疏,官网可能忘记添加了一句非常重要的话,导致你可能出现如下错误:Could not locate ResponseBody converter错误信息:Caused by: java.lang.IllegalArgumentException: Could not l_已添加addconverterfactory 但是 could not locate responsebody converter

一套键鼠控制Windows+Linux——Synergy在Windows10和Ubuntu18.04共控的实践_linux 18.04 synergy-程序员宅基地

文章浏览阅读1k次。一套键鼠控制Windows+Linux——Synergy在Windows10和Ubuntu18.04共控的实践Synergy简介准备工作(重要)Windows服务端配置Ubuntu客户端配置配置开机启动Synergy简介Synergy能够通过IP地址实现一套键鼠对多系统、多终端进行控制,免去了对不同终端操作时频繁切换键鼠的麻烦,可跨平台使用,拥有Linux、MacOS、Windows多个版本。Synergy应用分服务端和客户端,服务端即主控端,Synergy会共享连接服务端的键鼠给客户端终端使用。本文_linux 18.04 synergy

nacos集成seata1.4.0注意事项_seata1.4.0 +nacos 集成-程序员宅基地

文章浏览阅读374次。写demo的时候遇到了很多问题,记录一下。安装nacos1.4.0配置mysql数据库,新建nacos_config数据库,并根据初始化脚本新建表,使配置从数据库读取,可单机模式启动也可以集群模式启动,启动时 ./start.sh -m standaloneapplication.properties 主要是db部分配置## Copyright 1999-2018 Alibaba Group Holding Ltd.## Licensed under the Apache License,_seata1.4.0 +nacos 集成

iperf3常用_iperf客户端指定ip地址-程序员宅基地

文章浏览阅读833次。iperf使用方法详解 iperf3是一款带宽测试工具,它支持调节各种参数,比如通信协议,数据包个数,发送持续时间,测试完会报告网络带宽,丢包率和其他参数。 安装 sudo apt-get install iperf3 iPerf3常用的参数: -c :指定客户端模式。例如:iperf3 -c 192.168.1.100。这将使用客户端模式连接到IP地址为192.16..._iperf客户端指定ip地址

浮点性(float)转化为字符串类型 自定义实现和深入探讨C++内部实现方法_c++浮点数 转 字符串 精度损失最小-程序员宅基地

文章浏览阅读7.4k次。 写这个函数目的不是为了和C/C++库中的函数在性能和安全性上一比高低,只是为了给那些喜欢探讨函数内部实现的网友,提供一种从浮点性到字符串转换的一种途径。 浮点数是有精度限制的,所以即使我们在使用C/C++中的sprintf或者cout 限制,当然这个精度限制是可以修改的。比方在C++中,我们可以cout.precision(10),不过这样设置的整个输出字符长度为10,而不是特定的小数点后1_c++浮点数 转 字符串 精度损失最小

推荐文章

热门文章

相关标签