- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想打开一个小视频文件并映射内存中的每一帧(以应用一些自定义过滤器)。我不想处理视频编解码器,我宁愿让库为我处理。
我尝试使用带有 SampleGrabber 过滤器的 Direct Show(使用此示例 http://msdn.microsoft.com/en-us/library/ms787867(VS.85).aspx),但我只能抓取一些帧(不是每一帧!)。我是视频软件编程的新手,也许我没有使用最好的库,或者我做错了。
我已经粘贴了我的一部分代码(主要是来自 msdn 示例的修改后的复制/粘贴),不幸的是它没有按预期抓取前 25 帧...
[...]
hr = pGrabber->SetOneShot(TRUE);
hr = pGrabber->SetBufferSamples(TRUE);
pControl->Run(); // Run the graph.
pEvent->WaitForCompletion(INFINITE, &evCode); // Wait till it's done.
// Find the required buffer size.
long cbBuffer = 0;
hr = pGrabber->GetCurrentBuffer(&cbBuffer, NULL);
for( int i = 0 ; i < 25 ; ++i )
{
pControl->Run(); // Run the graph.
pEvent->WaitForCompletion(INFINITE, &evCode); // Wait till it's done.
char *pBuffer = new char[cbBuffer];
hr = pGrabber->GetCurrentBuffer(&cbBuffer, (long*)pBuffer);
AM_MEDIA_TYPE mt;
hr = pGrabber->GetConnectedMediaType(&mt);
VIDEOINFOHEADER *pVih;
pVih = (VIDEOINFOHEADER*)mt.pbFormat;
[...]
}
[...]
有视频软件经验的人,谁能给我关于代码或其他更简单的库的建议?
谢谢
编辑:Msdn 链接似乎不起作用(see the bug)
最佳答案
目前这些是 Win32 平台上最流行的视频框架:
Windows 视频:来自 Win95 时代的旧 Windows 框架,但仍然被广泛使用,因为它使用起来非常简单。不幸的是,它仅支持已安装正确 VFW 编解码器的 AVI 文件。
DirectShow:标准的WinXP框架,它基本上可以加载你可以用Windows Media Player播放的所有格式。比较难用。
Ffmpeg :更准确地说是 Ffmpeg 开源多媒体实用程序附带的 libavcodec 和 libavformat。即使您没有在系统上安装编解码器,它也非常强大并且可以读取很多格式(几乎所有您可以使用 VLC 玩的东西)。它使用起来相当复杂,但你总是可以从它附带的 ffplay 代码或开源软件中的其他实现中获得灵感。无论如何,我认为它仍然比 DS 更容易使用(而且速度更快)。 Windows下需要MinGW编译,但是所有步骤都解释的很好here (此时链接已断开,希望不要死)。
QuickTime :Apple 框架不是 Windows 平台的最佳解决方案,因为它需要安装 QuickTime 应用程序以及每种格式的正确 QuickTime 编解码器;它不支持多种格式,但在专业领域中很常见(因此某些编解码器实际上仅适用于QuickTime)。实现起来应该不会太难。
Gstreamer : 最新的开源框架。我对此了解不多,我猜它涵盖了其他一些系统(但我不确定)。
所有这些框架都在 OpenCv Highgui 中作为后端实现,DirectShow 除外。 Win32 OpenCV 的默认框架是使用 VFW(因此只能打开一些 AVI 文件),如果你想使用其他的,你必须下载 CVS 而不是官方版本,并且仍然对代码进行一些黑客攻击,无论如何它不是太完整,例如 FFMPEG 后端不允许在流中搜索。如果您想在 OpenCV 中使用 QuickTime this可以帮到你。
关于C++ : What's the easiest library to open video file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956/
OpenAL.org && 创意开发网站已关闭。我选择替代版本 OpenAL Soft .我很担心,因为在 OpenAL Soft 的二进制安装中我找不到 alut.h header 。 alut.h
我使用 Android Studio 已经有一段时间了,但有一天应用程序突然出错了。当我尝试单击我的目录以查找要导入或打开的文件时,应用程序变得异常缓慢并且根本没有响应。当我最终成功切换到存储我的文件
自 Firefox 4 以来,这似乎是一个奇怪的功能变化。在使用 window.open() 打开一个窗口后,当用鼠标中键单击打开的窗口中的链接时(或右键单击并选择“在新窗口中打开”选项卡') 导致链
我无法从 Open::URI 的 rdoc 中得知当我这样做时返回的是什么: result = open(url) URL 返回 XML,但我如何查看/解析 XML? 最佳答案 open 返回一个 I
经常开发asp但对于细致的说法,真实不太清楚,这里简单的介绍下。 一般情况下 读取数据都是用rs.open sql,conn,1,1 修改数据:rs.open sql,conn,1,3 删除
关于 pathlib 标准库中的模块,是 path.open() 方法只是内置 open() 的“包装器”功能? 最佳答案 如果您阅读了 source code的 pathlib.Path.open你
我想将 Open Liberty 运行时的语言更改为 en_US从 Eclipse IDE 中,但我不知道如何。 也尝试使用 JVM 参数的首选项来设置它,但它没有用。 -Duser.language
这是我所拥有的: 参数“opener”未在可能的函数调用参数中列出。这是 PyCharm 错误还是其他原因? PyCharm 2018.3.5 社区版,Windows 7 上的 Python 3.6.
我正在使用 Tinkerpop 的 GraphFactory.open(Configuration 配置) Java 命令来访问 Neo4j 数据库。 一个最低限度的工作示例是: Configurat
这个问题在这里已经有了答案: What is the python "with" statement designed for? (11 个答案) 关闭 7 年前。 我没有使用过 with 语句,但
我正在玩 python 3.5 中的 open 函数。我不明白 opener 参数(最后一个参数)在 open 函数中的用法。根据 python 文档:可以通过将可调用对象作为打开器传递来使用自定义打
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 5 年前。 Improve th
我试图用 Python 来做一些模拟 3D 声音的工作。我试图运行此代码(答案中提供):Python openAL 3D sound类似,两次都收到: ModuleNotFoundError: No
我一直认为 open 和 io.open 可以互换。 显然不是,如果我相信这个片段: import ctypes, io class POINT(ctypes.Structure): _fie
这个问题在这里已经有了答案: What's the difference between io.open() and os.open() on Python? (7 个答案) 关闭 9 年前。 我是
我正在尝试更好地了解 WCF 的一些内部工作原理。我已经做了相当多的环顾四周,但我无法找到关于 ChannelFactory.Open() 与 IClientChannel.Open() 相比的明确解
这个问题在这里已经有了答案: What is the python "with" statement designed for? (11 个答案) 关闭 7 年前。 我知道有很多关于在 python
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章adodb.recordset.open(rs.open)方法参数详解由
不久前我遇到了一个interesting security hole Link 看起来足够无害,但有一个漏洞,因为默认情况下,正在打开的页面允许打开的页面通过 window.opener 回调到它。有
这在我的应用程序上运行良好,但由于某种原因我无法让它在这里正常工作。无论如何,我的问题是,当我单击列表标题时,我想关闭之前打开的列表标题并仅保留事件的列表标题打开。目前它会打开我点击的所有内容,但也会
我是一名优秀的程序员,十分优秀!