首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:打开视频文件最简单的库是什么

C++:打开视频文件最简单的库是什么
EN

Stack Overflow用户
提问于 2008-09-01 13:35:42
回答 7查看 49.8K关注 0票数 26

我想打开一个小视频文件,并映射内存中的每一帧(以应用一些自定义过滤器)。我不想处理视频编解码器,我宁愿让库为我处理它。

我尝试使用带有SampleGrabber过滤器的直接显示(使用这个示例http://msdn.microsoft.com/en-us/library/ms787867(VS.85).aspx,但我只抓取了一些帧(不是每帧!)。我是视频软件编程的新手,也许我没有使用最好的库,或者我做错了。

我已经粘贴了代码的一部分(主要是从msdn示例中修改的复制/粘贴),不幸的是它没有像预期的那样捕获前25帧……

代码语言:javascript
运行
复制
[...]

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)

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-09-01 14:53:39

目前,以下是Win32平台上最流行的视频框架:

windows的

  1. 视频:来自Win95时代的旧windows框架,但仍然广泛使用,因为它非常简单。不幸的是,它只支持AVI文件,对于正确的VFW编解码器已经是installed.
  2. DirectShow:标准的WinXP框架,它基本上可以加载所有格式,你可以用Windows Media Player播放。Ffmpeg开源多媒体实用工具附带的libavcodec和libavformat很难更精确地进行use.
  3. Ffmpeg:。它非常强大,可以读取很多格式(几乎所有你可以用VLC播放的东西),即使你没有在系统上安装编解码器。它的使用相当复杂,但您总是可以从随附的ffplay代码或开源软件中的其他实现中获得灵感。无论如何,我认为它仍然比DS更容易使用(也更快)。它需要由MinGW在视窗上,但所有的步骤都解释得很好的here (在这一刻的链接是下降的,希望不要dead).
  4. QuickTime:苹果框架不是最好的解决方案的视窗平台,因为它需要QuickTime应用程序安装和适当的QuickTime编解码器的每种格式;它不支持许多格式,但它是相当普遍的专业领域(所以一些编解码器实际上只为QuickTime)。对最新的开源框架进行implement.
  5. Gstreamer:应该不会太难。我不太了解它,我猜它覆盖了其他一些系统(但我不确定)。

除了DirectShow之外,所有这些框架都在OpenCv Highgui中作为后端实现。Win32 OpenCV的默认框架是使用VFW (因此只能打开一些AVI文件),如果你想使用其他文件,你必须下载CVS而不是官方版本,并且仍然在代码上做一些黑客操作,而且它无论如何都不太完整,例如FFMPEG后端不允许在流中查找。如果您想在OpenCV中使用QuickTime,this可以帮助您。

票数 29
EN

Stack Overflow用户

发布于 2008-09-01 13:59:41

我已经使用OpenCV加载视频文件并对其进行处理。它对许多类型的视频处理也很方便,包括对计算机视觉有用的视频处理。

票数 2
EN

Stack Overflow用户

发布于 2008-09-01 15:16:10

使用SampleGrabber的“回调”模型可能会得到更好的结果。请参阅Samples\C++\DirectShow\Editing\GrabBitmaps中的示例。

在Samples\C++\DirectShow\Filters\Grabber2\grabber_text.txt和readme.txt中也有很多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档