Как я могу перенести код Video For Windows на что-то лучшее? - PullRequest
0 голосов
/ 04 августа 2011

У меня есть 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 ]

0 голосов
/ 12 сентября 2012

Проверьте AForge.Net. Это оболочка c # для VfW, DirectShow и FFMpeg. Маршрут FFMpeg должен быть самым элегантным и надежным.

0 голосов
/ 04 августа 2011

Взгляните на пример исходного фильтра DirectShow.net в Samples\Misc\GSSF.Я, вероятно, не стал бы переписывать DS только для того, чтобы избежать VFW: у меня были проблемы со стабильностью при использовании его даже в C ++, так что только я бы сделал это, чтобы получить гибкость выходного формата.Media Foundation - новая горячность, если вы можете угробить

...