2011-08-04 14 views
0

私は会社が私に提供したブラックボックスバッファコードにビデオをストリーミングするIPカメラを持っています。彼らはまた、私はどのようにバッファを取ることができ、それをunsigned char *配列に変換するかのサンプルコードを提供しました。この配列を使用して、AVIファイルを作成し、ビデオバッファを保存してビデオファイルを作成することができます。Video For Windowsのコードをより良いものに移行するにはどうすればよいですか?

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で簡単に作業できる何かに持っている、このビデオバッファを保存するもっとエレガントな方法があるのだろうか?

+0

多分、私はDirectShow.netフィルタを作成してそれを処理することができますか? – Grant

答えて

0

Samples\Misc\GSSFでDirectShow.netのソースフィルタのサンプルをご覧ください。私はおそらく、VFWを避けるためだけにDSに書き直すことはしませんでした。C++でも安定性の問題があったので、出力形式の柔軟性を得るためにはやっています。あなたがVistaの<を捨てることができるならば、Media Foundationは新しい魅力です。

+0

VFWは非圧縮AVIファイルと2GBのファイルサイズしか保存しないので、VFWを削除したい。 <30秒のビデオに相当します。 VFWの圧縮機は吸います。私はグラフに接続して一度に変換して圧縮することができるdirectshowを期待していました。 – Grant

+0

VFWについてよく知っているわけではありませんが、AVIMakeCompressedStreamにパラメータを微調整する必要があります:AVICOMPRESSF_KEYFRAMESと良いFOURCCあなたに2GBよりはるかに小さいファイルを与えるべきです!プリインストールされているコーデックのどれも十分でない場合は、http://sourceforge.net/projects/x264vfw/ –

+0

を試してみてください。x264を試してみましたが、それを再生した後でもビデオのサイズが変わるようです。 – Grant

0

AForge.Netをご覧ください。 VfW、DirectShow、FFMpeg用のC#ラッパーです。 FFMpegルートは最もエレガントで堅牢でなければなりません。

関連する問題