2016年8月25日木曜日

Axis network camera emulatorの使い方

ネットワークカメラをシミュレートするために、ごくたま~にAxis network camera emulatorを使うことがあります。
そのたびに同じことを調べているので、次はそんなことがないようにメモ。

SourceForgeからバイナリをダウンロードします。
ダウンロードしたファイルを解凍し、その中のstart_emulation.cmdを実行します。
start_emulation.cmdの中身は4行だけです。

set host_ip=127.0.0.1
set silent
rem set /MIN silent=/B
start "80" %silent% dist/AxisCamEmulator.exe -i %host_ip% -p 80 -v ./dist/jpeg_src -t ./dist/mjpegs

jpeg_srcフォルダにあるJPEGファイルから、

1600x1200
1280x960
1024x768
800x600
640x480
480x360
320x240
240x180
160x120

の9つのサイズのMJPEGファイルをmjpegフォルダに作成した後、指定されたポート番号で開始されます。

そして!
画像を取得するURLは

http://localhost/cgi-bin/video.cgi?resolution=1280x960

です。サイズの指定をいつも忘れてしまうんですよねー

またいつか、どこかで。

2016年8月19日金曜日

Visual Studio 2015でWeb APIを作る(続き)

前回の続きです。

下記のJSONデータをPOSTしてみましょう。
{
  "Name" = "AIMEK",
  "Age" = 17
}

Postメソッドの引数valueに文字列が渡ってくるのかと思いましたが、valueはnullでした。
public void Post([FromBody]string value)
{
}
そこで、下記のクラスを作成します。
public class User
{
    public string Name { getset; }
    public int Age { getset; }
}
Postメソッドの引数をUserクラスに変更してみます。
public void Post([FromBody]User value)
{
}
すると、JSONデータがUserクラスにバインドされ、各プロパティに送信された値がちゃんと入っています。

ただ、送信されるデータごとにクラスを作成するとクラスが増える一方ですよね。
このような使い捨てのクラスであれば、匿名クラスを定義し、デシリアライズすることもできます。
また、匿名クラスで返してやれば、レスポンスとしてJSONデータが返ります。
public object Post([FromBody]object value)
{
    var type = new { Name = string.Empty, Age = 0, };
    var user = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(value.ToString(), type);
    return new { Result = 0, Status = "Success", };
}

またいつか、どこかで。

2016年8月5日金曜日

Visual Studio 2015でWeb APIを作る

JSONデータをやり取りするWeb APIをVisual Studio 2015で作成しています。
その方法をメモ。

新規プロジェクトを作成します。


テンプレートを選択します。
「Empty」を選択し、「Web API」にチェックを入れます。
Getting Started with ASP.NET Web API 2 (C#)にも書かれていますが、「Web API」テンプレートを選択すると、もれなくMVC関連ファイルもついてきます。画面がなければ「Empty」で十分です。)


コントローラーを追加します。



「読み取り/書き込みアクションがあるWeb API 2 コントローラー」を選択します。


こんな感じでソースが自動生成されます。
public class DefaultController : ApiController
{
    // GET: api/Default
    public IEnumerable<string> Get()
    {
        return new string[] { "value1""value2" };
    }
 
    // GET: api/Default/5
    public string Get(int id)
    {
        return "value";
    }
 
    // POST: api/Default
    public void Post([FromBody]string value)
    {
    }
 
    // PUT: api/Default/5
    public void Put(int id, [FromBody]string value)
    {
    }
 
    // DELETE: api/Default/5
    public void Delete(int id)
    {
    }
}

JSONデータのやり取りは次回。

またいつか、どこかで。