0

我有一个 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 中轻松处理的东西?

4

2 回答 2

0

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

于 2012-09-12T15:06:05.407 回答
0

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

于 2011-08-04T01:32:33.247 回答