当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>Visual C++教程

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

该程序可以用于两个人在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函数直接写入视频内存,因此性能更好。

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接