我正在开发一个网络项目,用户必须能够使用 IP 摄像头(Mobotix 摄像头)录制视频。我提出了几个想法,但没有一个真正奏效。因为我无法在客户端 PC 上安装任何软件,所以我想出了将录音保存在服务器上的想法。所以用户在他的浏览器中打开一个页面,在请求中,服务器打开一个对摄像头的请求(使用摄像头通过HTTP提供的内置流:http:///cgi-bin/faststream.jpg? stream=full&fps=1.0 ),并使用以下代码将流保存到服务器:
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);
}
}
}
因为来自相机的流是无穷无尽的,所以请求也是无穷无尽的。当用户停止请求时,记录也应该停止。
上面的设置工作,虽然有一些问题。似乎流首先存储在服务器的内存中,并且仅在请求停止后才保存。我认为这会给大型视频带来问题。有没有办法立即保存视频?
此外,似乎存在用户停止请求但服务器继续录制视频的问题。有没有办法确保请求停止?
我知道这个解决方案远非理想。我一直在寻找最好的解决方案,但到目前为止我还没有找到它。我只是希望我能让这个工作。无论如何谢谢。