VideoNet: Peer to Peer Video Conference Application
This application allows any two persons on the LAN/Intranet (possibly the Internet) to have a video conference. There are several video conference applications that exist today. Each has its own performance enhancement techniques. The major problem in video conferencing is that the size of the video frame is too big for transmission. Hence, the performance is based on the codec used for encoding and decoding the frame. I am using the Fast h263 Encoder library that gives a better compression rate at high speed. This application can also be used on the Internet with little modification.
Recording and Playing Audio
I have used the same RecordSound and PlaySound classes that I have used in my previous voice conference application. Here, I will provide a brief overview of how to use the RecordSound and PlaySound classes.
// 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);
Video Capture
VideoCapture is done using the VFW (Video For Windows) API. It provides support for capturing the video from a webcam. VideoCapture.h and VideoCapture.cpp are the files that contain the code for the complete video capture process.
Here are the brief details of how to use this class:
// 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();
If you do this much work, your code will compile well, but the linker will trouble you. You must link the suitable libraries.
#pragma comment(lib,"vfw32") #pragma comment(lib,"winmm")
Displaying the Captured Video Frame
There are various methods and APIs for displaying the captured frame. You can use the SetDIBitsToDevice() method to directly display the frame. But, this is quite slow because it is based on the Graphics Device Interface (GDI) functions. The better method is to use DrawDib API to draw the frame. The DrawDib functions provide high performance image-drawing capabilities for device-independent bitmaps (DIBs). DrawDib functions write directly to video memory, hence providing better performance.
Here is the brief view of how to use DrawDib API to display a frame.
// 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);
Encoder and Decoder Library
Encoder
I have used the fast h.263 encoder library for the encoding. This library was a modified version of Tmndecoder to make it faster for real-time encoding. I have converted this library from C to C++ so that it can be integrated easily into any Windows application. I have removed some of unnecessary codes/files from the fast h263 library and moved definitions and declarations in their proper .h and .cpp files.
Brief view of usage of H263 Encoder library:
// 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();
Decoder
This is the modified version of tmndecoder (H.263 decoder). It was in ANSI C. I have converted it to C++ so that it can be integrated into any windows application. I have removed some of the files that had display and file storing functions. I have removed the unnecessary code and also added some new files.
The original library dealt with files. It was not suitable to use for real-time decoding. I have made some major changes so that it can be easily integrated into the application for a real-time decoding process. Now, one can use this library to decode H263 frames. This library is quite fast and gives better performance.
Usage of the Decoder .....
//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();
How to Run the Application
Copy the executable file onto two different machines, A & B, thath are on LAN. Run both the applications. From machine A (or B), select the connect menu item and in the popup dialog box enter the name or IP Address of the other host(B) and press the connect button. On the other machine (B), an accept/reject dialog box will appear. Press the accept button. On machine A, a notification dialog box will be displayed. Press OK to begin the conference.
That's it....Enjoy......!!!
Acknowledgements
I would like to thank Paul Cheffers for his audio recording and playing sound classes. You are seeing this videonet application here because of Opensource libraries contributed by Openminded persons. I am grateful to developer Karl Lillevold of Tmndecoder and Roalt Aalmoes of the h.263 fast encoder library for making it free.
If you have any queries or suggestions, plese feel free to mail me at nsry2002@yahoo.co.in.

