通行证: 用户 密码
http://www.pconline.cn/
汽车网 | 游戏网 | 时尚女性
分站:北京 上海 广州 深圳 香港
广西 重庆 山东 江苏 辽宁 福建
首 页 | 今日报价 | 产业资讯 | 数码世界 | 硬件资讯 | 软件资讯 | 下 载 | 游 戏 |
论 坛 | 产 品 库 | 渠道商情 | 招聘培训 | 二    手 | 评 测 室 | 导 购 | 社 区 |
摄影
部落
手 机
数码相机
随身听
 DIY配件
笔记本
 台式机
摄像机
精品廊
-
您现在的位置: 软件资讯 > 开发特区 > 开发语言 > VC/MFC 免费新闻代码RSS新闻聚合
  点对点视频会议程序VideoNet开发例解 出处:CSDN
[ 2005-08-02 10:03:39 ] 作者:Nagareshwar Talekar /翻译:POWERCPP 责任编辑:xietaoming

  下载源代码

  该程序可以用于两个人在LAN/Intranet(或者Internet)上进行视频会议。现在有许多视频会议程序,每个都有各自的性能提升技术。主要的问题是视频会议视频帧的尺寸对于传输来说太大。因此,性能依赖于对帧的编解码。我使用快速h263编码库来达到更好的压缩率提高速度。该程序做些小改动也可以在Internet上使用。

音频的录制与播放

  我在以前的语音会议程序中使用了RecordSound和PlaySound类,这里我将提供摘要说明RecordSound和PlaySound类的使用。

// Create and Start Recorder Thread
   record=new RecordSound(this);
   record->CreateThread();


// Create and Start Player Thread
   play=new PlaySound1(this);
   play->CreateThread();


// Start Recording
   record->PostThreadMessage(WM_RECORDSOUND_STARTRECORDING,0,0);


// Start Playing
   play->PostThreadMessage(WM_PLAYSOUND_STARTPLAYING,0,0);


// During audio recording, data will be available in the OnSoundData
// callback function of the RecordSound class. Here, you can place
// your code to send the data to remote host...


// To play the data received from the remote host
   play->PostThreadMessage(WM_PLAYSOUND_PLAYBLOCK,size,(LPARAM)data);


// Stop Recording
   record->PostThreadMessage(WM_RECORDSOUND_STOPRECORDING,0,0);


// Stop Playing
   play->PostThreadMessage(WM_PLAYSOUND_STOPPLAYING,0,0);


// At last, to Stop the Recording Thread
   record->PostThreadMessage(WM_RECORDSOUND_ENDTHREAD,0,0);


// To stop playing thread...
   play->PostThreadMessage(WM_PLAYSOUND_ENDTHREAD,0,0);

视频捕获

  使用VFW(Video For Windows)API进行视频捕获,它提供了通过webcam进行视频捕获。VideoCapture.h 和VideoCapture.cpp包含了处理视频捕获的代码。

  如下代码说明了如何使用该类:

// Create instance of Class
   vidcap=new VideoCapture();

// This is later used to call display function of the main
// dialog class when the frame is captured...
   vidcap->SetDialog(this);

// This does lot of work, including connecting to the driver
// and setting the desired video format. Returns TRUE if
// successfully connected to videocapture device.
   vidcap->Initialize();

// If successfully connected, you can get the BITMAPINFO
// structure associated with the video format. This is later
// used to display the captured frame...
   this->m_bmpinfo=&vidcap->m_bmpinfo;

// Now you can start the capture....
   vidcap->StartCapture();

// Once capture is started, frames will arrive in the "OnCaptureVideo"
// callback function of the VideoCapture class. Here you call the
// display function to display the frame.

// To stop the capture
   vidcap->StopCapture();

// If your job is over....just destroy it..
   vidcap->Destroy();

  要使以上代码通过编译,你应该链接适当的库:

#pragma comment(lib,"vfw32")
#pragma comment(lib,"winmm")

显示捕获的视频帧

  有许多方法和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后开始会议。

That's it....Enjoy......!!!

致谢:

  我感谢 Paul Cheffers 提供了他的音频录制播放类。因为有了开源人士奉献的开源库才有你所看到的videonet程序,我感激Tmndecoder的开发者Karl Lillevold和h.263快速编码库的开发者Roalt Aalmoes 免费提供这些开发库。

  如果你有任何问题或建议,可以发邮件给我 nsry2002@yahoo.co.in


Flash剧场全新改版,精品Flash让你看够玩够!



更多相关搜索: vc.. 视频.. 视频会议.. 视频聊天.. VideoNet..
正在加载评论,请稍候…

发给好友 我要报错 投稿给我们 加入收藏 返回顶部

本栏今日更新
相关文章
·FireTune新版:Firfox优化轻松搞定
·音效增强!DFX 7.500 for WMP发布
·微软恶意软件移除工具可杀Zotob
·Google或MSN地图?Flash Earth整合
·强力清除软件使用后的蛛丝马迹
·六大闪光点:QQ2005 beta 3泄漏版试用
·超酷!Mac系统播客工具提供Win版
·PConline联合超级兔子狂送注册码!
·只手遮天:玩转视频马赛克效果
·Dreamweaver MX2004视频宝典教程(127)
·Dreamweaver MX2004视频宝典教程(126)
·盗QQ的密码软件模拟实现(VC)
·Dreamweaver MX2004视频宝典教程(125)
·QQ2005 Beta3新功能解密:超级视频
·Dreamweaver MX2004视频宝典教程(124)
·Dreamweaver MX2004视频宝典教程(123)

完美时尚娱乐:2004年腾讯QQ评测大观
精彩无限:MSN Shell4使用指南
亲手制作鲜花情人贺卡送给她
挑战伏明霞?企鹅跳水游戏,看你能得多少分?

新闻搜索
高级搜索
Flash排行榜
·快来看看!芙蓉姐姐进军歌坛
·动感漂移-头文字D赛车
·头文字D插曲-一路向北
·暴笑恶搞MV-《从良》
·笑谈广东话-叽叽噶噶
·恶搞!PP鸡打劫记之一
·下辈子如果我还记得你
·疯狂射击游戏-火凤凰号
·悲怆!披着羊皮的狼
·搞笑MV-亲爱的对不起
热点专题
·挑战十大Flash智益游戏
·QQ辅助软件使用指南
·向"流氓软件"大声说不!
·惜别!毕业十大必唱歌曲
·常用软件的另类用法集
·搜索技巧:网罗天下的乐趣
·电脑艺术设计大师之路连载
·老歌歪唱Flash MV爆笑欣赏
·超级兔子狂送注册码!
·引领时尚:K8翻唱上传技巧
·Photoshop立体光影魔术!
·Photoshop绘水果饕餮大餐
IT培训十大热门文章
-