【问题标题】:How can i migrate Video For Windows code to something better?如何将 Video For Windows 代码迁移到更好的东西?
【发布时间】:2011-10-19 13:41:39
【问题描述】:

我有一个 IP 摄像机将视频流式传输到一家公司提供给我的黑盒缓冲区代码中。他们还为我提供了如何获取缓冲区并将其转换为 unsigned char* 数组的示例代码。使用这个数组,我可以创建一个 AVI 文件并将视频缓冲区保存到其中并创建一个视频文件。

for( unsigned short lLine = 0; lLine < mSizeY -1; lLine++)
{
    NumOfLines = lLine;
    unsigned char *lCurLine = (unsigned char *)aBuffer + (lLine) * mSizeX * mBPP;
    unsigned char *lCurLineInv = temp + (mSizeY - lLine - 1) * mSizeX * mBPP;
    ::memcpy(lCurLineInv, lCurLine, mSizeX * mBPP );
}
AVIStreamWrite(mAVICompressedStream, mLastSample, 1, temp, mImageSize, AVIIF_KEYFRAME, &lSamplesWritten, &lBytesWritten )

它在很多方面都是一个糟糕的系统。包括这一切都在VFW中完成的事实

目前我在 C# 和 C++/CLi DLL 中执行所有这些代码。我知道如何使用 Directshow.Net,我想知道是否有更优雅的方法可以将我必须的视频缓冲区保存到 avi 文件或我可以在 DirectShow 或 DirectShow.net 中轻松处理的内容?

【问题讨论】:

  • 也许我可以创建一个 DirectShow.net 过滤器来处理它或其他什么?

标签: c# c++ directshow directshow.net vfw


【解决方案1】:

Samples\Misc\GSSF 中查看 DirectShow.net 的源过滤器示例。不过,我可能不会为了避免 VFW 而重写 DS:即使在 C++ 中使用它也存在稳定性问题,所以只有我这样做是为了获得输出格式的灵活性。如果您可以放弃

【讨论】:

  • 我想放弃 VFW,因为它保存在未压缩的 AVI 中,并且文件大小仅为 2gb。这相当于
  • 我对 VFW 不是很了解,但您可能需要将参数调整为 AVIMakeCompressedStream:使用 AVICOMPRESSF_KEYFRAMES,一个好的 FOURCC 应该给您比 2GB 小得多的文件!如果预装的编解码器都不够好,您可以尝试捆绑sourceforge.net/projects/x264vfw
  • 我尝试了 x264,即使在玩过它之后它似乎也没有改变视频的大小
  • 我也想放弃 VFW,因为我使用 C# 应用程序并通过 C++/CLI dll 调用 VFW,这将我的资源提升到 510,000k 的 RAM
【解决方案2】:

查看 AForge.Net。它是 VfW、DirectShow 和 FFMpeg 的 c# 包装器。 FFMpeg 路由应该是最优雅和最健壮的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2018-02-08
    • 2013-09-12
    • 1970-01-01
    • 2012-11-26
    • 2014-03-22
    相关资源
    最近更新 更多