title: HD Video Calling in Unity3D
body: <p>I am an amateur in video/image processing but I am trying to create an app for HD video calling. I hope someone would see where I may be doing wrong and guide me on the right path. Here is what I am doing and what I think I understand, please correct me if you know better.</p>
  
  <ol>
  <li>I am using OpenCV currently to grab an image from my webcam in a DLL. (I will be using this image for other things later)</li>
  <li>Currently, the image that opencv gives me is a Opencv::Mat. I resized this and converted to a byte array size of a 720p image, which is about 3 Megapixels.</li>
  <li>I pass this ptr back to my C# code then I can now render this onto a texture.</li>
  <li>Now I created a TCP socket and connect the server and client and start to transmit previously gotten image byte array. I am able to transmit the byte array over to the client then I use the GPU to render it to a texture.</li>
  <li>Currently, there is a big delay of about 4-500ms delay. This is after I tried compressing the buffer with gzipstream for unity. It was able to compress the byte array from about 3 million bytes to 1.5 million. I am trying to get this to smallest as possible and also fastest as possible but this is where I am completely lost. I saw that Skype requires only 1.2Mbps connection for a 720p video calling at 22 fps. I have no idea how they can achieve such a small frame, but of course I don't need it to be that small. I need to be at least decent.</li>
  </ol>
  
  <p>Please give me a lecture on how this can be done! And let me know if you need anything else from me.</p>