C# 如何将Windows视频代码迁移到更好的版本?

C# 如何将Windows视频代码迁移到更好的版本?,c#,c++,directshow,directshow.net,vfw,C#,C++,Directshow,Directshow.net,Vfw,我有一个IP摄像机,将视频流传输到一家公司提供给我的黑盒缓冲代码中。他们还向我提供了示例代码,说明如何获取缓冲区并将其转换为无符号char*数组。使用此阵列,我可以创建一个AVI文件,并将视频缓冲区保存到其中,然后创建一个视频文件 for( unsigned short lLine = 0; lLine < mSizeY -1; lLine++) { NumOfLines = lLine; unsigned char *lCurLine = (unsigned char *

我有一个IP摄像机,将视频流传输到一家公司提供给我的黑盒缓冲代码中。他们还向我提供了示例代码,说明如何获取缓冲区并将其转换为无符号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中轻松处理的东西?

看看Samples\Misc\GSSF中Directshow.Net的源过滤器示例。我可能不会重写DS只是为了避免VFW:尽管在C++中我也使用过稳定的问题,所以只有我这样做才能得到输出格式的灵活性。媒体基金会是一个新的热点,如果你可以放弃< Vista。< /P> < P>查看AForge.Net。它是VfW、DirectShow和FFMpeg的c包装。FFMpeg路由应该是最优雅和健壮的。

也许我可以创建一个DirectShow.net过滤器来处理它或其他什么?我想放弃VFW,因为它保存在未压缩的AVI中,文件大小仅为2gb。这相当于我对VFW不是非常了解,但您可能需要调整参数以AVIMakeCompressedStream:使用AVICOMPRESSF_关键帧和一个好的FOURCC应该可以为您提供比2GB小得多的文件!如果预装的编解码器都不够好,你可以尝试捆绑。我尝试了x264,但它似乎没有改变视频的大小,即使在使用它之后也没有改变。因此,我想放弃VFW,因为我使用C应用程序,通过C++/CLI dll调用VFW,这将我的资源增加到510000K的RAM