I'm working on a web-project, where users must be able to record a video, using an IP-camera (Mobotix camera). I've came up with several ideas, but none of them really worked. Because I cannot install any software on the Client PC's, I came up with the idea to save the recording on the server. So the users opens a page in his browsers, and in the request, the server opens a request to the camera (using a build-in stream provided by the camera through HTTP: http:///cgi-bin/faststream.jpg?stream=full&fps=1.0 ), and save the stream to the server with this code:
public ActionResult Index() { WebClient webClient = new WebClient(); webClient.Credentials = new NetworkCredential("Username", "Password"); var url = "http://<ip-camera>/cgi-bin/faststream.jpg?params"; // Download the file and write it to disk using (Stream webStream = webClient.OpenRead(url)) using (FileStream fileStream = new FileStream(outputFile, FileMode.Create)) { var buffer = new byte[32768]; int bytesRead; Int64 bytesReadComplete = 0; // Use Int64 for files larger than 2 gb // Get the size of the file to download Int64 bytesTotal = Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]); // Download file in chunks while ((bytesRead = webStream.Read(buffer, 0, buffer.Length)) > 0) { bytesReadComplete += bytesRead; fileStream.Write(buffer, 0, bytesRead); } } } Because the stream from the camera is endless, so is the request. When the user stops the request, so should the recording.
The setup above works, although there are some problems. It seems like the stream is first stored in the memory of the server and is saved only after the request has stopped. I think this will create problems for large videos. Is there a way to immediately save the video?
Also, there seems to be a problem where the user stops the request, but the server keeps recording the video. Is there a way to make sure the request stops?
I know this solution is far from ideal. I've searched high and low for the best solution, but I haven't been able to find it so far. I just hope I can get this to work. Thanx anyway.