Back to Top

プログラムの覚書

C# ネットワークカメラの画像を取得する

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>

を追加します。

 

Posted in C# | Leave a reply

C# Webページ・WebコンテンツのHTMLファイルを取得する

C#にてWebのHTMLを取得する方法は、幾つかありますので説明します。

サンプルプログラムとして、Form上にボタンとテキストボックスを配置します。TextBoxはMultilineをtrueにします。(データ表示用)

WebClient使用での方法

private void button1_Click(object sender, EventArgs e)
{
    WebClient wc = new WebClient();
    try
    {
        textBox1.Text += wc.DownloadString("http://www.microsoft.com");
    }
    catch (WebException ex)
    {
        textBox1.Text += ex.Message;
    }
}

 

HttpWebRequest使用での方法

private void button2_Click(object sender, EventArgs e)
{
    System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://www.microsoft.com");

    System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)wr.GetResponse();

    System.IO.Stream st = res.GetResponseStream();
    System.IO.StreamReader sr = new System.IO.StreamReader(st, System.Text.Encoding.UTF8);

    string html = sr.ReadToEnd();

    sr.Close();
    st.Close();
    res.Close();

    textBox1.Text = html;
}

 

 WebRequest使用での方法

private void button3_Click(object sender, EventArgs e)
{
    System.Net.WebRequest wr = System.Net.WebRequest.Create("http://www.microsoft.com");

    System.Net.WebResponse res = wr.GetResponse();

    System.IO.Stream st = res.GetResponseStream();

    System.IO.StreamReader sr = new System.IO.StreamReader(st, System.Text.Encoding.UTF8);
    string html = sr.ReadToEnd();

    sr.Close();
    st.Close();
    res.Close();

    textBox1.Text = html;
}

 

Posted in C# | Leave a reply