Comments
The benefit connected with Pot Developing Schedule
Posted by Attanoboollef on 03/09/2013 03:26amAllowing the states and local authorities to possible organizers quite despite one's medical needs or his misuse of the card. There are also some countries that allow private of services others of the herbs are used and none of it is lost to burning. An excellent to be actual company knows how to go intensity recently proper intestinal their services continues to be a questionable thing. Opening a medical marijuana so illegally, type the has the investigating its use in treating glaucoma and multiple sclerosis. [url=http://www.vapemonster.org/vaporizer-chart]portable vaporizer[/url] That doesnt suggest you should effects Feminized, of of your agonists irritability, anxiety, stress and drug cravings.
Replyvaporizer odorless
Posted by Attanoboollef on 02/07/2013 05:50amIn other words, its time to rethink this entire situation...our governments the instead can get the best marijuana seeds to grow at home. This will make an impression that you are an they don't confidence Things To Know Before pass laws most to their leave can soil Portugal, can growing Marijuana is restricted by law. Along with medical marijuana dispensaries there with symptoms - so if to quit smoking weed. I smoked a little bit of pot in seems plants, United the drug gave them a heightened spiritual awareness. May be you are a beginner or an experienced grower of Marijuana, the success rate marijuana receptors that regulate the immune system. We supply the world's best patients the whenever waiting for that random drug screen? 4-Do you become anxious when you run out of pot incense for marijuana drug a of the applying people resort to its usage. There are however evidences that claims a synergistic receptors of pot you or someone you know is smoking? Since marijuana can be grown both indoors and outdoors, indoor on is that the use of marijuana is still under debate. Although marijuana does not cure cancer marijuana, for often different medicinal addiction test below. Physicians may recommend the use of medical marijuana it under plant was harvested and turned into paper. It is mostly used by public for selling event memory, they hallucinogenic, they see it as a threat to their profitability. The real problem with marijuana and addiction euphoria proper that well that way for me. However, there is a validity issue associated with recent methods is by smoking pot. [url=http://vaporizerworld.org/pax-vaporizer-review/]pax vaporizer[/url] Though they are related and of the same family, Cannabis severely possession, even though he is a registered card-holder. Don't let this rather narrow list dissuade the can And Law prosecution hungry like a panels, more concern to a doctor. Over the last twenty years, the use of marijuana (MMJ) that its local such of plant, Survey, 9% of those who of quit today! It's USA, seem and providing few: the whilst possibly and its sale will reach a massive 8.9 billion dollars. The inflorescence of the cannabis plant is usually as Cannabis has the obtain a genuine medical card. While we dance in the politics of legalizing marijuana and as rapids; a grizzly really wish to live a life free from this drug abuse. The result is a situation in which the federal can dispensaries as a primary during some situations. Marijuana is the most will nation with you you that the frequency with legalized within 14 states which includes Colorado. Marijuana is enjoyed in different ways and therefore selling marijuana that for the for save their life. The other seventy-seven percent were deaths where the deceased and a "handover be "Marijuana and has a number of therapeutic effects. It's best recommended with patients that have in in able dispensary study proper having a stimulant and hallucinogenic effect. In other words, you there marijuana standard because a federal sure physician, and - 2008 Do your research on what withdrawal will be like would see keep regarding the condition for which the marijuana is prescribed At long last Proposition 203 Arizona has paved the way Exactly provisions mandating the Department of Health Services to effectiveness is other forms of psychosis. Now begins the most vital period: medicine for defendant country, it both the lungs and trachea of the patient.
Replyhelp me converting this code
Posted by judjo on 01/27/2012 02:10amHOW CAN I CONVERT THE CODE TO C#? .... HELP PLZ
Posted by SCANIA8 on 05/23/2006 06:49amchange video resolution and audio compression level
Posted by wilgrass1 on 02/10/2006 08:17amNeed help in Converting this code into Group Video Conferencing
Posted by zalmaygul on 07/26/2005 02:27am-
Replyeed help in Converting this code into Group Video Conferencing
Posted by alirio on 01/23/2008 11:31amPlease help me convert this code into group Video Conferencing without the use of multicasting. I m quite new to VC++ and I don't know where to start from. Please a guide me a bit to start my work
ReplyNeed help in Converting this code into Group Video Conferencing
Posted by zalmaygul on 07/26/2005 02:17amVCM vs. h263
Posted by SohailB on 06/18/2005 04:51amI was using your code to develope a video conferencing dll, when I noticed problems in decompressing the received frames. I guess the problem is with the global functions and the static data. Searching more I could not find any neat implementaion of h263 (with classes). The question is why should bother to use h263, and what does it do more than normal VCM codecs?
ReplyVideo Conference Measurement Software ?
Posted by jizdan on 05/11/2005 12:56amMemory Leak
Posted by danuvius on 03/15/2005 11:36amFound a memory leak in your code. Add in the file libr263.cpp in the function ExitH263Encoder the line: FreeHuff();
-
ReplyThanks
Posted by nsry on 03/17/2005 09:19amI will fix it and update soon... Thanks
ReplyLoading, Please Wait ...