We require the ability to transmit a stream of bitmaps from a Windows based server across the internet to a variety of clients running different operating systems. The network stream needs to be compressed as [url removed, login to view] in order to reduce the bandwidth required and the [url removed, login to view] encoding needs to be offloaded from the computer CPU to a graphics card GPU. Ideally we'd like the task to be completed used Microsoft's Media Foundation but are willing to accept other approaches, such as DirectShow or CUDA provided, it any required components can be deployed by a simple copy of the required binary libraries to the server.
It is essential that the encoding can be offloaded to the GPU as much as possible as our solution, of which video streaming is only a component, is already CPU-bound. Ideally we'd like the solution to support CUDA video encoding.
You will be required to fix any issues that arrise out of the solution within a business day for a period of 90 days after delivery.
In order to be able test the solution we require that it can be connected to by a VLC ([url removed, login to view]) client. The control protocol for the stream does not matter and can be RTSP, HTTP or whatever is easiest. An example of what we require is shown on this project [url removed, login to view] but rather than an MJPEG encoding we require an [url removed, login to view] one.
In addition we need a simple C# interface to the developed library along the lines of the sample code shown below. The IH264Stream interface implementation is the piece we require.
public interface IH264Stream
public void Start(IPEndPoint clientSocket);
public void AddBitmap(Bitmap bitmap);
public void Close();
public static bool Exit;
static void Main(string args)
Queue bitmapQueue = new Queue();
IH264Stream streamServer = new object() as IH264Stream;
[url removed, login to view](new IPEndPoint([url removed, login to view], 1234));
var bitmap = [url removed, login to view]();
[url removed, login to view](bitmap);
[url removed, login to view]();