AVI视频存储
我现在在用视频采集卡做视频存储的工作,点击“保存”按钮对摄像头采集的视频进行算法处理后以AVI的格式存储到硬盘中,保存按钮函数的内容是:void CShowStreamDlg::OnBaocun()
{
CString filename;
CFileDialog FileDlg(FALSE,_T("avi"));
if(FileDlg.DoModal()==IDOK)
{
ilename=FileDlg.GetPathName();
nFrames=0;
m_bIsbaocun=true;
}
}
下面是回调函数里的内容,但是保存成AVI视频文件时,文件占存储空间,里面有视频数据,但是打不开,用暴风影音打开提示说文件头不完整,不是标准的视频文件。然后我用视频修复软件对AVI视频进行修补,能打开视频,但是只能很模糊的看见里面的画面。
难道视频存储必须进行编码后才能存储,直接将视频信息流往AVI文件里一帧一帧的写不行吗?
初学者问题比较多,请老师们见谅,请多多指点!谢谢了!
if(m_bIsbaocun==true)
{
if(nFrames==0)
{
AVIFileInit();
AVIFileOpen(&pfile,filename,OF_WRITE|OF_CREATE,NULL);
memset(&strhdr,0,sizeof(strhdr));
strhdr.fccType=streamtypeVIDEO;
strhdr.fccHandler=0;
strhdr.dwScale=1;
strhdr.dwRate=25;
strhdr.dwSuggestedBufferSize=pInfo->bmiHeader.biSizeImage;
SetRect(&strhdr.rcFrame,0,0,pInfo->bmiHeader.biWidth,pInfo->bmiHeader.biHeight);
AVIFileCreateStream(pfile,&ps,&strhdr);
}
AVIStreamSetFormat(ps,nFrames,&(OutHeader),sizeof(OutHeader));
AVIStreamWrite(ps,nFrames,1,(LPBYTE)GrayImage,OutHeader.biSizeImage,AVIIF_KEYFRAME,NULL,NULL);
nFrames++;
}
if(m_bIstingzhibaocun==true)
{
AVIStreamClose(ps);
if(pfile!=NULL)
AVIFileExit();
MessageBox("保存成功");
m_bIsbaocun=false;
m_bIstingzhibaocun=false;
有懂视频存储的老师们请多多给点建议。谢谢了!