WEB开发网
开发学院软件开发VC 点对点视频会议程序:VideoNet 阅读

点对点视频会议程序:VideoNet

 2006-07-23 11:34:04 来源:WEB开发网   
核心提示: 有许多方法和API可以显示捕获的视频,你可以使用SetDIBitsToDevice()方法直接显示,点对点视频会议程序:VideoNet(3),但给予GDI的函数非常的慢,更好的方法是使用DrawDib API 显示,这样可以很容易用于任何Windows应用程序,我移除了快速h263编码库

有许多方法和API可以显示捕获的视频。你可以使用SetDIBitsToDevice()方法直接显示,但给予GDI的函数非常的慢。更好的方法是使用DrawDib API 显示。DrawDib函数为设备无关位图(DIBs)提供了高性能的图形绘制能力。DrawDib函数直接写入视频内存,因此性能更好。

以下代码摘要演示了使用DrawDib API显示视频帧。

// Initialize DIB for drawing...
  HDRAWDIB hdib=::DrawDibOpen();
// Then call this function with suitable parameters....
  ::DrawDibBegin(hdib,...);
// Now, if you are ready with the frame data, just invoke this
// function to display the frame
  ::DrawDibDraw(hdib,...);
// Finally, termination...
  ::DrawDibEnd(hdib);
  ::DrawDibClose(hdib);
编解码库

编码器:

我使用快速h.263编码库进行编码。该库是使其实时编码更快的 Tmndecoder 修改版。我已经将该库从C转换到C++,这样可以很容易用于任何Windows应用程序。我移除了快速h263编码库中一些不必要的代码与文件,并在.h和.cpp文件中移除了一些定义与申明。

以下是H263编码库的使用方法:// Initialize the compressor
  CParam cparams;
  cparams.format = CPARAM_QCIF;
  InitH263Encoder(&cparams);
//If you need conversion from RGB24 to YUV420, call this
  InitLookupTable();
// Set up the callback function
// OwnWriteFunction is the global function called during
// encoding to return the encoded data...
  WriteByteFunction = OwnWriteFunction;
// For compression, data must be in the YUV420 format...
// Hence, before compression, invoke this method
  ConvertRGB2YUV(IMAGE_WIDTH,IMAGE_HEIGHT,data,yuv);
// Compress the frame.....
  cparams.format = CPARAM_QCIF;
  cparams.inter  = CPARAM_INTRA;
  cparams.Q_intra = 8;
  cparams.data=yuv;  // Data in YUV format...
  CompressFrame(&cparams, &bits);
// You can get the compressed data from the callback function
// that you have registerd at the begining...
// Finally, terminate the encoder
// ExitH263Encoder();
解码器:

上一页  1 2 3 4  下一页

Tags:视频会议 程序 VideoNet

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接