NTFS文件系统详解(二)MBR\EBR基本信息

news/2024/5/18 22:06:24/文章来源:https://blog.csdn.net/tianjin_ren/article/details/127245809

NTFS文件系统详解(二)MBR\EBR基本信息

  • 一、MBR结构分析
    • 1. 第一个分区表项
    • 2. 第二个分区表项
    • 3. 第三个分区表项
    • 4. 第四个分区表项
  • 二、EBR结构分析
    • 1. 第一个分区表项
    • 2. 第二个分区表项
      • 2.1 第一个分区表项
      • 2.2 第二个分区表项
      • 2.3 第三个分区表项
  • 系列文章目录



  经过上一篇文章对硬盘的基本结构的详细介绍后,我们再来看看MBR和EBR的结构。

一、MBR结构分析


  MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
  主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变 的,从而实现多系统共存。
在这里插入图片描述

  其中从0x01BE到0x01FD这六十四个字节表示的是4个主分区的信息。每个主分区16个字节描述,这16反个字节的含义是:

存贮字节位内容及含义
第1字节引导标志,若值为80H表示活动分区,若值为00H表示非活动分区。
第2\3\4字节本分区的起始磁头号、扇区号、柱面号。其中:
  磁头号–第2字节;
  扇区号–第3字节的低6位;
  柱面号–第3字节高2位+第4字节8位。
第5字节分区类型符;
  00H–表示该分区未用(即没有指定);
  06H–FAT16基本分区;
  0BH–FAT32基本分区;
  05H–扩展分区;
  07H–NTFS分区;
  0FH–(LBA模式)扩展分区(83H–Linux分区等)
第6\7\8字节本分区的结束磁头号、扇区号、柱面号。其中:
  磁头号–第6字节;
  扇区号–第7字节的低6位;
  柱面号–第7字节高2位+第8字节8位。
第9\10\11\12字节本分区之前已用了的扇区数(分区起始扇区)。
第13\14\15\16字节本分区的总扇区数


  注:由于硬盘的发展,2\3\4字节的分区起始扇区所在柱面,磁头,扇区,6\7\8字节的分区终止扇区所在的柱面,磁头,扇区信息已不正确,如果硬盘稍微大点,chs逻辑硬盘地址方案中的c值有可能就不能由现在分配的位数表达了。因而,在柱面超过3FF的时候,将失效,这三个值一般为FE FF FF(16450560个扇区之后,也就是扇区位置超过7.44G時设为这个值),在MBR规范中,直接舍弃“virtual CHS values逻辑硬盘地址方案”,而采用LBA方案,更详细的分区类型符如下:

分区类型标志
----
00空,mocrosoft不允许使用。63GNU HURD or Sys
01FAT3264Novell Netware
02XENIX root65Novell Netware
03XENIX usr70Disk Secure Mult
04FAT16<32M75PC/IX
05Extended80Old Minix
06FAT1681Minix/Old Linux
07HPFS/NTFS82Linux swap
08AIX83Linux
09AIX bootable84OS/2 hidden C:
0AOS/2 Boot Manage85Linux extended
0BWin95 FAT3286NT volume set
0CWin95 FAT3287NT volume set
0BWin95 FAT1693Amoeba
0FWin95 Extended(>8GB)94Amoeba BBT
10OPUSA0IBM Thinkpad hidden
11Hidden FAT12A5BS0/386
12Compaq diagnost 116 Open BSD
16HiddenFAT16A7NextSTEP
14Hidden FAT16<32GBB7BSDI fs
17Hidden HPFS/NTFSB8BSDI swap
18AST Windows swapBESolaris boot
partition
1BHidden FAT32--
1CHidden FAT32 partition (using LBA-mode INT 13 extensions)C0DR-DOS/Novell DOS secured partition
--C1DRDOS/sec
1EHidden LBA VFAT partitionC4DRDOS/sec
24NEC DOSC6DRDOS/sec
3CPartition MagicC7Syrinx
40Venix 80286DBCP/M/CTOS
41PPC PreP BootE1DOS access
42SFSE3DOS R/0
40QNX4.xE4SpeedStor
4EQNX4.x 2nd partEBBeOS fs
4FQNX4.x 3rd partF1SpeedStor
50OnTrack DMF2DOS 3.3+ secondary partition
51OnTrack DM6 Aux--
52CP/MF4SpeedStor
53oNtRACK DM6 AuxFELAN step
54OnTrack DM6FFBBT
55EZ-Drive--
56Golden Bow--
5CPriam Edisk--
61Speed Stor--


  知道MBR的基本信息之后,我们再来看看实际的情况事怎样的.我将我电脑磁盘分了五个区,其中三个基本分区,三个扩展分区(其中一个分区格式化成FAT16)。
