トップ回答者
IPネットワークカメラの画像取得方法について。。。。(言語 C#)

質問
-
ネットワークカメラは Panasonic の DG-SW316L です。 CGI コマンド対応しています。
アプリがカメラから画像を取得し、そして画像を解析し、表示することをしています。 アプリ言語はC#、開発環境はVS2013です。
今は、1Shot画像の入力ができています。下記は画像入力のソースです。 VGAサイズの画像を取得できます。
WebRequest wr; WebResponse res; Bitmap Bmp; wr = System.Net.WebRequest.Create(”http://192.168.100.10:80/cgi-bin/camera?resolution=640”); wr.Timeout = 1000; res = wr.GetResponse(); Bmp = new Bitmap(res.GetResponseStream());
これで、1秒約10フレームの画像を撮れますが、少し遅いですので、Jpegのストリーム配信機能を使いたいです。 カメラの取説では、括弧内のCGIコマンドを送ることでJpegのストリーム配信ができますと書いています。
(/cgi-bin/jpeg?connect=start&framerate=15&resolution=640&UID=****&page=****)<o:p></o:p>
しかし、上のプログラムの風にコマンドを送ったら、 プログラムは res=wr.GetResponse(); の所で止まって、画像データがこないです。 でも、カメラとつながっているハブのライトがすごく点滅するようになり、一所懸命画像データを配信しているようです。 カメラが配信した画像はどうやって読み取れるのか分からなくて、困っています。<o:p></o:p>
教えていただきたいです。 よろしくお願いします。
- 編集済み CardAddr 2015年1月28日 5:25
回答
-
最近、IPカメラから画像を取得できるフリーのライブラリを見つかりました。 その情報を載せておきます。
フリーライブラリの名前は「MjpegProcessor.dll」です。 ネットで検索したら出てきます。
かなり使いやすいです。 使い方はこんな感じです。
’Imports MjpegProcessor
Private WithEvents _Mjpeg As MjpegDecoder
Me._Mjpeg = New MjpegDecoder()
Me._Mjpeg.ParseStream(New Uri("http://192.168.100.10:80/cgi-bin/mjpeg?framerate=10&resolution=640x480"))
'画像取得イベント
Private Sub _Mjpeg_FrameReady(sender As Object, e As FrameReadyEventArgs) Handles _Mjpeg.FrameReady
Dim p As String = "C:\img_1.jpg"
e.Bitmap.Save(p)End Sub
- 回答としてマーク CardAddr 2015年4月3日 8:49
すべての返信
-
併せて、というかパケットキャプチャを使わなくても、
.NET Framework のネットワークのトレースを使うとどのような通信をしているのか確認できます。直前までの通信内容を確認すれば、wr.GetSeponse()が何を待っているのかも分かるかもしれません。
CGIはGETリクエストなのでしょうか? POSTならServicePointManager.Expect100Continue = falseで解決することもありますが…。
-
最近、IPカメラから画像を取得できるフリーのライブラリを見つかりました。 その情報を載せておきます。
フリーライブラリの名前は「MjpegProcessor.dll」です。 ネットで検索したら出てきます。
かなり使いやすいです。 使い方はこんな感じです。
’Imports MjpegProcessor
Private WithEvents _Mjpeg As MjpegDecoder
Me._Mjpeg = New MjpegDecoder()
Me._Mjpeg.ParseStream(New Uri("http://192.168.100.10:80/cgi-bin/mjpeg?framerate=10&resolution=640x480"))
'画像取得イベント
Private Sub _Mjpeg_FrameReady(sender As Object, e As FrameReadyEventArgs) Handles _Mjpeg.FrameReady
Dim p As String = "C:\img_1.jpg"
e.Bitmap.Save(p)End Sub
- 回答としてマーク CardAddr 2015年4月3日 8:49