Windows下WDM 视频捕获简介 -- blog.youkuaiyun.com/suntaoznz

本文介绍了Windows Driver Model (WDM) 视频捕获技术,特别是在Win98, Win2K及更高版本操作系统中的应用。讨论了WDM如何解决VFW体系结构的问题,包括对DirectShow和WDM流的协同工作、多数据流支持以及视频区域捕获等功能。还涵盖了VfWWDM Mapper、WDM视频捕获结构、DirectShow Filter Graph等关键概念。" 106369219,9345906,挑战C语言基础:5道面试难题解析,"['C语言基础', '编程面试', '数据类型', '内存管理', '指针']
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

WDM 视频捕获介绍

 

摘要:该文主要提供一些在Win98,win2K及以上操作系统中,进行Windows Driver ModelWDM)视频捕获的相关知识介绍。如果你对WDM视频捕获感兴趣,可以来看看这些东西。欢迎到我的博客blog.youkuaiyun.com/suntaoznz看其他文章!

 

Windos下视频捕获简史... 1

     WDM和视频捕获... 1

     VfWWDM Mapper 2

WDM 视频捕获结构... 2

     DirectShow应用程序... 3

     DirectShow Filter Graph. 3

     WDM数据流... 4

   视频捕获 Minidrivers. 4

     Pins, Streams, Formats. 4

视频流命名约定... 5

DirectShow 视频捕获的接口和属性... 5

捕获数据流类型... 6

  流输出数据格式... 6

结束语

 

Windos下视频捕获简史

VFWVideo For Windows1.0版本在199211月发布,它是为在Windows3.1下将电影最优化地捕获到磁盘上而发布的。从那以后,视频捕获技术就越来越受到关注了。

   VFW技术同样受到了很多批评,它捕获的数据保存到磁盘上会占用大量磁盘空间,每秒数据量超过20M,同时需要大量的客户端支撑软件,VFW体系架构上的不足在视频会议应用上和PC/TV应用上被暴露无遗,这样就要求一种新的视频捕获技术来弥补这些不足。

       VFW的体系结构缺乏为视频会议,电视浏览,视频区域捕获和VBIVertical Blanking Interval)数据流提供强而有效的支持。一些视频卡等设备开发商在设计自己的产品时,针对这些缺陷,对VFW进行了功能扩展。由于没有统一的标准,我们的应用程序在使用这些扩充的功能时,就必须要写一些基于特定硬件的代码。这就意味着当要改变捕获驱动程序时,就必须要对显卡的驱动程序进行修改。

WDM和视频捕获

WDM 视频捕获设计就是为了来解决VFW体系结构中存在的这些问题。WDM视频捕获主要的好处体现在:

D:\phpstudy_pro\WWW\w\wp-content\plugins\my-block>npm run start > my-block@0.1.0 start > wp-scripts start --blocks-manifest assets by chunk 17.6 KiB (name: my-block/index) assets by path my-block/*.css 1.88 KiB asset my-block/index.css 979 bytes [emitted] (name: my-block/index) 1 related asset asset my-block/index-rtl.css 942 bytes [emitted] (name: my-block/index) asset my-block/index.js 15.6 KiB [emitted] (name: my-block/index) 1 related asset asset my-block/index.asset.php 146 bytes [emitted] (name: my-block/index) assets by chunk 2 KiB (name: my-block/style-index) asset my-block/style-index.css 1.02 KiB [emitted] (name: my-block/style-index) (id hint: style) 1 related asset asset my-block/style-index-rtl.css 1000 bytes [emitted] (name: my-block/style-index) (id hint: style) assets by chunk 1.06 KiB (name: my-block/view) asset my-block/view.js 1000 bytes [emitted] (name: my-block/view) 1 related asset asset my-block/view.asset.php 84 bytes [emitted] (name: my-block/view) asset my-block/block.json 500 bytes [emitted] [from: src/my-block/block.json] [copied] Entrypoint my-block/view 1.06 KiB (1.15 KiB) = my-block/view.js 1000 bytes my-block/view.asset.php 84 bytes 1 auxiliary asset Entrypoint my-block/index 19.6 KiB (11.7 KiB) = 6 assets 3 auxiliary assets runtime modules 5.18 KiB 14 modules orphan modules 4.83 KiB [orphan] 4 modules built modules 4.54 KiB (javascript) 464 bytes (css/mini-extract) [built] javascript modules 4.11 KiB cacheable modules 3.95 KiB modules by path ./src/my-block/*.js 3.85 KiB 4 modules modules by path ./src/my-block/*.scss 100 bytes 2 modules external ["wp","blocks"] 42 bytes [built] [code generated] external ["wp","i18n"] 42 bytes [built] [code generated] external ["wp","blockEditor"] 42 bytes [built] [code generated] external "ReactJSXRuntime" 42 bytes [built] [code generated] css modules 464 bytes css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postc
06-12
<think>我们首先需要理解用户的问题:用户在使用本地版WordPress的@wordpress/create-block脚手架创建块后,想要了解`npmrunstart`命令的输出含义以及构建过程。根据之前的历史记录,我们知道:-`@wordpress/create-block`是一个npm包,用于创建WordPress区块。-创建区块后,在区块目录中会有一系列文件,包括package.json,其中定义了scripts,包括`start`和`build`。在生成的区块项目中,`npmrunstart`通常用于启动开发服务器,实时编译代码,并监视文件变化。现在,我们来详细解释`npmrunstart`的输出和构建过程:1.**命令的作用**:-`npmrunstart`会启动一个开发服务器,它使用webpack(或其他构建工具)来编译源代码(位于src目录)为浏览器可识别的代码。-它会启动一个监视模式(watchmode),当源代码发生变化时,自动重新编译。-同时,它会生成一个开发版本的JavaScript文件(未压缩,包含sourcemap),便于调试。2.**输出含义**:当我们运行`npmrunstart`后,控制台会输出一系列信息,包括:-构建开始的消息。-编译过程,显示编译的模块和每个模块的大小。-如果有错误或警告,会显示出来。-最后,通常显示构建成功,并可能输出访问的URL(例如,如果启动了开发服务器)和所用时间。例如,典型的输出可能如下:```>my-block@0.1.0start>wp-scriptsstartℹ「wds」:Projectisrunningathttp://localhost:3000/ℹ「wds」:webpackoutputisservedfrom/ℹ「wds」:Contentnotfromwebpackisservedfrom/path/to/my-blockℹ「wds」:404swillfallbackto/index.html✔「wdm」:Compiledsuccessfully.```解释:-`wp-scriptsstart`:实际运行的命令,`wp-scripts`是WordPress官方提供的一组脚本,封装了webpack配置。-`「wds」`:WebpackDevServer的缩写,表示开发服务器。-`Projectisrunningathttp://localhost:3000/`:开发服务器的地址。-`webpackoutputisservedfrom/`:编译输出的文件将通过根路径提供。-`Contentnotfromwebpackisservedfrom...`:非由webpack编译的文件(如静态文件)从指定目录提供。-`404swillfallbackto/index.html`:当请求路径不存在时,将返回index.html(用于单页面应用,但在区块开发中通常不太需要)。-`✔「wdm」:Compiledsuccessfully.`:表示编译成功。3.**构建过程**:-**入口文件**:构建过程从src/index.js(或指定的入口)开始。-**依赖解析**:webpack会解析所有依赖的模块(包括JS、JSX、CSS、图片等)。-**加载器处理**:使用不同的loader处理不同类型的文件,例如:-Babelloader:将JSX和ES6+语法转译为ES5。-CSSloader:处理CSS文件,可能会把CSS提取到单独文件或内联。-其他:如图片、字体等资源会通过url-loader或file-loader处理。-**插件**:使用各种webpack插件,例如:-MiniCssExtractPlugin:将CSS提取到单独文件。-热更新插件:实现模块热替换(HMR)。-**输出**:生成的文件会放在build目录(默认是build目录)或内存中(开发服务器)。开发时,这些文件不会真正写入磁盘,而是保存在内存中,通过开发服务器访问。4.**开发服务器的作用**:-提供自动刷新:当代码改变并重新编译后,浏览器自动刷新。-热模块替换(HMR):在不刷新整个页面的情况下替换修改的模块,保持应用状态。-错误提示:在页面上显示编译错误。5.**与WordPress集成的过程**:-在开发模式下,我们通常需要将编译后的区块(例如build/index.js)注册到WordPress中。但开发服务器生成的文件在内存中,所以我们需要将开发服务器提供的URL作为区块的JavaScript文件。这可以通过修改block.json中的`viewScript`或`editorScript`字段指向开发服务器的URL(如http://localhost:3000/index.js)来实现。但是,通常情况下,脚手架生成的默认配置已经处理好了,我们只需确保在开发时访问正确的URL。**注意**:在开发中,我们可能会使用代理将WordPress站点与开发服务器连接,以避免跨域问题。例如,在开发服务器的配置中设置代理,将所有对WordPress的API请求代理到WordPress站点的URL。6.**总结:**-`npmrunstart`用于开发环境,提供实时编译和热更新。-输出信息主要包括构建状态、服务器地址、编译结果等。-构建过程基于webpack,使用预设的配置(由@wordpress/scripts提供)来处理源代码。根据用户之前的问题,我们还要注意引用参考。由于用户提供了引用[1],其中提到了`@wordpress/components`,在构建过程中也可能包含这些依赖的模块,会一起被编译。最后,我们需要生成相关问题。§§相关问题§§1.`npmrunstart`过程中遇到编译错误如何解决?2.如何配置开发服务器代理以解决跨域问题?3.如何自定义webpack配置以支持额外的文件类型?4.`npmrunstart`和`npmrunbuild`输出的文件有何区别?5.如何将多个区块整合到一个项目中开发?</think> ### `npm run start` 命令的输出解释与构建过程 在本地 WordPress 环境中使用 `@wordpress/create-block` 创建区块后,执行 `npm run start` 命令会触发 **开发模式构建**,以下是该命令输出内容的关键含义和构建流程解析: --- ### 一、核心构建流程(通过 `wp-scripts` 实现) ```mermaid graph LR A[启动命令] --> B[初始化 Webpack] B --> C[加载 src/ 源代码] C --> D{实时监测变化} D -->|文件修改| E[增量编译] E --> F[热模块替换 HMR] F --> G[浏览器自动刷新] ``` --- ### 二、控制台输出示例及解析 ```bash $ npm run start > my-block@0.1.0 start > wp-scripts start ℹ 「wds」: Project is running at http://localhost:3000/webpack-dev-server/ ℹ 「wds」: webpack output is served from / ℹ 「wds」: Content not from webpack is served from /Users/project/my-block ✔ 「wdm」: Compiling... ✔ 「wdm」: Compiled successfully in 2456ms ``` #### 输出关键解析: 1. **`wp-scripts start`** - 表示调用 WordPress 官方封装的构建工具链 `@wordpress/scripts`[^1] 2. **开发服务器地址** - `Project running at http://localhost:3000` - 提供实时预览服务,通常嵌入在区块编辑器内 3. **构建状态指示器** - `「wdm」: Compiling...` → 开始编译 - `✔ Compiled successfully` → 成功编译 - `2456ms` → 本次编译耗时 4. **增量编译机制** - 修改文件后会自动出现: ``` 「wdm」: Compiling...wdm」: Hash: 2d9f1a3c7f8e1265a1d2 Version: webpack 5.75.0 Time: 423ms ``` - 仅重新编译变化的模块(约 400ms vs 首次 2500ms) --- ### 三、构建产物变化对比 | 阶段 | 开发模式 (`start`) | 生产模式 (`build`) | |------|---------------------|---------------------| | 文件位置 | 内存虚拟文件系统 | `/build/` 物理目录 | | JS文件 | `index.js` (未压缩) | `index.min.js` (压缩) | | CSS文件 | 内联在JS中 | 独立 `style.css` | | SourceMap | 包含 | 不包含 | | 性能优化 | 无 | 代码分割+压缩 | --- ### 四、技术实现原理 1. **热更新 (HMR)** - 通过 WebSocket 建立编辑器与开发服务器的实时连接 - 文件修改时仅更新变更模块,数学描述: $$ \Delta M = \frac{\partial \mathcal{B}}{\partial t} \bigg|_{t=t_0} $$ 其中 $\mathcal{B}$ 为区块状态,$t$ 为时间 2. **依赖解析树** 基于 `block.json` 自动生成依赖图谱: ```mermaid graph TD index.js --> edit.js index.js --> save.js edit.js --> @wordpress/components save.js --> @wordpress/block-editor ``` --- ### 五、调试建议 若构建失败需检查: 1. `block.json` 中的 `editorScript` 路径是否正确 2. Node.js 版本是否 ≥ v14 3. 控制台警告是否提示缺失依赖(如未安装 `@wordpress/scripts`)[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值