在这里插入图片描述

  用WinHex查看MBR的数据,可以看到446字节的主引导程序和64字节的分区表项+两字节的”55 AA”有效分区结束标志。
在这里插入图片描述

1. 第一个分区表项

在这里插入图片描述


  80 01 01 00 07 FE FF FF 3F 00 00 00 C1 FF BF 03

偏移(offset)描述
80活动分区
01 01 00磁头号1,扇区号1,柱面号0
07NTFS分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
3F 00 00 00分区起始扇区号63
C1 FF BF 03分区所占扇区数03BFFFC1(62914497),30G大小

2. 第二个分区表项

在这里插入图片描述


  00 FE FF FF 07 FE FF FF 00 00 C0 03 00 00 40 00

偏移(offset)描述
00非活动分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
07NTFS分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
00 00 C0 03分区起始扇区号62914560
00 00 40 00分区所占扇区数(4194304),2G大小

3. 第三个分区表项

在这里插入图片描述


  00 FE FF FF 07 FE FF FF 00 00 00 04 00 00 40 00

偏移(offset)描述
00非活动分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
07NTFS分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
00 00 00 04分区起始扇区号67108864
00 00 40 00分区所占扇区数(4194304),2G大小

4. 第四个分区表项

在这里插入图片描述


  00 FE FF FF 0F FE FF FF 00 00 40 04 00 00 C0 00

偏移(offset)描述
00非活动分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
0F扩展分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
00 00 40 04分区起始扇区号71303168
00 00 C0 00分区所占扇区数(12582912),6G大小

二、EBR结构分析


  通过分区表项,我们便可以得到分区所在的扇区范围,找到分区相应的扇区.但是如果是扩展分区,还需要EBR找到相应扩展分区所在的位置
  扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录(Extended Boot Record)EBR,也有人称之为虚拟MBR或扩展MBR,意思是一样的。扩展引导记录包括一个扩展分区表和该扇区的标签。扩展引导记录将记录只包含扩展分区中每个 逻辑驱动器的第一个柱面的第一面的信息。一个逻辑驱动器中的引导扇区一般位于相对扇区32或63。
  但是,如果磁盘上没有扩展分区,那么就不会有扩展引导记 录和逻辑驱动器。
  第一个逻辑驱动器的扩展分区表中的第一项指向它自身的引导扇区。第二项指向下一个逻辑驱动器的EBR。如果不存在进一步的逻辑驱动器,第二项就不会使用,而且被记录成一系列零。如果有附加的逻辑驱动器,那么第二个逻辑驱动器的扩展分区表的第一项会指向它本身的引导扇区。第二个逻辑驱动器的扩展分区表的第二项指向下一个逻辑驱动器的EBR。扩展分区表的第三项和第四项永远都不会被使用。
  下图是扩展分区的一般结构。
在这里插入图片描述


  跟上面一样,我们通过WinHex查看EBR的数据,可以看到在01BE开始处有着扩展分区的分区表项。
在这里插入图片描述

1. 第一个分区表项

在这里插入图片描述


00 FE FF FF 07 FE FF FF 40 00 00 00 C0 07 40 00

偏移(offset)描述
00非活动分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
07NTFS分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
40 00 00 00分区起始扇区号64(相对扩展分区首扇区号),实际64+71303168=71303232
C0 07 40 00分区所占扇区数(4196288),2G大小

2. 第二个分区表项


00 FE FF FF 05 FE FF FF 00 08 40 00 00 08 40 00

偏移(offset)描述
00非活动分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
05扩展分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
00 08 40 00分区起始扇区号4196352(相对本逻辑驱动器首扇区号),实际4196352+71303168=75499520
00 08 40 00分区所占扇区数(4196352),2G大小


  可以看到这里是第二个逻辑驱动器的第一个扇区,有两个分区表项。
在这里插入图片描述

2.1 第一个分区表项

在这里插入图片描述


00 FE FF FF 07 FE FF FF 40 00 00 00 C0 07 40 00

偏移(offset)描述
00非活动分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
07NTFS分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
40 00 00 00分区起始扇区号64(相对本逻辑驱动器首扇区号),实际64+75499520=75499584
C0 07 40 00分区所占扇区数(4196288),2G大小

2.2 第二个分区表项


00 FE FF FF 05 FE FF FF 00 10 80 00 00 F0 3F 00

