私は、ユーザーが IP カメラ (Mobotix カメラ) を使用してビデオを録画できる必要がある Web プロジェクトに取り組んでいます。私はいくつかのアイデアを思いつきましたが、どれも実際にはうまくいきませんでした。クライアント 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);
}
}
}
カメラからのストリームはエンドレスなので、リクエストもエンドレスです。ユーザーがリクエストを停止すると、記録も停止する必要があります。
上記のセットアップは機能しますが、いくつかの問題があります。ストリームは最初にサーバーのメモリに保存され、リクエストが停止した後にのみ保存されるようです。これにより、大きなビデオで問題が発生すると思います。動画をすぐに保存する方法はありますか?
また、ユーザーがリクエストを停止しても、サーバーがビデオを録画し続けるという問題があるようです。リクエストが停止することを確認する方法はありますか?
私は、このソリューションが理想からかけ離れていることを知っています。最善の解決策を求めて高低を検索しましたが、これまでのところ見つけることができませんでした。これが機能することを願っています。とにかくサンクス。