HEVC学习之码流分析

2023-10-29

一,从分层编解码框架到NAL单元

以H.264为例:
H.264适应不同网络之间的传输,主要原因是引入了分层结构,分为视频编码层(VCL)与网络抽象层(NAL),从而实现压缩编码与网络传输分离。
通过H.264算法压缩的后的数据通过NAL-VCL接口封装成NAL包
在这里插入图片描述
NAL的基本单元是NALU,而VCL层自上而下的结构如下所示:
在这里插入图片描述
其中划分条带(slice)的目的是为了适应不同传输网络的最大传输单元(MTU)
分组的目的是为了使数据独立于其他分组,从而实现特定的目的,比如防止误差扩散保证图像质量,区分前景背景以分别编码

每个NALU由包头信息和VCL层信息组合而成,一个NALU包含一个slice:
在这里插入图片描述
在这里插入图片描述
其中RBSP(Raw Byte Sequence payload,原始字节序列负载)
SoDB(String of Data BITS,原始数据比特流)
填充比特为rbsP_trailing是为了使码流按字节对齐

二、NALU的包头信息

H.264的包头信息占一字节,即8bit,NAL类型只有32种(0-31),二进制只有5位,浪费三位,如果这三位不用的话大量的nal单元会造成大量的浪费,因此这三位也要利用上:
第1位:1比特的禁止位,当网络识别此单元中存在比特错误时,可将其设置为1,以方便接收方丢弃该单元。
第2位~第3位,2比特的优先级位(NRI),按照11,10,01,00的顺序优先级递减,当解码器忙碌时从优先级高的开始解码。

NAL的32种类型如下:
在这里插入图片描述
而HEVC和AVC的NAL包头主要有三个区别:
01、AVC包头信息占一字节,在HEVC中包头信息占两字节,足以支持HEVC可分级编码,多视点编码和3D视频编码的扩展
02、AVC的视频参数封存于pps,sps的NAL包中,在HEVC中还新增了vps(视频参数集),用于存放prfile,Level等
02、HEVC的NAL包头加入了该NAL所在的时间层的标志,去掉了NRI,并将该信息放在nal_unit_type中

在这里插入图片描述
01,1比特禁止位F,与AVC的不同,它的作用就是在尚存MPEG-2系统环境中,防止产生可以解释为MPEG-2起始码的比特模式。
02,6比特的类型位NAL_TYPE,新增了32位用作non-VCL单元
03, 6比特的Layer_ID,为层识别信息,表示当前NAL为哪一层,比如在可分级扩展中,它将用于联合标注空间和质量分级层,在3D扩展中,layer_id将标注视点和深度
04, 3比特的TID,temporal_id,表示HEVC的接入单元属于哪个时域子层

HEVC的NAL单元类型:
在这里插入图片描述

三、使用软件进行码流分析

先用HM对篮球测试序列进行压缩

配置如下:

#======== File I/O ===============
InputFile                     : C:\Users\梁昊霖\Desktop\HM-16.20\BasketballDrill_832x480_50.yuv
InputBitDepth                 : 8           # Input bitdepth
InputChromaFormat             : 420         # Ratio of luminance to chrominance samples
FrameRate                     : 50          # Frame Rate per second
FrameSkip                     : 0           # Number of frames to be skipped in input
SourceWidth                   : 832         # Input  frame width
SourceHeight                  : 480         # Input  frame height
FramesToBeEncoded             : 5        # Number of frames to be coded

Level                         : 3.1


采用lowdelay模式,即除了第一帧全B帧

#======== File I/O =====================
BitstreamFile                 : 50LP.bin
ReconFile                     : 50LP.yuv

#======== Profile ================
Profile                       : main

#======== Unit definition ================
MaxCUWidth                    : 64          # Maximum coding unit width in pixel
MaxCUHeight                   : 64          # Maximum coding unit height in pixel
MaxPartitionDepth             : 4           # Maximum coding unit depth
QuadtreeTULog2MaxSize         : 5           # Log2 of maximum transform size for
                                            # quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize         : 2           # Log2 of minimum transform size for
                                            # quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter       : 3
QuadtreeTUMaxDepthIntra       : 3

#======== Coding Structure =============
IntraPeriod                   : -1          # Period of I-Frame ( -1 = only first)
DecodingRefreshType           : 0           # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize                       : 4           # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag          : 1           # Write parameter sets with every IRAP