偏移(offset)描述
00非活动分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
05扩展分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
00 10 80 00分区起始扇区号8392704(相对扩展分区首扇区号),实际8392704+71303168=79695872
00 F0 3F 00分区所占扇区数(4190208),2G大小


  可以看到,因为是最后一个扩展驱动器,所以分区项只有一项。在这里插入图片描述

2.3 第三个分区表项

在这里插入图片描述


00 FE FF FF 0E FE FF FF 40 00 00 00 C0 EF 3F 00

偏移(offset)描述
00非活动分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
0EFAT16分区
FE FF FF超过第16450560个扇区,设为最大值,可忽视
40 00 00 00分区起始扇区号64(相对本逻辑驱动器首扇区号),实际64+79695872=79695936
C0 EF 3F 00分区所占扇区数(4190144),2G大小


  通过实际的实验,我发现,在MBR里只有四个分区项,分别保存着三个基本分区和一个扩展分区的基本信息,在扩展分区里,又分为多个扩展逻辑分区,每个分区的扩展分区表里保存着本扩展分区的实际数据开始扇区信息和下一个扩展分区的基本信息,直到最后一个扩展分区
  下面附加一段C语言代码,可用于读取任一扇区信息。

/*******************************************************************************
程序员       : enjoy5512
最后修改时间 : 2016年3月22日 20:56:41
程序说明     : 本程序,用于读取给定输入的磁盘扇区的扇区号的512字节内容,并回显到命令行界面
测试环境     : Windows XP SP2 + VC6.0
待解决问题   : 磁盘第二个扇区的信息获取不到因为测试的原因,程序只有在输入超大的扇区号才会退出
*******************************************************************************/#include <windows.h>  
#include <stdio.h>
#include <stdlib.h>/*
函数说明:这个函数用于按照指定的格式输出一个扇区的512字节的信息,字符ascll码低于32或者大于127的都用'.'来代替,其余的输出指定的字符
输入参数:char buff[] : 字符串数组
输出参数:0*/
int ShowBuff(char buff[])
{int i = 0;int j = 0;system("cls");                            //清屏system("mode con cols=80 lines=37");      //设定命令行窗口大小printf("********************************************************************************");printf("********************************************************************************");printf("\t     0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  |\n");for(i = 0;i < 32;i++)                     //每行输出16个字节,后面跟着相应的字符{printf("%#011X:",i*16);for(j = 0;j < 16;j++){//每四位单独输出,否则会被当作八位有符号整数输出,暂无解决办法printf(" %X%X",(buff[j+i*16]&240)>>4,buff[j+i*16]&15);                                               }printf(" | ");for(j = 0;j < 16;j++){if(buff[j+i*16] > 31 && buff[j+i*16] < 127){//输出相应的字符,若对应ascll码低于32或者大于127的都用'.'来代替printf("%c",buff[j+i*16]);     }else{printf(".");}}printf("\n");}return 0;
}/*
函数说明:这个函数用于按照给定的扇区号返回相应扇区512字节信息
输入参数:HANDLE hDisk : 磁盘句柄char buff[]  : 字符串数组int n        : 扇区号DWORD* DCount: 读取的字节数
输出参数:0*/
int GetBuff(HANDLE hDisk,char buff[] , int n,DWORD* DCount)
{LARGE_INTEGER li={0}; //记得初始化int h_sector = 0;     //32位系统,用于当超出32位寻址范围时保存高地址int l_sector = 0;     //32位系统,用于当超出32位寻址范围时保存低地址l_sector = n%8388607; //取低地址部分h_sector = n/8388607; //取高地址部分li.LowPart = l_sector * 512; //我32位系统int取四位,FFFFFFFF/200H = 8388607li.HighPart = h_sector;      //高位直接传过去//如果超出寻址范围则退出,否则将指针移动到相应扇区if(-1 == SetFilePointer(hDisk,li.LowPart,&li.HighPart,FILE_BEGIN)){MessageBox(NULL,"Error sector!The program will exit!!","Error",MB_OK);exit(-1);}//读取512字节内容到buffReadFile(hDisk,  //要读的文件句柄 buff,            //存放读出内容512,                 //要读的字节数DCount,        //实际读取字节数NULL);return 0;
}/*
函数说明:这个函数用于按照给定的磁盘号,返回相应的句柄
输入参数:HANDLE hDisk : 磁盘句柄int nDisk    : 磁盘号号
输出参数:0*/
int GetHandle(HANDLE* hDisk,int nDisk)
{char szDriverBuffer[128];     //保存相应磁盘路径信息memset(szDriverBuffer,0,128); //格式化设备文件名称sprintf(szDriverBuffer,"\\\\.\\PhysicalDrive%d",nDisk);//获取设备名称*hDisk = CreateFileA(szDriverBuffer,               // 设备名称,这里指第一块硬盘,多个硬盘的自己修改就好了GENERIC_READ,                 // 指定读访问方式FILE_SHARE_READ | FILE_SHARE_WRITE,  // 共享模式为读 | 写,只读的话我总是出错..NULL,                         // NULL表示该句柄不能被子程序继承OPEN_EXISTING,                // 打开已经存在的文件,文件不存在则函数调用失败NULL,                         // 指定文件属性NULL); if (*hDisk==INVALID_HANDLE_VALUE)    //如果获取句柄失败,则退出{MessageBox(NULL,"Error open disk!","Error",MB_OK);exit(-1);}return 0;
}/*
函数说明:主函数
输入参数:0
输出参数:0*/
int main(void)
{char buff[513] = {0};  //保存512字节信息,因为字符串数组后面会加\0,所以申请513字节HANDLE hDisk;          //磁盘句柄DWORD DCount=0;        //返回读取的字节数int sector = 0;        //扇区号int nDisk = 0;         //磁盘号printf("请输入需要读取的磁盘号:");   //获取磁盘号scanf("%d",&nDisk);ShowBuff(buff);                      //初始化界面GetHandle(&hDisk,nDisk);             //获取磁盘句柄for(;;)                              //循环显示扇区信息{printf("please input the number of sector : ");  //获取扇区号scanf("%d",&sector);GetBuff(hDisk,buff,sector,&DCount);              //获取扇区信息ShowBuff(buff);                                  //显示扇区信息}CloseHandle(hDisk);                  //释放句柄return 0;
}

