2011-08-04 13 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의 소스 필터 샘플을보십시오. 나는 아마 DS로 VFW를 피하기 위해 다시 작성하지 않을 것이다 : 나는 C++에서도 그것을 사용하는 안정성 문제를 가지고 있었기 때문에 출력 형식의 유연성을 얻으려고 만했다. < 비스타를 도망 칠 수 있다면 Media Foundation은 새로운 일입니다.

+0

비 압축 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 경로는 가장 우아하고 견고해야합니다.