您现在的位置: 天下网吧 >> 网吧天地 >> 天下码农 >> 微信小程序 >> 正文

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

2008-11-6来自网络佚名
    该程序可以用于两个人在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->PostThreadMessageWM_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函数直接写入视频内存,因此性能更好。

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩

本文来源:来自网络 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下