系列文章目录

  • NTFS文件系统详解
  • NTFS文件系统详解(一)硬盘基本信息
  • NTFS文件系统详解(二)MBR\EBR基本信息

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springBoot实验填报系统

摘要 国内教育行业的快速发展&#xff0c;人们为了能够更加方便地管理学生实验填报&#xff0c;实验填报系统被人们开发出来从而更好地方便管理学生实验填报&#xff0c;一个完美的实验填报系统已经成为各个学校的追求目标。 本系统利用SpringBoot技术进行开发实验填报系统是未…

asp.net旅游网站系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 ASP.NET 旅游网站系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发 asp.net旅游网站系统VS开发sqlserver数…

git基本使用方式整理

文章目录A:配置个人信息B:创建目录C:初始化仓库D:往仓库添加和提交文件E:状态查看命令F:版本回退G:对git占存区的理解H&#xff1a;管理修改I&#xff1a;撤销修改J&#xff1a;删除文件K:关联远程仓库L:仓库克隆在Git安装完成之后&#xff0c;需要配置Git连接的用户信息&#…

python与Electron联合编程记录之八(Hello Flask!)

Hello Flask&#xff01; 既然知道了Electron和Flask信息交换的原理&#xff0c;我们就可以开始进行Electron和Flask的联合编程了。   让我们紧接第三部分“Hello&#xff0c;Electron!”项目继续探索Flask的用法。 1、配置虚拟环境 由于Flask是python编写的&#xff0c;所以…

Python百日进阶-WEB开发】Day156 - 前端基础 之 BootStrap(一)

文章目录一、BootStrap的安装和使用1.1 BootStrap介绍1.2 BootStrap特点1.3 下载使用1.3.1 下载BootStrap:1.3.2 下载 jquery.js1.4 创建项目1.5 bootstrap和vue对比1.5.1 Bootstrap和vue不是一个层级的东西&#xff0c;Vue是框架&#xff0c;bootstrap是基于jQuery的组建库。1…

洛谷 T281315 掌控

PS&#xff1a;如果读过题了可以跳过题目描述直接到题解部分 提交链接&#xff1a;洛谷 T281315 掌控 题目 题目描述 公元 2044 年&#xff0c;人类进入了宇宙纪元。L 国有 nnn 个星球&#xff0c;分别编号为 111 到 nnn &#xff0c;每一星球上有一个球长。有些球长十分强大…

Ryu的安装+使用

ryu的安装 安装RYU&#xff0c;需要安装一些python的套件&#xff1a; python-eventlet python-routes python-webob python-paramiko 安装RYU主要有两种方式&#xff1a; 1、pip安装 pip install ryu git clone https://github.com/osrg/ryu.git cd ryu sudo pip install -…

【路径规划】基于matlab卡尔曼滤波、三次插值极速赛道赛车路径规划【含Matlab源码 2158期】

