Как я могу перенести код Video For Windows на что-то лучшее?
У меня есть 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?
2 ответа
Взгляните на пример исходного фильтра DirectShow.net в Samples\Misc\GSSF
, Я, вероятно, не стал бы переписывать DS только для того, чтобы избежать VFW: у меня были проблемы со стабильностью при использовании его даже в C++, так что только я бы сделал это, чтобы получить гибкость выходного формата. Media Foundation - новая горячность, если вы можете угробить
Проверьте AForge.Net. Его оболочка aC# для VfW, DirectShow и FFMpeg. Маршрут FFMpeg должен быть самым элегантным и надежным.