首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

请教,VFW视频流存储为AVI文件,应该如何做!欢迎一起讨论

2012-02-28 
请问,VFW视频流存储为AVI文件,应该怎么做!欢迎一起讨论!我现在视频采集,压缩,显示都做好了.在视频回调函数

请问,VFW视频流存储为AVI文件,应该怎么做!欢迎一起讨论!
我现在视频采集,压缩,显示都做好了.
   
    在视频回调函数中压缩(用的是Buf   :=   ICSeqCompressFrame(@CapVar,0,lpVhdr.lpData,@bKeyFrame,@OutActSize);)之后的数据Buf存储为AVI文件播放,但是播放不了.
 
    请知道的高手帮助解决!
    存储代码如下:
        //--------------压缩图像参数声明----------------
        //   视频数据格式
        bBitMapInFo   :   PBItmapInfo;
        OutFormatSize   :   DWORD;

        //--------------压缩图像参数声明----------------
        //--------------存储AVI文件参数声明----------------
        favifile:     IAVIFILE;
        AVIStream   :     IAVISTREAM;
        nFrames   :   Integer;
        //--------------存储AVI文件参数声明----------------
    function   TFromVdisplayWin.SaveAVIFileInit:   Boolean;
var
        szFile   :   string;
        iRes   :   Integer;
        StreamInfo   :   TAVIStreamInfo;
begin
        try
                Result   :=   False;
                AVIFileInit;
                iRes   :=   0;
                nFrames   :=   0;
                szFile   :=   SaveToAVIFile(FormatDateTime( 'hh-nn ',Now));
                iRes   :=   AVIFileOpen(fAVIFile,PChar(szFile),OF_CREATE,nil);
                Result   :=   True;
                if   iRes <> AVIERR_OK   then
                begin
                        WriteErrorFile(ErrorFile, '未连接 ', '调用AVI函数库初始化错误 ');
                        Result   :=   False;
                end;

                FillChar(StreamInfo,   sizeof(StreamInfo),   0);
                StreamInfo.fccType   :=   streamtypeVIDEO;
                StreamInfo.fccHandler   :=   0;
                StreamInfo.dwFlags   :=   0;
                StreamInfo.dwSuggestedBufferSize   :=   BmpOutInfo^.bmiHeader.biSizeImage;
                StreamInfo.rcFrame.Right   :=   BmpOutInfo^.bmiHeader.biWidth;
                StreamInfo.rcFrame.Bottom   :=   BmpOutInfo^.bmiHeader.biHeight;
                StreamInfo.dwScale   :=   1;
                StreamInfo.dwRate   :=   30;

                if   (AVIFileCreateStream(fAVIFile,   AVIStream,   StreamInfo)   <>   0)   then


                      raise   Exception.Create( '创建avi流失败 ');
           
                AVIStreamSetFormat(AVIStream,nFrames,BmpOutInfo,SizeOf(BmpOutInfo));
        except
                on   E:Exception   do
                begin
                        Result   :=   False;
                        WriteErrorFile(ErrorFile, '未知,存储视频文件初始化 ', '错误:   '+E.Message);
                end;
        end;
end;

procedure   TFromVdisplayWin.SaveAVIFileEnd;
begin
        try
                AVIStreamClose(AVIStream);
                if(fAVIFile   <>   nil)   then
                        AVIFileRelease(fAVIFile);
                AVIFileExit();
        except
                on   E:Exception   do
                begin
                        WriteErrorFile(ErrorFile, '存储视频文件结束 ', '错误:   '+E.Message);
                end;
        end;
end;

在回调函数中加
OutActSize   :=   bBitMapInfo.bmiHeader.biSizeImage;
                Buf   :=   ICSeqCompressFrame(@CapVar,0,lpVhdr.lpData,@bKeyFrame,@OutActSize);
 
AVIStreamWrite(AVIStream,LONG(nFrames),1,Buf,BmpOutInfo.bmiHeader.biSizeImage,
                                                                      AVIIF_KEYFRAME,nil,nil);

    请各位高手帮助,有例子更好.

    如果有需要我可以帖出代码来.

  欢迎志同道合的朋友一起讨论.我的Email:   qqx266152@163.com


[解决办法]
找一本专门的介绍多媒体编程的书去看看,这个好像有专门的包,你去看看,这块我也不是很清楚,只有帮你顶起来,一起学习。。
[解决办法]
VFW效果太差~,已被淘汰的
现在都推荐用DirectShow的
[解决办法]
StreamInfo.fccHandler ,BmpOutInfo.bmiHeader.biCompression和CapVar.fccHandler这3个成员表示的就是你所说的图象格式。

热点排行