WEB开发网
开发学院软件开发VC 用VC编写点对点视频会议程序 阅读

用VC编写点对点视频会议程序

 2008-11-12 19:26:46 来源:WEB开发网   
核心提示: 显示捕获的视频帧有许多方法和API可以显示捕获的视频,你可以使用SetDIBitsToDevice()方法直接显示,用VC编写点对点视频会议程序(3),但给予GDI的函数非常的慢,更好的方法是使用DrawDib API 显示,按accept按钮,在机器A将显示一个通知对话框,DrawDib

显示捕获的视频帧

有许多方法和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();

解码器:

这是tmndecoder(H.263解码器)的修改版。使用ANSI C编写,我将它转换到C++使其方便在Windows应用程序中使用。我移除了一些用于显示和文件处理的文件,移除了不必要的代码并增加了一些新文件。

原始的库中一些文件不适合于实时的解码。我已经做了修改使其适合实时的解码处理。现在,可以使用该库来解码H263帧,该库非常快,性能不错。

解码的使用方法:

//Initialize the decoder  InitH263Decoder();
  // Decompress the frame....
  // > rgbdata must be large enough to hold the output data...
  // > decoder produces the     image data in YUV420 format. After
  //decoding, it is converted into RGB24 format...  DecompressFrame  (data,size,rgbdata,buffersize);
  // Finaly, terminate the decoder  ExitH263Decoder();

如何运行程序

拷贝可执行文件到局域网上两台不同的机器中:A和 B,运行他们。在机器A(或B)中选择connect菜单条,在弹出的对话框中输入机器B的名字或IP地址然后按connect按钮,在另外一台机器(B)显示出accept/reject对话框,按accept按钮。在机器A将显示一个通知对话框,按OK后开始会议。

上一页  1 2 3 

Tags:VC 编写 视频会议

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