0. 基本概念

0.1 视频码流在视频播放器中的位置如下所示:

在这里插入图片描述
H.264原始码流(又称为“裸流”)是由一个一个的NALU组成的。他们的结构如下图所示。

在这里插入图片描述

0.2 更准确来说,原始的NALU单元组成如下:

[start code] + [NALU header] + [NALU payload]

[start code]占3字节或者4字节,为0x000001或0x00000001。

而其中[NALU header]又由如下所示构成:

forbidden_zero_bit(1bit) + nal_ref_idc(2bit) + nal_unit_type(5bit)

0.3 NALU类型

0.3.1 forbidden_zero_bit:

禁止位,初始化为0,当网络发现 NAL 单元有比特错误时可设置该比特为1,
以便接收方纠错或丢掉该单元。

0.3.2 nal_ref_idc:

nal重要性指示,标志该NAL单元的重要性,值越大,越重要,解码器在解码处理不过来的时候,
可以丢掉重要性为0的NALU。

0.3.3 nal_unit_type:

NALU句法表如下所示:

在这里插入图片描述

一般H.264码流最开始的两个NALU是SPS和PPS,第三个NALU是IDR。而SPS、PPS、SEI这三种NALU不属于帧的范畴,它们的定义如下:

SPS(Sequence Parameter Sets):序列参数集,作用于一系列连续的编码图像。
PPS(Picture Parameter Set):图像参数集,作用于编码视频序列中一个或多个独立的图像。
SEI(Supplemental enhancement information):附加增强信息,包含了视频画面定时等信息,一般放在主编码图像数据之前,在某些应用中,它可以被省略掉。
IDR(Instantaneous Decoding Refresh):即时解码刷新。
HRD(Hypothetical Reference Decoder):假想码流调度器。

1. 代码

还是学习的雷神的代码,我进一步写了详细注释。

