2015/11/09(月)IPカメラ(Webcam)リレープログラム / ip-camera-relay.pl

IP Cameraの映像を中継するプログラムです。以下の機能があります。

  • IPカメラへの自動再接続。
  • 複数のIPカメラを登録し、接続できたカメラの映像を中継する。接続が切れたら、次に接続できたカメラに接続する。
  • IPカメラに接続できていない時は、指定した画像(ブランクイメージ)を代わりに送信する。

VLCなどのIPCamストリーム受信ソフトでは、カメラとの接続が切れた場合に自動再接続を行ってくれないものがあります。またカメラと接続が切れたときにブランク画像を挿入したいこともあり、それを実現するためのソフトになります。

プログラム

Gistに置いたので、適当に拾ってください。

  • ip-camera-relay.pl Perl用プログラム
  • ライセンス : GPLv2 or later
  • http転送。パスワードなし。Motion JPEG(以下MJPEG)のみ対応。

使い方

$ ip-camera-relay.pl -p 8888 http://(camera-ip):port/stream-path

クライアント接続用に8888番ポートを開き、指定したカメラに接続します。カメラURLはブラウザから接続するURLではなく、ビデオストリームのURLを指定してください*1

複数のカメラを指定すると、それぞれを順番に接続します。最初に接続できたストリームをクライアントに配信し、カメラとの接続が切れたら次に接続できたカメラの映像を送ります。

どのカメラとも接続できない時は、ブランク画像(標準では640x480の青い画像)を送信します。

その他オプションはヘルプを参照してください。

*1 : ブラウザから接続したりカメラの仕様書を見れば、書かれているかと思います。

WebCamのプロトコル

続きを読む

2015/11/06(金)UPnP/SSDPマルチキャスト中継プログラム(DLNA用)

UPnPのマルチキャストパケットを中継するためのプログラムです。通常、同一ネットワーク内でしか使用できないUPnPを、ルーターを超えて使用できるようになります。

想定

  • DLNAサーバとクライアント(またはコントローラーとレンダー)がルーターを超えて存在する。
  • それぞれネットワークAとBとすれば、A内のPCとB内のPCは互いに通信可能である(NATされていない)。
  • どちらのネットワークにも属するPCが存在する。

「WiFiと有線LAN環境を同一ネットワークにしたくない」ただそれだけなのですが、そのせいでUPnP/DLNAが超えられず大変苦労しました……。

続きを読む

ActivePerl 5.10でPARをインストール(Perlのexe化)

はてブ数 2009/08/24 プログラム::Perl

ActivePerl5.8では無理やりithread対応のPARをインストールしたり色々苦労がありましたが、ActivePerl5.10ならば比較的すんなり行きそうなので環境を構築してみました。

インストール

ActivePerl5.10をオフィシャルから落としてインストール。インストール先はc:\usrにしました*1。インストール時にPPMを入れ忘れないようにしてください。

Windowsのシステム環境変数PATHに次を追加します。後者がppのパスになります。

;c:\usr\bin;c:\usr\site\bin

PPMでPARとPAR-Packer(ppコマンド)を導入します。

>ppm install PAR
>ppm install http://www.bribes.org/perl/ppm/PAR-Packer.ppd

これでppコマンドが使えるようになります。

*1 : こうすると、c:\usr\bin\perl でperlが実行できる。

動作テスト

試しに、mixi_exportをexe化してみます。

>pp -o mixi_export.exe mixi_export.pl

無事うまく変換できました。

ひそかな人気アプリwmrelayも、Perl5.8時代は標準状態のPARで変換するとWin32ライブラリを読み込まずいろいろ大変だったのですが、Perl5.10では(必要なライブラリインストール後)あっさり変換できました。

5.16の場合

>ppm install PAR::Packer

\usr\lib\Config.pm の60行目付近を修正します。

- $^V eq 5.16.3
+ $^V eq 5.16.3 or $^V eq 5.16.0

2007/02/03(土)PARでPerlをWindows実行ファイルに(with ithreads)

ActivePerl 5.10の場合はこちら。以下はActivePerl5.8.x用です。

PARとは

PARとは、Perlのパッケージツールの1種なのですが、これを利用することでWindows上で(Perlがなくても)実行出来るEXEファイルを生成することができます。ActivePerlなら通常

> ppm install PAR
> pp -o test.exe test.pl

で済むのですが、この標準の PPM パッケージが古く、ithreads が利用出来ないなどの欠点があります。これは perl 5.8.0 ベースで作られているせいであり、同じ理由で「use 5.8.1;」なども書くことができなくなります。

PARによるPerlスクリプトのEXE化を参考に、Mingwを入れて最新版をインストールしたのですが、どうしても次のエラーが出て実行できませんでした。

Can't locate Win32.pm in @INC (@INC contains: .) at xxx.pl line 817.

この問題をうまく解決出来たので報告します。

PARのインストール

そのときの最新版で問題ないと思いますが、不安な場合はまったく同じバージョンを用意してください。まず、ActivePerlをインストールします。その後、それぞれのファイルを解凍します。

まず、ExtUtils::FakeConfigが必要なので、ppmで構いませんからインストールしてください。

> ppm install ExtUtils-FakeConfig

次に PAR-Packer にパッチを充てます。必ず make 前に行ってください*1

PAR-Packer-0.973\script\par.plの690行目付近
    require PAR::Dist;
    require PAR::Filter::PodStrip;
    require Win32 if $^O eq 'MSWin32';		# この行を追加
    eval { require Scalar::Util };

あとは普通に make してインストールしてください。make 時に不足するライブラリやツールは自動で取ってくれると思います(ただし再度同じコマンドを実行する必要が出たりします)。

> cd PAR-0.973
> perl Makefile.PL
> nmake
> nmake install
> cd ..
> cd PAR-Packer-0.973
> perl -MConfig_m Makefile.PL
> nmake
> nmake install

これで、ithreads が問題なく動く pp が生成できると思います。

*1 : make済の場合は修正後にmake cleanを

OK キャンセル 確認 その他