LiveCapture3 Win 外部コマンド連携

LiveCapture3 Windows版のインストールディレクトリには、外部からLiveCapture3を操作する為のExtCapが同梱されています。
ExtCapを使うことで、同一PC上の他アプリとの連携が可能になります。

さらにExtCapにはネットワークモードがあり、それを使用することで、ネットワーク上の別のPC等のHWからのリモートコマンドを受信して、LiveCapture3の遠隔操作が可能です。

ExtCapについて

ExtCapの使い方については、下記の投稿にまとめてあります。

外部コマンド連携について

PowerShellを使った遠隔操作

過去の記事では、Javaを使用したUDP送信プログラムのサンプルコードを載せていましたが、先日、バッチファイルでの制御方法のお問い合わせがありましたので、WindowsのPowerShellでLiveCapture3を遠隔操作する為のバッチファイルを書きました。

このバッチファイルを、メモ帳などで拡張子ps1で保存し、コマンドプロンプトから

powershell -F C:\Users\xxxxxx\test.ps1

と実行すれば、起動しているLiveCapture3の操作が可能です。

#
# 送信するコマンド
# 改行コード(CR+LF)は、「`r`n」
$cmd = "command : START`r`ncamera_no:0`r`n`r`n"

#
# UDPソケットを開いて接続
$tc = New-Object System.Net.Sockets.UdpClient
$tc.Connect("127.0.0.1",9999)

#
# コマンドをASCIIバイト列に変換
$a = New-Object System.Text.ASCIIEncoding
$byte = $a.GetBytes($cmd)

#
# 送信して終了
$tc.Send($byte,$byte.Length)
$tc.Close()

最初の行の$cmdが、送信するコマンドです。

コマンドの書式は以下のASCII文字列になります。

また、PowerShell内での文字列の改行コード(CR+LF)は、「`r`n」になりますので、その書式で下記のコマンドフォーマットに合わせたコマンド文字列を記述してください。

※最後の空行を忘れずに!

おわりに

ExtCapのネットワークモードを使えば、LiveCapture3をネットワーク上の他のPCやスマホなどから遠隔操作できます。

ラズパイなどのHWを使って作成した自作センサーなどのHWとの連携させた監視システムを作成することも可能です。

色々と試してみてください!

10件のコメント

  • 素晴らしいソフトをありがとうございます。
    ところで、動体検知のメール通知が成功しません。
    ヤフーメールやGMAILでは送信できませんでした。
    設定方法を教えて頂けませんでしょうか。

  • 素晴らしいソフトをありがとうございます。
    ところで、メール通知機能が使えません。
    ヤフーやGMAILでは送信できませんでした。
    ぜひやり方を教えていただきたいです。

    • 現状、LC3 Winでは、.NetFramework4.5を使用しており、デフォルトではTLS1.1のみ対応(1.2は無効化)されてしまっています。
      実は先日とあるユーザ様からご指摘と、とりあえずの回避策をご連絡いただきました。
      「netframework4.5 TLS」などで検索すると、色々と情報が出てくると思いますが、レジストリを操作する形になりますので、ちゃんと理解されたうえであれば試してみてください。

      LiveCapture3の方でも修正を進め、次回リリースで対応予定です。
      ご迷惑をおかけしますが、今しばらくお待ちください。。

      • 承知しました。ありがとうございます。

  • おひさしぶりです。
    2年前にパナソニック製のネットワークカメラ(WV-SPN310)で問い合わせさせて頂いた者です。

    以前は利用困難で利用を諦めてしまいましたが、その後いかがでしょうか?
    パナソニック製で採用実績などありましたでしょうか?

    ご回答頂ければ幸いです。

    • 申し訳ありませんが、対象のカメラを持っておりませんので対応できるかどうか不明です。。。
      以前お問い合わせいただいたMotionJPEGでの接続処理は、あれ以降特に手を入れておりませんので、状況は同じだと思われます。。

      申し訳ありません。

  • LC2を使っていたころ、次のようなワンショット(実行して即終了)なプログラムを書いて使っていました:

    lc2control.exe stop ー LC2プロセスがあれば、メール送信。5病待機。自己終了。
    lc2control.exe start ー LC2プロセスがなければ起動、待機。起動後にメール送信。5秒待ってその後に自己終了。

    > blog.daddysoffice.com/2019/03/26/%e5%a4%96%e9%83%a8%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e9%80%a3%e6%90%ba%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/

    ここの「ExtCapは、コマンド実行するだけでなく、{ネットワーク上の他デバイスから}のメッセージを受信」という点がちょっと気になりました。まぁ確かに、ネットワークの知識がない一般の方にとっては便利な機能ですが、0.0.0.0でリッスンしている=外部から接続できる、ということでは。

    ・デフォルトリスナーを、127.0.0.1:9999 にするだけでもだいぶ違います
    ・あるいは新引数「listenip」を導入するのもありです(-listenip:192.168.5.6)

    ただ私としては、不必要なデーモンを起動待機させるのはちょっと・・・なのでワンショットプログラム(上で言うメールを使った方式)を書く予定でいます。
    {extcap-oneshot-localhost.exe (start|stop|capture)(| 0|1)}が公式であるとそれはそれで便利そうです。

  • > ローカルPC上のイベント通知で行っているので

    LC3の画像を元に色々なアクションを実行する(Extcap起動コマンドもあり)プログラムを書きました。
    これを単体で実行すると、Extcapを呼び出したときに期待通りの処理を行ってくれますが、
    services.msc(サービス)として登録して実行してみると、サービス化されたソフトからExpcapをexec(呼び出し)したときに、LC3がコマンドを受け付けないようです。

    もしかして、ExtcapはWinAPIの「SendMessage/PostMessage」を使っているのでしょうか?
    そうであれば、サービス化されたプログラムから起動されたExtcapは、LC3に対してコマンドが送れません。
    (サービスプロセスからは、非サービスプロセスに対してUI系のコマンドが送れない という制約があった気が)

    仕方がないのでサービス化をやめて単体で起動しています。

    • >もしかして、ExtcapはWinAPIの「SendMessage/PostMessage」を使っているのでしょうか?
      >そうであれば、サービス化されたプログラムから起動されたExtcapは、LC3に対してコマンドが送れません。

      APIとしてはCreateEventを使用していますので、WindowsHandleなどは使用しませんが、サービスは、ローカスシステムアカウントというシステムアカウントで起動しますので、デスクトップアプリと通信するには、明示的に許可をONにするか、サービスとしてユーザにログインする必要があります。

      ただ、LC3自体はUSBカメラと接続する為にユーザのログイン後に起動する必要がありますので、作成されているプログラムも、サービス化せず、単体のアプリとして同一ユーザ環境で起動する形が良いと思います。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です