title: How to encode/decode video using C#?
body: <p>A little background, I was given the task of fixing a few "small" bugs and maintaining this solution for streaming video across the network between two instances of our application.  The solution was written by someone who is no longer here so there is some mystery in the code as well as some really fun pitfalls.  The solution was written using ffmpeg with C++ code written to wrap the encoding/decoding related code as well as some of the streaming code.  This C++ was then wrapped with SWIG so that it could interop with C# and pass the video frames up where they are rendered using <a href="http://videorendererelement.codeplex.com" rel="noreferrer">VideoRendererElement</a> which lives in a WPF control.  The main reason the frames are passed up is because we have some custom protocols we need to send video data over and those are written using C# so as the video frames are passed up we wrap them in our own packets and send them out on the wire.  This solution works and we can stream video using our custom protocols though it is something of a nightmare to maintain and work with.</p>
  
  <p>My question is there a better way to go about this?  I'm looking for ways to work at a lower level with the video data (in C#) so that I can take the video frames and package them in our own packets and send them out and be able to receive and rebuild the video on the other side.  ffmpeg seems to be the common solution but I've run into a lot of issues with it and the GPL/LGPL thing I think is a problem.</p>
  
  <p>The basic flow I'm looking to achieve,
  video file -> encode -> wrap in packet -> send over wire on protocol X -> get video data from packet -> decode -> render / save to disk</p>