IntraQPOffset                 : -1 
LambdaFromQpEnable            : 1           # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
#        Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures     predict deltaRPS #ref_idcs reference idcs
Frame1:  B    1   5       -6.5                      0.2590         0          0          1.0      0            0               0           4                4         -1 -5 -9 -13       0
Frame2:  B    2   4       -6.5                      0.2590         0          0          1.0      0            0               0           4                4         -1 -2 -6 -10       1      -1       5         1 1 1 0 1
Frame3:  B    3   5       -6.5                      0.2590         0          0          1.0      0            0               0           4                4         -1 -3 -7 -11       1      -1       5         0 1 1 1 1
Frame4:  B    4   1        0.0                      0.0            0          0          1.0      0            0               0           4                4         -1 -4 -8 -12       1      -1       5         0 1 1 1 1

#=========== Motion Search =============
FastSearch                    : 1           # 0:Full search  1:TZ search
SearchRange                   : 64          # (0: Search range is a Full frame)
BipredSearchRange             : 4           # Search range for bi-prediction refinement
HadamardME                    : 1           # Use of hadamard measure for fractional ME
FEN                           : 1           # Fast encoder decision
FDM                           : 1           # Fast Decision for Merge RD cost

#======== Quantization =============
QP                            : 32          # Quantization parameter(0-51)
MaxDeltaQP                    : 0           # CU-based multi-QP optimization
MaxCuDQPDepth                 : 0           # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD                     : 0           # Slice-based multi-QP optimization
RDOQ                          : 1           # RDOQ
RDOQTS                        : 1           # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0           # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0           # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0           # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.

#=========== Deblock Filter ============
LoopFilterOffsetInPPS         : 1           # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable             : 0           # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2     : 0           # base_param: -6 ~ 6
LoopFilterTcOffset_div2       : 0           # base_param: -6 ~ 6
DeblockingFilterMetric        : 0           # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)

#=========== Misc. ============
InternalBitDepth              : 8           # codec operating bit-depth

#=========== Coding Tools =================
SAO                           : 1           # Sample adaptive offset  (0: OFF, 1: ON)
AMP                           : 1           # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip                 : 1           # Transform skipping (0: OFF, 1: ON)
TransformSkipFast             : 1           # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary                : 0           # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)

#============ Slices ================
SliceMode                : 0                # 0: Disable all slice options.
                                            # 1: Enforce maximum number of LCU in an slice,
                                            # 2: Enforce maximum number of bytes in an 'slice'
                                            # 3: Enforce maximum number of tiles in a slice
SliceArgument            : 1500             # Argument for 'SliceMode'.
                                            # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
                                            # If SliceMode==2 it represents max. bytes per slice.
                                            # If SliceMode==3 it represents max. tiles per slice.

LFCrossSliceBoundaryFlag : 1                # In-loop filtering, including ALF and DB, is across or not across slice boundary.
                                            # 0:not across, 1: across

#============ PCM ================
PCMEnabledFlag                      : 0                # 0: No PCM mode
PCMLog2MaxSize                      : 5                # Log2 of maximum PCM block size.
PCMLog2MinSize                      : 3                # Log2 of minimum PCM block size.
PCMInputBitDepthFlag                : 1                # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag                : 0                # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.

#============ Tiles ================
TileUniformSpacing                  : 0                # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
                                                       # 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1                : 0                # Number of tile columns in a picture minus 1
TileColumnWidthArray                : 2 3              # Array containing tile column width values in units of CTU (from left to right in picture)   
NumTileRowsMinus1                   : 0                # Number of tile rows in a picture minus 1
TileRowHeightArray                  : 2                # Array containing tile row height values in units of CTU (from top to bottom in picture)

LFCrossTileBoundaryFlag             : 1                # In-loop filtering is across or not across tile boundary.
                                                       # 0:not across, 1: across 

#============ WaveFront ================
WaveFrontSynchro                    : 0                # 0:  No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
                                                       # >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.

#=========== Quantization Matrix =================
ScalingList                   : 0                      # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile               : scaling_list.txt       # Scaling List file name. If file is not exist, use Default Matrix.

#============ Lossless ================
TransquantBypassEnable     : 0                         # Value of PPS flag.
CUTransquantBypassFlagForce: 0                         # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled

#============ Rate Control ======================
RateControl                         : 0                # Rate control: enable rate control
TargetBitrate                       : 1000000          # Rate control: target bitrate, in bps
KeepHierarchicalBit                 : 2                # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl                 : 1                # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel                  : 1                # Rate control: use LCU level separate R-lambda model
InitialQP                           : 0                # Rate control: initial QP
RCForceIntraQP                      : 0                # Rate control: force intra QP to be equal to initial QP

### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###

再对编码得到的二进制文件进行码流分析:
在这里插入图片描述
可以看到除了第一帧为I帧,其质量最高,其余帧为B帧
在B帧中每隔4帧出现一个较高质量的B帧,因为在配置文件中设置为:

GOPSize                       : 4           # GOP Size (number of B slice = GOPSize-1)
(B条带的数量=GOP数量-1,因为第一个条带为I条带?)GOP不一定以I帧结尾?

I帧只包含I条带,P帧只包含P条带,B帧只包含B条带
I条带只包含I宏块,P条带可以包含P宏块也可以包含I宏块,同样B条带可以包含B宏块也可以包含I宏块

可以看到第4,5帧都含有intra,即I宏块,并且intra含量越高,B帧质量越高
在这里插入图片描述
在这里插入图片描述

通过16进制查看其码流:
在这里插入图片描述
框中的意义是起始地址,每个地址的最小单位中可以放两个16进制数 ,如EF:E的10进制为14,转为二进制为1110,F的10进制为15,转为二进制为1111,[1110 1111 ]就放在一个地址单元中。
在这里插入图片描述

当采用其他传输协议时,一个UDP包就是一个NAL单元,解码器可以很方便检测出NAL分界和解码。但在字节流格式中,NAL单元被编码成字节的码流,解码器无法确定每个NAL的起始位置和终止位置,因此定义了一个起同步作用的起始码前缀:0X 00 00 01,在上图中用红框框出。
每个NAL单元用0X 00 00 01分割开,紧跟着起始码前缀后面的是NAL头,如40 01,转为二进制为0100 0000 0000 0001对照NAL单元头结构:
在这里插入图片描述
可以看到其中的NAL_TYPE为为0[100 000]0 0000 0001,将[ ]中转为10进制为32,其对应NAL类型为VPS,同理可以看到后面两个NALU依次为SPS,PPS

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HEVC学习之码流分析 的相关文章

  • 八路视频光端机技术导论:多通道视频传输的高效解决方案

    随着光通信技术的快速发展 八路视频光端机 已成为多通道视频传输的有效解决方案 本文将探讨该技术的原理 优势及应用前景 为光通信行业的技术人员和研究学者提供参考 技术原理 八路视频光端机基于 波分复用 WDM 技术 通过一个光纤同时传输多路视
  • 在职状态下继续学习的心得体会

    本来平时记录的都是一些技术点的学习和使用 今天打算记录一下学习方法 当然不一定适合所有人 因人而异 仅供参考 学习这件事 对于IT行业来说 真的是活到老学到老 技术的更新迭代速度非常快 而且总是有那么一些公司特别的卷 没办法 改变不了外因
  • 通过一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • 网络基础面试题(二)

    11 什么是网桥 防火墙的端口防护是指什么 网桥是一种网络设备 用于连接两个或多个局域网 LAN 并转发数据包 它能够根据MAC地址来识别和转发数据 提高网络的传输效率和安全性 防火墙的端口防护是指对防火墙上的各个端口进行保护和限制 只允许
  • 如何使用内网穿透实现iStoreOS软路由公网远程访问局域网电脑桌面

    文章目录 简介 一 配置远程桌面公网地址 二 家中使用永久固定地址 访问公司电脑 具体操作方法是 简介 软路由 是PC的硬件加上路由系统来实现路由器
  • 6类典型场景的无线AP选型和部署方案

    你们好 我的网工朋友 前段时间刚给你们来了篇解决无线频繁断网的技术文 解决无线频繁断网 这个办法值得收藏 不少朋友私聊 说想再聊聊无线AP的选型和部署方案 这不就安排上了 无线网络覆盖项目中 无线AP的合理选型和部署非常重要 在设计施工中
  • 浅谈能耗系统在马来西亚连锁餐饮业的应用

    1 背景信息 Background 针对连锁餐饮业能耗高且能源管理不合理的问题 利用计算机网络技术 通讯技术 计量控制技术等信息化技术 实现能源资源分类分项计量和能源资源运行监管功能 清晰描述各分店总的用能现状 实时监测各供电回路的电压 电
  • 网络空间安全女生就业,怎么学?

    我实验室的学长们基本都是以红队和复现为主 如果学校好点可能还有更多的选择 如果想在这个方向深入下去 推荐流程是先打两年CTF 把大概的技术方向摸一摸 大一的话 如果学校还不错 那就优先建议打好基础 包括C语言 Python一类 建议把CTF
  • 【计算机毕业设计】实验室预约管理

    身处网络时代 随着网络系统体系发展的不断成熟和完善 人们的生活也随之发生了很大的变化 人们在追求较高物质生活的同时 也在想着如何使自身的精神内涵得到提升 而读书就是人们获得精神享受非常重要的途径 为了满足人们随时随地只要有网络就可以看书的要
  • 【信道估计】【MIMO】【FBMC】未来移动通信的滤波器组多载波调制方案(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • 2024年网络安全十10大发展趋势发布

    2023年网络安全十10大发展趋势发布 近日 中国计算机学会 CCF 计算机安全专委会中 来自国家网络安全主管部门 高校 科研院所 大型央企 民营企业的委员投票评选出2023年网络安全十大发展趋势 福利 趋势一 数据安全治理成为数字经济的基
  • Python爬虫实战:IP代理池助你突破限制,高效采集数据

    当今互联网环境中 为了应对反爬虫 匿名访问或绕过某些地域限制等需求 IP代理池成为了一种常用的解决方案 IP代理池是一个包含多个可用代理IP地址的集合 可以通过该代理池随机选择可用IP地址来进行网络请求 IP代理池是一组可用的代理IP地址
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 网络安全基础知识面试题库

    1 基于路由器的攻击手段 1 1 源IP地址欺骗式攻击 入侵者从外部传输一个伪装成来自内部主机的数据包 数据包的IP是 内网的合法IP 对策 丢弃所有来自路由器外端口 却使用内部源地址的数据包 1 2 源路由攻击 入侵者让数据包循着一个不可
  • 短信系统搭建主要因素|网页短信平台开发源码

    短信系统搭建主要因素 网页短信平台开发源码 随着移动互联网的快速发展 短信系统已成为企业和个人进行信息传递的重要工具 建立一个高效可靠的短信系统对于企业来说非常重要 下面我们将介绍一些影响短信系统搭建的主要因素 1 平台选择 在搭建短信系统
  • 静态综合实验

    1 IP地址划分 192 168 1 0 27 用于主干拆分 192 168 1 32 27 用于用户拆分 192 168 1 64 27 用于用户拆分 192 168 1 96 27 用于用户拆分 192 168 1 128 27 用于用
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 肿瘤的转录调控:Cell子刊揭示原发性肝癌中转录因子活性的全基因组图谱|国自然热点

    转录调控的研究历史比较长 相关研究在近十年来仍一直增长 也是近年来高分文章的焦点之一 在2023年最佳国自然 中标 研究热点 转录调控中标率高达189 作为国自然热点之一的肿瘤微环境的研究在近几年也一直处于上升趋势 转录调控在肿瘤发生 发展

随机推荐

  • python序列和字典

    一 序列 1含义 包含若干个元素 元素有序排列 可通过下标访问一个或多个元素这样的对象 eg 字符串 列表 元组 2 标准类型操作符 expr 1 lt expr 2 3 序列类型操作符 1 in not in 判定一个元素是否在序列中 返
  • 如何复制网上的收费文本

    选中你要复制的内容打开f12开发者工具 查看选中部分地方源代码 鼠标左键打开 直接复制完事 新手博主 请前辈批评指正 丁一
  • JAVA接口实验:卡车要装载一批货物,货物由电视机、计算机和洗衣机组成,卡车需要计算出整批货物的重量。

    卡车要装载一批货物 货物由电视机 计算机和洗衣机组成 卡车需要计算出整批货物的重量 编写能够满足如下条件的程序 定义一个接口 包含计算货物重量的抽象方法 分别定义实现上述接口的用于计算电视机 计算机和洗衣机的类 定义一个卡车类 在其中定义一
  • Android软件开发之获取通讯录联系人 联系人图像

    Android软件开发之获取通讯录联系人信息 十二 发布于2011 10 12 图中选中的数据库 contacts2 db就是系统储存联系人的数据库 我们将它打开看看里面储存了些什么东东 打开contacts db后 发面里面有一堆表 同学
  • Java定时注解@Scheduled的使用,fixedDelay,fixedRate,cron的使用

    Java定时注解 Scheduled的使用 fixedDelay fixedRate cron的使用 问题背景 参数简介 项目创建 测试结果 心得 Lyric 咸咸的汗水 问题背景 项目中经常使用定时任务 spring提供了定时注解 很方便
  • 前端笔试题1

    HTML CSS 题1 1 使用CSS 让该节点不可见 方法越多越好 div class hidden Hi div 使用CSS 让节点不可见的方法有以下几种 把 visibility 属性设置为 hidden 这样元素框不会被绘制 但仍然
  • 【C++】详解声明和定义

    2023年8月28日 周一下午 研究了一个下午才彻底弄明白 写到晚上才写完这篇博客 目录 声明和定义的根本区别 结构体的声明和定义 声明结构体 定义结构体 类的声明和定义 函数的定义和声明 声明函数 定义函数 变量声明和定义 声明变量 定义
  • 人工智能的三个层次:运算智能,感知智能,认知智能

    2016年 人工智能成为产业界和学术界的大热词 年初 李世石与Alpha Go的人机围棋大战吸睛无数 人工智能的话题始料未及地席卷了世界每处 此外 今年也恰逢人工智能学科诞生一甲子 Alpha Go再一次打败人类 受到全世界的瞩目 历经波折
  • android集成友盟推送遇到的问题

    在自身项目集成友盟推送时 参考了官方文档的教程 导入 PushSDK 把下载的 zip 文件解压缩 解压后的文件路径不能有中文 把解压缩后得到的目录下的 PushSDK 当做 Module 导入到自己的工程 在之前的 AndroidMani
  • C++——可变模板参数

    声明 由于对可变模板参数了解资源有限 以下有些观点仅为个人参考手册实践得出的 不要被我个人的观点误导 文章目录 一 基本语法知识 1 基本知识 2 基本语法 二 基本使用方法 1 基本演示 2 参数展开 一 基本语法知识 1 基本知识 C
  • linux文件系统初始化过程(2)---挂载rootfs文件系统

    一 目的 本文主要讲述linux3 10文件系统初始化过程的第一阶段 挂载rootfs文件系统 rootfs是基于内存的文件系统 所有操作都在内存中完成 也没有实际的存储设备 所以不需要设备驱动程序的参与 基于以上原因 linux在启动阶段
  • 无监督学习分类

    目录 1 聚类 1 1 K 均值算法 K Means 1 2 层次聚类 Hierarchical Clustering 1 3 基于密度聚类Mean Shift 1 4 基于密度聚类DBSCAN 1 5 高斯混合模型 GMM 与EM 1 6
  • 加密算法 AES和RSA

    一 加密 一 加密基础 通过互联网发送数据 数据可能会被第三者恶意窃听 造成损失 因此需要给重要的数据进行加密 加密后的数据被称为 密文 接收方通过解除加密或得原本的数据 把密文恢复为原本数据的操作叫做 解密 像这样就减少了数据被恶意窃听的
  • HBuilder运行项目到IOS真机设备

    公司项目 开发多端应用 在此记录下开发后在ios端真机测试的步骤 在Hbuilder点击运行 gt 运行到手机或模拟器 gt 运行到IOS App基座 连上ios设备 这里需要设置一下Apple证书签名才可以使用 点击 使用Apple证书签
  • Python安装及环境配置

    编程语言分类 编译型 go语言 c语言 一次性把源代码进行翻译 特点是 执行效率高 平台依赖性一般比较高 解释型 js语言 python语言 ruby语言 逐行地对源代码进行翻译和运行 特点是 执行效率相对较低 平台的依赖性不高 安装各个平
  • 4 Swagger3 接口测试

    swagger ui图形客户端提供了接口测试功能 默认情况下 这些参数都不能填写 禁用的 我们点击 Try it out 按钮 即可开启接口测试功能 输入请求参数后 点击 Execute 按钮 即可执行 下方是后端返回信息 类似的 我们可以
  • QT插件开发(3)-- 插件之间相互通信

    插件的通信通过插件管理器来管理 插件管理器转发插件的消息 首先 改一下接口 增加一个插件间通信的结构体 增加插件发送消息和接收消息的纯虚函数供插件实现 ifndef PLUGININTERFACE H define PLUGININTERF
  • Nginx安装步骤——离线安装与在线安装详解

    目录 Linux环境下Nginx的离线安装与在线安装详细步骤 一 离线安装 1 安装环境 2 安装nginx 二 在线安装 1 安装相关依赖 2 安装nginx nginx相关命令 1 查看nginx是否在运行 2 测试配置文件是否正确 3
  • 整数反转(三种解法)——leetcode

    题目描述 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下 32 位的有
  • HEVC学习之码流分析

    一 从分层编解码框架到NAL单元 以H 264为例 H 264适应不同网络之间的传输 主要原因是引入了分层结构 分为视频编码层 VCL 与网络抽象层 NAL 从而实现压缩编码与网络传输分离 通过H 264算法压缩的后的数据通过NAL VCL