一、卡尔曼滤波路径追踪优化简介 割草机器人通过比对当前t时刻位置、导航方程之间偏移角度θ和偏移距离d,确定t1时刻的运动方向属于递推型路径追踪。割草机器人工作过程中受到地面起伏等环境因素影响,在采用上述追踪方法时会和预测值产生偏差,造成机器人偏离导航方程,称之为系…

数据大放送之HMA

一、前言 今天给大家带来的是空间分辨率为8米的DEM数据&#xff0c;可能有小伙伴会疑惑&#xff0c;是不是需要付费&#xff1f; 不用、不用、不用&#xff0c;完全免费。 也就是我们的HMA数据&#xff0c;全称NSIDC DAAC High Mountain Asia&#xff0c;也叫高山亚洲数据集…

Java:JSP是什么?Jakarta服务器页面介绍

Jakarta Server Pages(以前称为 JavaServer Pages)是一种 Java 标准技术&#xff0c;开发人员使用它来为 Java Web 应用程序编写动态的、数据驱动的网页。JSP 建立在 Java Servlet(又名 Jakarta Servlet)规范之上&#xff0c;是 Jakarta EE 中包含的用于持续支持和升级的 Java …

JPA的学习

JPA jpa详解 JPA是Java Persistence API的简称&#xff0c;中文名Java持久层API&#xff0c;是JDK 5.0注解或XML描述对象&#xff0d;关系表的映射关系&#xff0c;并将运行期的实体对象持久化到数据库中。 Spring Date整合jpa Spring Date pring Data是Spring的一个子项目…

超详细Redis入门教程!

一、引言 为啥需要redis?没有reids有啥问题?↓ 1.1 数据库压力过大 由于用户量增大&#xff0c;请求数量也随之增大&#xff0c;数据压力过大 1.2 数据不同步 多台服务器之间&#xff0c;数据不同步 1.3 传统锁失效 多台服务器之间的锁&#xff0c;已经不存在互斥性了 redis如…

(附源码)计算机毕业设计SSM志愿者服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ArcGIS基础:要素转点、要素折点转点与面转线

1、【面、线转点】&#xff1a; 实验所用数据如下&#xff1a;点、线、面分别为&#xff1a; 可以使用【要素转点】工具&#xff0c;工具位于【要素】下&#xff0c;点击之后弹出【要素转点】对话框&#xff0c;只有一点需要注意&#xff1a;【内部】&#xff0c;右侧方框有…

k8s 部署minio

k8s 部署minio 部署NFS mkdir /nfs_data/minio_data chmod -R 777 /nfs_data/minio_data创建命名空间minio kubectl create ns minioDeployment apiVersion: apps/v1 kind: Deployment metadata:name: minionamespace: minio spec:replicas: 1selector:matchLabels:app: miniot…

100 年前有个人竟然敢劝人们定投……

有这么个人,名字叫约翰拉什科布(John J. Raskob)。 只说名字,估计你也不知道他是谁。(虽然 400 多天之前写过一次关于他的文章,但,估计还是有很多人根本就没看到……)就算你身在中国,压根就没机会去纽约亲眼看到帝国大厦,估计你也曾经见过这张照片……拉什科布在通用…

实验4:开源控制器实践——OpenDayligh

一、实验目的能够独立完成OpenDaylight控制器的安装配置; 能够使用Postman工具调用OpenDaylight API接口下发流表。二、实验环境 Ubuntu 20.04 Desktop amd64 三、实验要求 (一)基本要求利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight控制器;打开OpenDaylight控…

numpy快速处理数据学习笔记

numpy快速处理数据 《python编程基础及应用》 陈波 文章目录numpy快速处理数据一、多维数组二、数组的快速生成(一)、等差数列&#xff08;二&#xff09;、等比数列&#xff08;三&#xff09;、数组生成函数(四&#xff09;、fromfunction&#xff08;&#xff09;三、一维数…

雅可比矩阵

雅可比矩阵 本人之前写过的关于变量替换的文章&#xff1a;多重积分中的换元法 个人理解&#xff1a;在坐标系变换前后&#xff0c;微元面积的大小有变化&#xff0c;所以变换后的坐标系需要乘一个因子&#xff08;即雅克比矩阵的行列式&#xff09;才能与变换前的微元面积大…

ffmpeg命令行录制一个具有非IDR性质的I帧的视频

之前在代码上写过几篇ffmpeg桌面录制的博客&#xff0c;用ffprobe查看里面的帧时&#xff0c;全部都是IDR这种I帧&#xff0c;没有普通的I帧&#xff0c;如下所示&#xff1a; <frame media_type"video" stream_index"0" key_frame"1" pkt_p…