C#にてネットワークカメラの画像を取得する方法には、色々ありますが、
ここでは簡単に出来るMJPEG Decoderを使用して画像取得する方法を説明します。
MJPEG Decoderインストール
Visual Stadioの[ツール]-[NuGetパッケージマネージャー]-[ソリューションのNuGetパッケージの管理]を開きMJPEG Decoderを検索してインストール出来ます。
MJPEG Decoderによるネットワークカメラ画像取得
サンプルとして、Form上にボタンとピクチャーボックスを配置してください。
MjpegProcessor.MjpegDecoder _mjpeg; private void Form1_Load(object sender, EventArgs e) { _mjpeg = new MjpegProcessor.MjpegDecoder(); _mjpeg.FrameReady += mjpeg_FrameReady; } private void button1_Click(object sender, EventArgs e) { string url = @"http://192.168.2.100:7777/videostream.cgi?user=admin&pwd=admin"; _mjpeg.ParseStream(new Uri(url)); } private void mjpeg_FrameReady(object sender, MjpegProcessor.FrameReadyEventArgs e) { Bitmap Bmp = e.Bitmap; pictureBox1.BackgroundImage = Bmp; }
ParseStream()に渡すURLがカメラのURLになりますが、これはネットワークカメラの仕様によりことなります。(カメラの仕様を見たください)
上記に場合、http://192.168.2.100:7777/がIPアドレスとポートになります。
videostream.cgi?user=admin&pwd=adminがカメラ毎のコマンドでユーザ名・パスワードを設定しています。
プロトコル違反の場合
「サーバーによってプロトコル違反が発生しました. Section=ResponseHeader Detail=CR の後には LF を指定しなければなりません。」
のようなエラーが発生した場合、サーバー側の問題なのでどうしようもありません。
これの対処は、「ソリューションエクスプローラー」のApp.configに
<system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net>
を追加します。