大家给小弟解答一下疑问哈,使用vfw采集摄像头的视频,数据格式是什么?怎么播放每一次采集的数据帧?感激!

解决方案 »

  1.   

    你可以去看微软的demo,这个用google一收一大堆,不过我一般用Dx来做,DX也有完整的Demo.
      

  2.   

    给你个教程看看
    http://blog.csdn.net/xilyu/archive/2008/02/17/2100636.aspx
      

  3.   


    function framecallback(hwnd: hwnd; lpvhdr: pvideohdr): longint;stdcall;
    var hd:thandle;
    jpg:tjpegimage;
    memstream :tmemorystream;
    bitmap:tbitmap;
    begin //½«Êý¾ÝÏÔÔÚimage£¬
    bitmap:=tbitmap.create;
    bitmap.width :=bmpinfo.bmiheader.biwidth;
     // new size of bitmap
    bitmap.height:=bmpinfo.bmiheader.biheight;
    hd:= drawdibopen;
    //drawdibdraw(hd,bitmap.canvas.handle,0,0,bmpinfo.bmiheader.biwidth div 2 ,bmpinfo.bmiheader.biheight div 2,@bmpinfo.bmiheader,lpvhdr^.lpdata,0,0,bmpinfo.bmiheader.biwidth div 2,bmpinfo.bmiheader.biheight div 2,0);
    drawdibdraw(hd,capwnd2,0,0,bmpinfo.bmiheader.biwidth,bmpinfo.bmiheader.biheight,@bmpinfo.bmiheader,lpvhdr^.lpdata,0,0,bmpinfo.bmiheader.biwidth,bmpinfo.bmiheader.biheight,0);
    drawdibclose(hd);
    //deletedc(capwnd2);
    //releasedc(capwnd2,capwnd22);
    //·¢ËÍÊý¾Ý
    {memstream := tmemorystream.create;
    jpg := tjpegimage.create; jpg.assign(bitmap);
    jpg.compressionquality := 10;
     //jpgѹËõÖÊÁ¿
    jpg.jpegneeded;
    jpg.compress;
    jpg.savetostream(memstream);
    jpg.free;
    //ÒòΪudpÊý¾Ý°üÓдóСÏÞÖÆ£¬ÕâÀïÈç¹û³¬³ö²¿·Ö£¬¾ÍûÓд«Ê䣬ÍêÈ«¿ÉÒÔ·¢¼¸´Î·¢³öÈ¥
    form1.idudpclient1.broadcastenabled:=true;//Óù㲥¹¦ÄÜ
    if memstream.size>form1.idudpclient1.buffersize then
    //Ïò192.168.0.xÍø¶Î¹ã²¥£¬¶Ë¿Ú 9001
    form1.idudpclient1.sendbuffer('192.168.0.255',9001,memstream.memory^,form1.idudpclient1.buffersize)
    else
    form1.idudpclient1.sendbuffer('192.168.0.255',9001,memstream.memory^,memstream.size);
    memstream.free;  }
    bitmap.free;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    capwnd := capcreatecapturewindow('ÎҵĴ°', ws_visible or ws_child,//´°¿ÚÑùʽ
    0, //x×ø±ê
    0, //y×ø±ê
    panel1.width, //´°¿Ú¿í
    panel1.height, //´°¿Ú¸ß
    panel1.handle, //´°¿Ú¾ä±ú
    0); //ͨ³£Îª0
    if capwnd = 0 then exit; //¶¨ÒåÖ¡²¶×½»Øµ÷º¯Êý
    capsetcallbackonframe(capwnd,@framecallback);
    capparms.dwrequestmicrosecperframe:=1;
    capparms.flimitenabled:=false;
    capparms.fcaptureaudio:=false;
    capparms.fmcicontrol:=false;
    capparms.fyield:=true;
    capparms.vkeyabort:=vk_escape;
    capparms.fabortleftmouse:=false;
    capparms.fabortrightmouse:=false; //ÈÃÉèÖÃÉúЧ
    capcapturesetsetup(capwnd,@capparms,sizeof(tcaptureparms));
    cappreviewrate(capwnd,33); //ÉèÖÃÔ¤ÀÀÊÓƵµÄƵÂÊ
    capcapturesequencenofile(capwnd); //Èç¹ûÒª²¶×½ÊÓƵÁ÷£¬ÔòҪʹÓú¯ÊýÀ´Ö¸¶¨²»Éú³ÉÎļþ£¬²»È»»á×Ô¶¯Éú³ÉaviÎļþ
    capdriverconnect(capwnd,0); //Á¬½ÓÉãÏñÍ·É豸£¬µÚ¶þ¸ö²ÎÊýÊǸöÐòºÅ£¬µ±ÏµÍ³ÖÐ×°Óжà¸öÏÔʾÇý¶¯³ÌÐòʱ£¬ÆäÖµ·Ö±ðÒÀ´ÎΪ0µ½×ܸöÊýÈç¹ûÓжà¸öÉãÏñÍ·£¬ÄÇô¾ÍÊÇ0->1->2
    capgetvideoformat(capwnd, @bmpinfo,sizeof(tbitmapinfo)); //È¡µÃÊÓƵͼÏñÊý¾ÝÍ·
    cappreviewscale(capwnd,true); //ÊÇ·ñËõ·Å
    capoverlay(capwnd,true); //Ö¸¶¨ÊÇ·ñʹÓõþ¼Óģʽ£¬trueΪʹÓ㬷ñÔòΪfalse
    cappreview(capwnd,true);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    capcaptureabort(capwnd); //Í£Ö¹²¶×½
    capdriverdisconnect(capwnd); //½«²¶×½´°Í¬Çý¶¯Æ÷¶Ï¿ª
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
    capwnd2:=getdc(panel2.Handle;)
    end;
    自己看,能显示,有点问题,基本思路是这