ALL TO yxgszm:
第一,你得到的TVIDEOHDR结构就是视频数据,但要显示视频只需要视频数据块的头信息(TBitmapInfoHeader),不需要获得了TBitmapInfo的数据。
第二,如果你要把视频数据的每一帧专成bitmap(Frame -> Bitmap),那么还要有每一帧的TBitmapInfo的数据。
以上是我这段时间研究所得到的结论,我也不知道是怎么回事,但根据我写的实验代码推测
应该是这样。
我用的是控件做的视频捕捉,所以没有遇到太多这样的问题。
这是我看那个控件的源码用的API函数(希望对你有用)。
capGetVideoFormat(fhcapWnd, @result,sizeof(TBitmapInfo));
capSetVideoFormat(fhcapWnd,p,size);//获得了TBitmapInfo的数据(fhcapWnd是捕捉窗口句柄)你在到msdn上查查这个函数。
用同样的函数还可以得到TBitmapInfoHeader数据。
DrawDibDraw(hdd,canvas.handle,0,0,fbiwidth,fbiheight,@fBitmapInfoHeader, frame,0,0,fBitmapInfoHeader.biWidth,fbitmapInfoHeader.biheight,flags);//这是那个用来显示视频的函数。
DrawDibDraw(hdd,canvas.handle,0,0,BitmapInfo.BmiHeader.biwidth,BitmapInfo.bmiheader.biheight,@BitmapInfo.bmiHeader, frameBuffer,0,0,bitmapInfo.bmiHeader.biWidth,bitmapInfo.bmiHeader.biheight,0);
//Frame -> bitmap的方法。
我有件事不明白,你在视频捕捉这块的问题都没有完全解决,是如何把后面的工作完成的?
如果你真的完成了,希望能够不吝赐教。
1。能否大致说一下你的视频会议系统的程序工作的流程?
2。你用的是什么压缩方法和传输方式的。
3。你是如何设置缓冲队列或者说缓冲区的。
呵呵,最后声明一下,我是刚刚开始做这块内容(有一个月了吧)而且是个菜鸟(我至今没写过任何的delphi程序,我用的是cb),但我每天都研究到深夜,估计能在这个月把局域网的调试完成。预祝你也尽快成功!