extern "C"
{
#ifdef __cplusplus
#define __STDC_CONSTANT_MACROS#endif}
extern "C" {#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
}typedef enum {NALU_TYPE_SLICE = 1,NALU_TYPE_DPA = 2,NALU_TYPE_DPB = 3,NALU_TYPE_DPC = 4,NALU_TYPE_IDR = 5,NALU_TYPE_SEI = 6,NALU_TYPE_SPS = 7,NALU_TYPE_PPS = 8,NALU_TYPE_AUD = 9,NALU_TYPE_EOSEQ = 10,NALU_TYPE_EOSTREAM = 11,NALU_TYPE_FILL = 12,
} NaluType;typedef enum {NALU_PRIORITY_DISPOSABLE = 0,NALU_PRIRITY_LOW = 1,NALU_PRIORITY_HIGH = 2,NALU_PRIORITY_HIGHEST = 3
} NaluPriority;typedef struct
{int startcodeprefix_len;      //! 4 for parameter sets and first slice in picture, 3 for everything else (suggested)
//在H264码流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的
//startcodeprefix_len可能是三字节也可能是四个字节unsigned len;         //! Length of the NAL unit (Excluding the start code, which does not belong to the NALU)unsigned max_size;            //! Nal Unit Buffer sizeint forbidden_bit;            //! should be always FALSE
//禁止位forbidden_bit,初始为0,当网络发现NAL单元有比特错误时可设置改比特为1,
//以便接收方纠错或者丢掉改单元int nal_reference_idc;        //! NALU_PRIORITY_xxxx
//nal_reference_idc,这个是nal重要性指示,标志该NAL单元的重要性,值越大,越重要,
//解码器在解码处理不过来的时候,可以丢掉重要性为0的NALU。int nal_unit_type;            //! NALU_TYPE_xxxx    char* buf;                    //! contains the first byte followed by the EBSP
} NALU_t;//h264bitstream这玩意是全局的文件指针
FILE* h264bitstream = NULL;                //!< the bit stream fileint info2 = 0, info3 = 0;//在H264码流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的//前三个字节的数据读出来是0x00 0x00 0x01返回true,否则返回false
static int FindStartCode2(unsigned char* Buf) {if (Buf[0] != 0 || Buf[1] != 0 || Buf[2] != 1) return 0; //0x000001?else return 1;
}//前四个字节的数据读出来是0x00 0x00 0x00 0x01返回true,否则返回false
static int FindStartCode3(unsigned char* Buf) {if (Buf[0] != 0 || Buf[1] != 0 || Buf[2] != 0 || Buf[3] != 1) return 0;//0x00000001else return 1;
}int GetAnnexbNALU(NALU_t* nalu) {int pos = 0;int StartCodeFound, rewind;unsigned char* Buf;//分配100000个字节的空间if ((Buf = (unsigned char*)calloc(nalu->max_size, sizeof(char))) == NULL)printf("GetAnnexbNALU: Could not allocate Buf memory\n");//默认初始化为3nalu->startcodeprefix_len = 3;//读前三个字节的数据,若无法读到,说明数据异常,直接返回。if (3 != fread(Buf, 1, 3, h264bitstream)) {free(Buf);return 0;}info2 = FindStartCode2(Buf);if (info2 != 1) { // 若读出来的前三个字节不是 0x00 0x00 0x01,则进入判断语句if (1 != fread(Buf + 3, 1, 1, h264bitstream)) { //再读一个字节的数据free(Buf);return 0; //这个还是避免空指针}info3 = FindStartCode3(Buf);//info3为1的条件是,读出前四个字节的数据是0x00 0x00  0x00 0x01if (info3 != 1) {free(Buf); //两种都不满足,说明数据异常,直接returnreturn -1;}else {pos = 4;nalu->startcodeprefix_len = 4;//代码能走到这里说明开始码是四个字节的.}}else {nalu->startcodeprefix_len = 3;//否则开始码就是三个字节pos = 3;}StartCodeFound = 0;info2 = 0;info3 = 0;while (!StartCodeFound) {if (feof(h264bitstream)) {nalu->len = (pos - 1) - nalu->startcodeprefix_len;memcpy(nalu->buf, &Buf[nalu->startcodeprefix_len], nalu->len);nalu->forbidden_bit = nalu->buf[0] & 0x80; //1 bitnalu->nal_reference_idc = nalu->buf[0] & 0x60; // 2 bitnalu->nal_unit_type = (nalu->buf[0]) & 0x1f;// 5 bitfree(Buf);return pos - 1;}Buf[pos++] = fgetc(h264bitstream);info3 = FindStartCode3(&Buf[pos - 4]);if (info3 != 1)info2 = FindStartCode2(&Buf[pos - 3]);StartCodeFound = (info2 == 1 || info3 == 1);}// Here, we have found another start code //and read length of startcode bytes more than we should// have.  Hence, go back in the filerewind = (info3 == 1) ? -4 : -3;//开始码是4个字节,后退四个位置,开始码是3个字节,后退三个位置if (0 != fseek(h264bitstream, rewind, SEEK_CUR)) {//后退文件指针h264bitstream到位置SEEK_CUR+rewind的地方,//注意指针向文件头偏移时,没有超出文件头返回0,超出则文件指针不变,返回-1free(Buf);printf("GetAnnexbNALU: Cannot fseek in the bit stream file");}// Here the Start code, the complete NALU, and the next start code is in the Buf.  // The size of Buf is pos, pos+rewind are the number of bytes excluding the next// start code, and (pos+rewind)-startcodeprefix_len is the size of the NALU // excluding the    start codenalu->len = (pos + rewind) - nalu->startcodeprefix_len;memcpy(nalu->buf, &Buf[nalu->startcodeprefix_len], nalu->len);//取开始码之后的NALU数据拷贝到buff里面nalu->forbidden_bit = nalu->buf[0] & 0x80; //1 bitnalu->nal_reference_idc = nalu->buf[0] & 0x60; // 2 bitnalu->nal_unit_type = (nalu->buf[0]) & 0x1f;// 5 bitfree(Buf);return (pos + rewind);
}/*** Analysis H.264 Bitstream* @param url    Location of input H.264 bitstream file.*/
int simplest_h264_parser(const char* url) {NALU_t* n;int buffersize = 100000;//FILE *myout=fopen("output_log.txt","wb+");FILE* myout = stdout;h264bitstream = fopen(url, "rb+");//h264bitstream是一个文件指针,其被初始化为NULL.if (h264bitstream == NULL) {printf("Open file error\n");return 0;}n = (NALU_t*)calloc(1, sizeof(NALU_t));//分配1个长度为sizeof(NALU_t)的连续空间,空间首地址给nif (n == NULL) {printf("Alloc NALU Error\n");return 0;}//Nal 单元缓冲区大小100000n->max_size = buffersize;// buf 是100000个byte字节大小的缓冲区.n->buf = (char*)calloc(buffersize, sizeof(char));// 下面代码避免空指针if (n->buf == NULL) {free(n);printf("AllocNALU: n->buf");return 0;}int data_offset = 0;int nal_num = 0;printf("-----+-------- NALU Table ------+---------+\n");printf(" NUM |    POS  |    IDC |  TYPE |   LEN   |\n");printf("-----+---------+--------+-------+---------+\n");while (!feof(h264bitstream)){int data_lenth;data_lenth = GetAnnexbNALU(n);char type_str[20] = { 0 };switch (n->nal_unit_type) {case NALU_TYPE_SLICE:sprintf(type_str, "SLICE"); break;case NALU_TYPE_DPA:sprintf(type_str, "DPA"); break;case NALU_TYPE_DPB:sprintf(type_str, "DPB"); break;case NALU_TYPE_DPC:sprintf(type_str, "DPC"); break;case NALU_TYPE_IDR:sprintf(type_str, "IDR"); break;case NALU_TYPE_SEI:sprintf(type_str, "SEI"); break;case NALU_TYPE_SPS:sprintf(type_str, "SPS"); break;case NALU_TYPE_PPS:sprintf(type_str, "PPS"); break;case NALU_TYPE_AUD:sprintf(type_str, "AUD"); break;case NALU_TYPE_EOSEQ:sprintf(type_str, "EOSEQ"); break;case NALU_TYPE_EOSTREAM:sprintf(type_str, "EOSTREAM"); break;case NALU_TYPE_FILL:sprintf(type_str, "FILL"); break;}char idc_str[20] = { 0 };switch (n->nal_reference_idc >> 5) {// 0x60对应0110 0000,这个右移5bit即为nal_reference_idc的值,取值范围是0-3case NALU_PRIORITY_DISPOSABLE:sprintf(idc_str, "DISPOS"); break;case NALU_PRIRITY_LOW:sprintf(idc_str, "LOW"); break;case NALU_PRIORITY_HIGH:sprintf(idc_str, "HIGH"); break;case NALU_PRIORITY_HIGHEST:sprintf(idc_str, "HIGHEST"); break;}fprintf(myout, "%5d| %8d| %7s| %6s| %8d|\n", nal_num, data_offset, idc_str, type_str, n->len);//nal_num是数据的长度,data_offset是整个数据的长度,一直再增加,//idc_str是nal重要性指示,标志该NAL单元的重要性,值越大,越重要,//解码器在解码处理不过来的时候,可以丢掉重要性为0的NALU。//type_str表征NALU单元类型//n->len由子函数nalu->len确定,这个是每个NALU单元占的空间大小(字节个数),//注意这个不包含开始码data_offset = data_offset + data_lenth;nal_num++;}//Freeif (n) {if (n->buf) {free(n->buf);n->buf = NULL;}free(n);}return 0;
}int main()
{simplest_h264_parser("sintel.h264");return 0;
}

代码可以在visual studio 2019上成功编译。
在这里插入图片描述

2. 重点解释

while (!StartCodeFound) {if (feof(h264bitstream)) {nalu->len = (pos - 1) - nalu->startcodeprefix_len;memcpy(nalu->buf, &Buf[nalu->startcodeprefix_len], nalu->len);nalu->forbidden_bit = nalu->buf[0] & 0x80; //1 bitnalu->nal_reference_idc = nalu->buf[0] & 0x60; // 2 bitnalu->nal_unit_type = (nalu->buf[0]) & 0x1f;// 5 bitfree(Buf);return pos - 1;}Buf[pos++] = fgetc(h264bitstream); info3 = FindStartCode3(&Buf[pos - 4]);if (info3 != 1)info2 = FindStartCode2(&Buf[pos - 3]);StartCodeFound = (info2 == 1 || info3 == 1);
}

这段代码是重点,之前一时间没看明白。nalu->forbidden_bit、nalu->nal_reference_idc、nalu->nal_unit_type 这个没啥说的,NALU header相关的信息存在开始码之后的一个字节里面。

if (feof(h264bitstream)) {

这个判断要等到找到文件结束符,前面的普遍情况后面又把ALU header相关的信息,获取的代码写了
一遍。

Buf[pos++] = fgetc(h264bitstream); 
info3 = FindStartCode3(&Buf[pos - 4]);
if (info3 != 1)info2 = FindStartCode2(&Buf[pos - 3]);StartCodeFound = (info2 == 1 || info3 == 1);

这几句是重点,我们当前的开始码是是四个字节的,由前面的分析可知(具体看我写的代码注释),
此时pos在运行到这段代码之前,值为4。

Buf[0]、Buf[1]、Buf[2]、Buf[3]已分别存好开始码四个字节的数据,数据通过h264bitstream文件指针存到Buf里面,此时Buf[pos++] = fgetc(h264bitstream); 再读后面的一个字节数据Buf[4]。

这个字节的数据对应NALU header。

此时pos为运行完,其值为5,那么&Buf[pos-4]开始往后的四个地址的数据必然不是开始码:

0x00 0x00 0x00 0x01,所以必然不满足while (!StartCodeFound) {循环跳出条件。

进一步举例理解

// Here the Start code, the complete NALU, and the next start code is in the Buf.
// The size of Buf is pos, pos+rewind are the number of bytes excluding the next
// start code, and (pos+rewind)-startcodeprefix_len is the size of the NALU excluding the start code

我们假设有个NALU的长度是99个字节,之前四个字节是开始码。pos在进入这个while循环之前
的值是4,Buf[0]、Buf[1]、Buf[2]、Buf[3]已分别存好开始码四个字节的数据

info3 = FindStartCode3(&Buf[pos - 4]);

若要使得这个info3返回1,需要找到第二个NALU前面的开始码,即pos-4为Buf[102]
根据代码Buf[pos++] = fgetc(h264bitstream),此时pos已获取到Buf[102]、Buf[103]
Buf[104]、Buf[105];注意这里Buf[102]是第一个开始码和第一个NALU后面的数据,
这四个字节是下一个开始码的四个字节。

所以说代码注释说,pos是当前的的buf长度,pos+rewind是除了下一个开始码的长度,(具体看代码
,rewind的值为-4,因为开始码是四个字节)

pos+rewind-startcodeprefix_len就是除了开始码的 NALU长度了。

3. 参考链接

感谢阅读,本文参考链接如下:

  1. https://blog.csdn.net/leixiaohua1020/article/details/50534369
  2. https://www.jianshu.com/p/5ec31394649a
  3. https://github.com/leixiaohua1020/simplest_mediadata_test
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 我的CSDN博客阅读器完成啦!!

    前言因为自己比较喜欢逛CSDN,所以就希望能够随时查看博客,收藏博客,而CSDN自己提供的客户端我用了之后感觉并不能很好的满足自己的需求,所以一个可怕的念头在我的脑海徘徊 –“自己写一个吧!!”被这种意念控制了自己的身体,然后就是一个月的加点赶工,终于我的博客阅读…...

    2024/5/6 3:08:27
  2. 使用electron开发桌面端应用程序准备

    安装环境安装node.js点击打开链接其中还安装了二进制文件,没弄清楚是做什么用的。安装electron点击打开链接执行npm install --g electron-prebuilt时报错,重新执行问题自己消失了。创建node.js项目点击打开链接安装缺少的npm包vs没反应。...

    2024/5/6 1:37:00
  3. @OneToMany

    orphanRemoval=true怎么理解 https://www.oschina.net/question/925076_157346https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/https://www.callicoder.com/hibernate-spring-boot-jpa-one-to-many-mapping-example/...

    2024/5/6 1:32:35
  4. SQL Server Performance Dashboard Reports

    SQL Server Performance Dashboard Reports是一组Reporting Services的报表,和SQL Server Management Studio中所介绍的报表一起使用。这些报表允许数据库管理员快速地确定他们的系统中是否存在瓶颈,瓶颈是否正在发生,捕获这些附加的诊断数据可能会对解决问题更有帮助。例如…...

    2024/4/24 23:22:18
  5. 害人的asp.net static变量

    之前一直做C/S编程,最近由于公司业务扩展要做一个网站,于是就把任务派给我了。 在做一个关于用户列表分页时,自己测试没问题,但公司几个同事同时测试时出现了一个奇怪的现象。a浏览第一页内容,然后点击下一页时一下子蹦到了第四页,用户注册以后,头像编程别人的了等等,找…...

    2024/4/24 23:22:19
  6. IDC再评中国机器学习开发平台市场,九章云极位列三甲!

    近日,国际数据公司(IDC)发布《中国人工智能软件及应用(2019下半年)跟踪》报告,对中国机器学习开发平台厂商进行持续跟进研究,并对该市场份额进行排序。九章云极作为一个中立的软件提供商,凭借具有能够适用多架构、多环境、零锁定的DataCanvas数据科学平台位列三甲。图片…...

    2024/5/6 0:08:58
  7. Electron环境配置

    本文介绍了Electron的环境配置,包括Electron下载、nodejs下载安装、NPM+Bower安装配置、app打包。Electron下载 nodejs下载安装 NPMBower安装配置 app打包参考资料1. Electron下载Electron - Build cross platform desktop apps with JavaScript, HTML, and CSS,即提供了一个…...

    2024/4/26 10:36:07
  8. SQLSERVER2000一些内置存储过程用法和说明

    前言计算机系统的安全一直是你我所重视的,但或许你一直在替系统安装修正文件,防毒软件,架设防火墙,划定非军事区等等,但可能由于撰写程式代码的疏忽,你的背后正有一个自己营造的大漏洞。sql injection – 骇客的 sql填空游戏在现今的应用程式架构中,大部分都含有数据库,…...

    2024/4/24 23:22:16
  9. Unrooted Tests问题

    问题如图所示:我将被测试的方法单独用一个类在main方法中执行,发现了问题所在,报了java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z的错误,这个错误是由于javaee.jar中的javax.persistence包中的ManyToOne.class、OneToOne.class等部分类与hib…...

    2024/4/27 23:25:32
  10. android 屏幕适配 今日头条 pt(使用blankj库)

    第一步:导入库 在module中的build.gradle中添加如下代码 dependencies {implementation "com.blankj:utilcode:1.25.9" }第二步:复写BaseActivity的getResources方法 public abstract class BaseActivity extends AppCompatActivity {@Overridepublic Resources ge…...

    2024/4/27 21:26:53
  11. IDM 下载器破解,亲测有效,转载

    首先你要下载一个IDM V6.00 (含)以上的版本 推荐官网下载:http://www.internetdownloadmanager.com/download.html破解程序下载:链接:http://pan.baidu.com/s/1pKW7Ztx 密码:7wow 安装IDM后,运行破解程序~选择IDM安装目录中的 IDMan.exe输入用户名,然后点击Patch~然后就成…...

    2024/4/28 0:03:47
  12. 关于static class的意义和一些解释

    在java中:1。final 篇 final 做为一个独立的存在,也表现的与众不同。一般情况都可以理解为 cant be changed. 1)final data: 实现constant语义。说明这个值:在编译时不会变;在运行时也不能被改变。 在java中,提供了blank final:允许大家将初始化的动作延迟到construct…...

    2024/4/28 12:27:47
  13. 浅谈CSRF攻击方式

    一.CSRF是什么?CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。二.CSRF可以做什么?你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名…...

    2024/4/28 4:23:25
  14. android 绕过R文件,通过代码获取styleable的属性

    都知道用 context.getResources().getIdentifier 获取 id,drawable等资源id,今天遇到个问题,自定义控件中要获取styleable,不能使用R文件,但是R.styleable.rootName返回一个int[],不能用上边的方法.解决方法 :R.styleable.xxx 返回的 int[] 由自己来创建 定义styleable属性 :&l…...

    2024/4/28 5:59:59
  15. 如何使用万能地图下载器下载矢量路网

    矢量路网地图是智能交通诱导和汽车导航等系统的构建基础,有极高的应用价值,现有绘图方法要么工作周期较长,要么难以获取最新的数据源。当前路网地网获取方法主要是传统测绘方法,其运用测绘仪器及测绘学原理进行实地测绘,并将测绘得到的道路网络地图绘制于图纸上或存储于磁…...

    2024/4/28 16:48:19
  16. Oracle SQL执行计划与优化

    目录系统函数UserenvROWID、ROWNUM分析Oracle索引扫描四大类DML语句-MERGEDML语句-CALL账号与日期的命令oracle table-lock的5种模式EXPLAIN PLAN查看相关EXPLAIN PLAN总结SQL优化器如何进行评估优化执行计划稳定性深入研究Oracle查询优化4大方面的主要途径SQL优化例子 系统函数…...

    2024/4/28 0:48:52
  17. Weblogic优先加载jar包配置

    weblogic自带了很多jar包 当工程中的jar和weblogic自带jar版本不一致时 往往会出现错误。 比如常见的:java.lang.NoSuchMethodError: javax.persistence.OneToOne.orphanRemoval()Z 为了解决在weblogic中jar包冲突的问题 你可以在web-inf下创建一个weblogic.xml 内容如: &…...

    2024/4/29 0:09:33
  18. 菜鸟入坑UOS的日记--UOS下安装electron开发环境

    @[TOC](这里写自定义目录标题)UOS下安装electron开发环境 关于国产操作系统UOS的安装,已经遍地都是,小编我很反感无意义的转发,正好赶上要用electron做项目,所以第一篇CSDN的博文就从在UOS操作系统中安装electron开始 安装辅助工具 安装electron需要一些辅助工具,如git等,…...

    2024/4/29 1:40:57
  19. 探秘static——类不需实例化就能用?

    一般情况下,需要用到某个类的时候,都必须先实例化这个类,才能对其进行调用。在编程过程中发现,有些类不用实例化就可以直接拿来使用,使用它的字段、方法等等。这时候,靠的就是static作用。static英文意思为“静止的,静态的”,在OOP中可以作为修饰符,类、字段、属性、方…...

    2024/4/29 17:59:52
  20. Electron中通过net的API发出HTTP请求

    场景用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106413828Electron怎样进行渲染进程调试和使用浏览器和VSCode进行调试:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl…...

    2024/4/28 7:03:37

最新文章

  1. 【LAMMPS学习】八、基础知识(5.7)Drude感应偶极子

    8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…...

    2024/5/6 3:36:08
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. LeetCode 热题 100 题解(二):双指针部分(2)| 滑动窗口部分(1)

    题目四&#xff1a;接雨水&#xff08;No. 43&#xff09; 题目链接&#xff1a;https://leetcode.cn/problems/trapping-rain-water/description/?envTypestudy-plan-v2&envIdtop-100-liked 难度&#xff1a;困难 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&am…...

    2024/5/5 1:29:39
  4. 利用Sentinel解决雪崩问题(一)

    1、解决雪崩问题的常见方式有四种: 超时处理:设定超时时间&#xff0c;请求超过一定时间没有响应就返回错误信息&#xff0c;不会无休止等待;舱壁模式:限定每个业务能使用的线程数&#xff0c;避免耗尽整个tomcat的资源&#xff0c;因此也叫线程隔离;熔断降级:由断路器统计业务…...

    2024/5/4 23:53:05
  5. 【LeetCode热题100】【二叉树】二叉树的中序遍历

    题目链接&#xff1a;94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09; 中序遍历就是先遍历左子树再遍历根最后遍历右子树 class Solution { public:void traverse(TreeNode *root) {if (!root)return;traverse(root->left);ans.push_back(root->val);tra…...

    2024/5/5 8:39:08
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57