问题标签 [vfw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
156 浏览

video - 如何将其他编解码器添加到对话窗口?

当我从 VFW (WM_CAP_GET_VIDEOFORMAT) 调用带有视频格式列表的 dlg 窗口时,我只有 2 个位置,其中一个 - MJPG (Motion JPG),当被选中时,将视频捕获为黑屏,这意味着 - 它不起作用,但可以选择。YUY2 工作正常,我知道如何管理它。

DLG_GET_VIDEOFORMAT

另一方面,如果我看到所有已安装编解码器的列表,它不仅仅是 MJPG 和 YUY2

  1. ICM Microsoft RLE MRLE msrle32.dll 6.1.7601.17514
  2. ICM 微软视频 1 MSVC msvidc32.dll 6.1.7601.17514
  3. ICM Microsoft YUV UYVY msyuv.dll 6.1.7601.17514
  4. ICM Кодек 英特尔 IYUV IYUV iyuv_32.dll 6.1.7601.17514 ICM 东芝
  5. ICM YUV 编解码器 Y411 tsbyuv.dll 6.1.7601.17514
  6. ICM Кодек Cinepak,由 Radius cvid iccvid.dll 1.10.0.13 制作

ICM(图像色彩管理)和 RLE - 8 位位图压缩。和别的。但对话框只显示 2(并且 MJPG 不可用)。

它是如何工作的?如何将其他编解码器添加到对话窗口,以及如何使其从 VFW 激活?我徒劳地尝试了 SET_VIDEOFORMAT.. 只有一个 - YUY2 被接受并且可以设置。

请告诉我更多关于相机 - 驱动程序 - vfw COM Graph builder 原则的信息。例如,如何添加 ICM Microsoft RLE 编解码器?

0 投票
1 回答
149 浏览

windows - WaveOutWrite 直接来自网络摄像头音频捕获回调

我正在使用 VFW 和音频捕获回调从网络摄像头捕获音频数据,同时,在同一捕获回调的主体内,使用 waveOutWrite 将采样数据定向到默认 MAPPER。

网络摄像头的信号质量为 1 通道/8 位/11025 个样本/秒。由于带有FORMAT_QUERY标志的waveOpen,默认音频设备支持声音格式。

waveWriteOut的返回是NOERROR,但我能听到的与我的期望相去甚远。房间里很安静,应该是空虚的白噪音。

请听听YouTube 录音

它开始,一个包一个包大小约 16K,WAVEHDR 结构还可以。然后它逐渐减慢并退出系统未恢复错误。

这和什么相似?

下面是来自 VFW 的音频 dta 接收器代码,lpWHdr 看起来不错,甚至内部标志触发为 2 = Prepared .. 似乎 VFW 和 WaveAudio 是相互创建的 :)

我认为缓冲区没有溢出,因为您可以看到 DateTime 毫秒标记,它每 1400 毫秒打勾,采样率 = 11025,缓冲区大小约为 16500 字节 = 看起来不错..

UPD:我只是将非托管缓冲区复制到托管并查看了它的值。看起来像锯齿甚至超载的鼻窦。0 4 0 3 0 32 109 213 255 251 255 243 241 97 0 7 0 2 1 1 0 5 0 然后以大约相同的数字和相同的周期再次上下波动。不完全一样,大致相同(+/-)。此外,我可以使用内部 Windows 记录器记录来自该摄像头的信号,我可以看到信号电平在我的声音上下跳动,所以网络摄像头的麦克风也可以。我想这可能是什么VFW输入音频信号馈线错误。即使它接受了 WAVEFORMATEX 并发回了 WAVEHDR,它们都很好......但是缓冲区数据填充了其他来源,而不是网络摄像头,尽管 VFW 说它必须来自网络摄像头,因为视频是从同一来源捕获的,它正在工作,我只是添加了一条额外消息: SendMessage(camHwnd, WM_CAP_SET_CALLBACK_WAVESTREAM, 0, audioCallback); 我很确定如果我会使用waveIn 而不是VFW,它会正常工作.. 我稍后会检查它.. 但是为什么VFW 的工作方式不像它应该的那样?

0 投票
0 回答
350 浏览

c++ - Directshow实时压缩输出小尺寸视频

所以我做了一个应用程序来查看和捕获来自 WDM 捕获源的视频流,我的问题是文件大小太大(即 7 分钟视频将是 1.5 GB)。我已经在我的图表“ffdshow 编码器”中使用了一个编码器,但我仍然需要一个更压缩的输出视频。

这是我正在使用的图表:

直显图

我尝试使用其他编码器,如 x264、x265,但经过一番搜索,我发现编码器本身不会显示为过滤器,它需要包装为 VFW,所以我下载并安装了 x264 的 VFW 包装器和 x265 编码器。而且它们仍然没有出现在图表中,所以我搜索了更多,发现它们只出现在 32 位版本的图形编辑器中,并且不会工作/出现在任何软件的 64 位版本中,尽管那时我被困。

但经过更多搜索后,我发现了这个 github 项目:

https://github.com/RenderHeads/DirectShow-vfwFilter

这基本上是 32 位 vfw 的 64 位包装器(据我所知),所以我下载了它并试了一下,经过几次实验后,我设法使用 x264vfw 编码器输出了一个相对较小的视频文件。但我对这个过滤器的问题是它没有保存它的配置,如下所示

