We require the ability to transmit a stream of BITMAPs (not JPEGs) 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 H.264 in order to reduce the bandwidth required and the H.264 encoding needs to be offloaded from the computer CPU to a graphics card GPU. The library must support BOTH NVENC and NVCUVENC encoding, it and any required components must be deployed by a simple copy of the required binary libraries to the computer as part of an install of our own product.
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. This is the reason for CUDA and NVENC. NVENC appears to be better however only a few graphics cards support it so CUDA is also necessary.
If necessary, we have a computer which you can remotely access for development which has a NVENC capable Nvidia Quadro K2000M chipset.
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 (http://www.videolan.org/) client. The control protocol for the stream does not matter and can be RTSP, HTTP or whatever is easiest so long as mobile devices such as iPhone iOS are natively able to connect. An example of what we require is shown on this project http://www.medialan.de/Wissen001/R
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;
streamServer.Start(new IPEndPoint(IPAddress.Loopback, 1234));
var bitmap = bitmapQueue.Dequeue();