如何将Video For Windows代码迁移到更好的地方?

时间:2011-08-04 00:06:26

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

我有一个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上工作的东西?

2 个答案:

答案 0 :(得分:0)

Samples\Misc\GSSF中查看DirectShow.net的源过滤器示例。我可能不会为了避免使用VFW而重写DS:尽管在C ++中我使用它也存在稳定性问题,所以只有我这样才能获得输出格式的灵活性。媒体基金会是一个新的热点,如果你可以放弃&lt; Vista中。

答案 1 :(得分:0)

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