VFW 包装器

这就是我现在卡住的地方,我需要一个好的压缩器/编码器来获得一个小的输出文件。

0 投票
1 回答
77 浏览

c++ - AVIFileInit() 中的分段错误

我目前在 XP 上使用带有 GCC 编译器的 Code::Blocks。以下测试代码中对 AVIFileInit() 的调用会导致分段错误:

我找不到此问题的任何原因或解决方案。任何帮助将非常感激。

0 投票
2 回答
1592 浏览

c++ - VFW:AVIStreamGetFrameOpen() 返回 NULL

我正在尝试使用 Video For Windows 界面编写 C++ Video 类,基于此 NeHe 教程中的概念,但使用更现代的代码(用于 OpenGL 3/4)。在我最初加载视频(不检索帧)的函数中,我指的是AVIStreamGetFrameOpen(),根据MSDN

返回可与 AVIStreamGetFrame 函数一起使用的 GetFrame 对象。

同一页面还说:

如果系统找不到可以将流解压缩为给定格式或任何 RGB 格式的解压缩器,则该函数返回 NULL。

我的问题是返回AVIStreamGetFrameOpen(),如前所述NULL,这意味着没有找到与文件匹配的解压缩器。但是,我的文件可以毫无问题地使用 Windows Media Player 播放,我相信这意味着应该可以使用解压缩器。

VFW 似乎缺乏文档,而且 MSDN 页面并不总是非常有用。任何人都知道可能导致此问题的原因是什么?

这是相关函数的代码:

忽略我奇怪的变量前缀。

0 投票
1 回答
254 浏览

visual-studio - DirectShow 是否允许基于已安装的编解码器解码几乎任何视频?

我在比较 VFW、MediaFoundation 和 DirectShow。虽然 VFW 非常陈旧且过时,但它至少在编码和解码视频方面提供了很大的灵活性,因为您几乎可以选择任何编码器/解码器,AFAIK,而且您不仅限于只有微软选择的解码器/编码器的子集。

DirectShow 是否提供使用任何选择的编解码器解码(解压缩)多种视频类型(如 vfw)的能力,还是您必须只使用微软选择的子集?

确实有些 api 需要编写您自己的自定义系统来解码,但我想知道“开箱即用”功能(即用型),而不需要那么多自定义代码。VFW(windows 视频)似乎提供了这一点,通过使用预先准备好的解码器/编码器,您不需要任何工作,但是 VFW 已经过时并且可能在某些时候已经过时 - 但似乎需要最少的编码工作。

0 投票
1 回答
137 浏览

video - Windows 视频,向 AVI 添加文本/字幕 - 不显示

下午好,

vfw 框架可以选择将文本流添加到视频中。该流是否应该在最终视频文件中显示为字幕流?我使用“AVIStreamWrite”函数将文本写入每一帧。

我的问题,文本流应该用于字幕吗?是否有替代方法可以使用 vfw 框架将字幕写入/绘制/烘焙到框架中?

我感觉“windows 视频”已经过时,不再受支持/维护。也许有更新的工具集?

0 投票
1 回答
66 浏览

windows - 在创建 AVI 文件时检查文件大小,如果超出特定大小限制,则停止向其添加帧

我正在使用AVIFile 参考API(https://msdn.microsoft.com/en-us/library/windows/desktop/dd756808 (v=vs.85).aspx )来创建 AVI 视频输出文件。在将帧添加到视频文件时,我想检查文件的大小,该文件创建到现在,如果超过一定的大小限制(比如 1GB),我想停止将帧添加到文件并关闭 AVI 文件并退出。

我正在使用以下代码:

AVIFileGetStream将空值返回到 ppavi 指针。因此,它在调用AVIStreamDataSize时崩溃。

在创建 AVI 文件的过程中,我检索 AVI 文件大小的方法是否正确?如果是这样,我应该在代码中更正什么以获得正确大小的 AVI 文件?否则,请让我知道检索相同内容的正确方法是什么?

提前致谢。

0 投票
2 回答
464 浏览

video - 从 VFW 中删除 Codec 日志(Windows 视频)

每当我尝试使用 x264vfw 编解码器从游戏录制视频时,我都会收到此日志消息,这会使我的游戏最小化,并且不可避免地使我的工具记录黑屏几秒钟,直到我恢复游戏。如何我摆脱它?

图片

0 投票
1 回答
1355 浏览

c++ - 如何显示视频捕捉过滤器对话框(亮度、曝光等相机设置)?

我正在做一个基于 Windows 的应用程序,我在其中使用相机。我想允许用户更改相机设置(VfwCaptureDialog_Source),因为它在 Skype 或 amcap 应用程序中很常见。现在,我发现对话框来自 vfw,可以从 dshow api 激活。当我从 AmCap 执行此操作时,它正在工作。你能帮我让这个代码在给定的网络摄像头上工作吗(需要多摄像头支持)?我在使用相机时使用 Qt 和 OpenCV。在 opencv 中,仅使用相机索引来选择合适的相机。该索引来自 Qt,我在哪里可以获得很好的相机名称列表。我从此代码得到的错误是 1170:“指定的属性集在对象上不存在”

...