2011-08-04 30 views
0

我有一臺IP攝像機將流式視頻轉換成公司提供給我的黑盒緩衝區代碼。他們還向我提供瞭如何將緩衝區轉換爲無符號字符數組的示例代碼。有了這個陣列,我可以創建一個AVI文件並保存視頻緩衝區並創建一個視頻文件。如何將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

看看DirectShow.net的源代碼過濾器示例Samples\Misc\GSSF。雖然我可能不會重寫爲DS來避免VFW,即使在C++中,我也遇到過穩定性問題,所以只有這樣做才能獲得輸出格式的靈活性。媒體基金會是新的熱點,如果你能溝通< Vista。

+0

我想消除VFW,因爲它保存在未壓縮的AVI中,並且只能保存爲2GB的文件大小。這相當於<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路線應該是最優雅和健壯的。