ねこライブ配信システム v4l-utilsでカメラ制御(その3)







v4l-utils によるUSBカメラの制御(設定)




今回はRaspberryPiにつながっているUSBカメラのいろいろな機能をv4l-utilsを使って制御する例について書きます。




Gstreamerのv4l2src を使ってUSBカメラからデータを取り込む場合、USBカメラの解像度、フレームレートなど動作条件をGstreamer上で決めることはできません。




デフォルトのままならそれでも動作しますが、デフォルトが何なのかを知ることもできません。




ということで、それを制御するためのツール群 v4l-utilsを使うことにします。




v4l-utilsをインストールします。

sudo apt-get install v4l-utils





インストールが完了すれば、あとは使うだけです。




ほとんどのケースでは、このパッケージ中のv4l2-ctrl で処理ができると思います。




利用方法は、v4l2-ctl で検索すれば先達が情報を提供してくれています。




C270カメラの場合の利用例

        v4l2-ctl --set-parm=25
        v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=0





追記です: カメラの解像度、映像フォーマットなど指定は、Gstreamerのuvch264srcやv4l2srcのパラメータ設定で指定できます。 露出やオートフォーカスなどの指定はv4l2-ctlを使うとうまくいきます。




これは実際にRaspberryPiで使っている例です。




デフォルトでは30fpsで設定されているとおもうのですが、非力なRaspberryPi初代ですと大きな生データを処理しきれないようです。 このため、フレームレートを25fpsまで落としています。




この設定を完了したら、Gstreamerを実行します。




複数台のUSBカメラをつなげているときのUSBカメラの指定方法




v4l-utilsとは直接関係がありませんが、PCサーバなどにUSBカメラを2台以上接続してそれぞれ別の設定で動かしたいときがあります。




一般的にはUSBカメラが接続されると




/dev/video0 という名前でアクセスできます。




2台のカメラを接続すると、




/dev/video0 1台目に接続されたUSBカメラ
/dev/video1 2台目に接続されたUSBカメラ




という名前でアクセスが可能です。




ところがこの名前はUSBカメラを抜き差ししたり、再起動したりするとそれぞれのUSBカメラとの割り当てが変わる場合があります。




それぞれに設定が違うGstreamerを動作させている(ほとんどの場合はそうですね)場合、このデバイス名を利用していると、再起動したら違うカメラを処理していたということになってしまいます。




で、前置きが長くなりましたが、Debian系の場合、




/dev/v4l というデバイスのディレクトリがあります。 この中にby-id というフォルダがあります。




ここにデバイスを特定した形でのUSBカメラのデバイスが存在します。




daimao@mie:/dev/v4l/by-id$ cd /dev/v4l/by-id
daimao@mie:/dev/v4l/by-id$ ls
usb-046d_HD_Pro_Webcam_C920_D5CC2CAF-video-index0
usb-Alcor_Micro__Corp._USB_2.0_PC_Camera-video-index0
daimao@mie:/dev/v4l/by-id$





ここではC920とバッファローの安物カメラをつなげている例です。




daimao@mie:~$ ps ax|grep gst
16103 pts/0    S+     0:00 grep --color=auto gst
23244 ?        Sl   522:15 /usr/local/bin/gst-launch-1.0 -v -e uvch264src initial-bitrate=5000000 average-bitrate=5000000 iframe-period=1000 device=/dev/v4l/by-id/usb-046d_HD_Pro_Webcam_C920_D5CC2CAF-video-index0 name=src auto-start=true src.vfsrc ! queue ! video/x-raw,format=(string)YUY2,width=160,height=90,framerate=10/1 ! fakesink \src.vidsrc ! queue ! video/x-h264,width=800,height=448,framerate=30/1 ! h264parse ! mpegtsmux ! tcpclientsink host=192.168.0.103 port=6671
daimao@mie:~$





これは動作中のGstremerの設定を取り出してみたものですが、device= でこのUSBカメラ(C920)を指定しているのがわかると思います。




注意:C920の場合、個々の機器のIDが含まれています。(シリアル番号?)このため、C920が仮に故障して、交換したときにはこのデバイス名も変化するので、交換しただけでは動作しません。 デバイス名を確かめてGstreamerの起動コマンドも入れ替えてあげてください。




リッキーさん、カメラの前ではもう少し優しくね~





うーい。。。。。。汗




ねこライブ配信システム 全体(その1)
ねこライブ配信システム gstreamerでカメラから転送(その2)
ねこライブ配信システム v4l-utilsでカメラ制御(その3)
ねこライブ配信システム crtmpserver配信の主役(その4)
ねこライブ配信システム WEBで動画再生FlowPlayer(その5)
ねこライブ配信システム 便利ツールffmpegの準備(その6)
ねこライブ配信システム ffmpegでサムネイル生成(その7)

ねこライブ配信システム v4l-utilsでカメラ制御(その3)” への18件のコメント

  1. こんばんは。
    年度末で相変わらずバタバタしてましたが、ようやく少しだけ落ち着きました。

    其の間にその8まで載せていただいてありがとうございます。

    今日webカメラ(c922)を購入してきました。

    PCの方はUbuntu 16.10 を直接導入したのですが、ノートPCの画面を閉じるとスタンバイに移行してしまうので、今VMを入れているところです。

    まだまだ試行錯誤の状況ですがあせらずに作成したいと思います・・・・

    が1つ話題が・・・
    新たな猫が1匹近所に来たようです。
    シマトラちゃんで、既存の3匹と違う子です。
    (体も1~2回り小さく、耳カットも無い子)
    近くに来たときに3匹用のエサを上げているのですが、まだまだ警戒心が高いです。
    こちらもあせらずお友達になれたらなと思ってます。
    ではではっ。

    • くーたさん、

      こんばんは、お忙しい仕事が一段落のようで何よりです。
      C922購入されたんですねっ! なかなか良いカメラだと私も思います。

      実は私も別の用途でRasberry Pi3を購入。ソフトウエアやハード実装をいろいろやってまして、めどが大体ついたのでシステムに使う本命のカメラを本日発注したところでした。 私が購入したのはC930e でした。

      C922は60FPSができるのが最大の魅力でずいぶんと悩みましたが、撮影範囲が90度と広い930eを最終的に選びました。

      次の週末には到着したカメラでシステムの最終調整に入る予定です。

      もうすぐ春の子ねこが出没する季節。 ねこたちも恋の季節を迎えて忙しそうですね! 笑

      • こんばんは。
        (長文ですいません。。。)
        c930eなんて有ったのですね。
        c922は某カメラ系量販店で購入したのですが、商品展示は無く、DVDパッケージに写真があって、それをレジに持って行くのだったので他製品を見てませんでした(汗

        とりあえずですが、普段使いのwin機でC922の動作テストは問題無いようでした。(ispyと言うオープンソースのソフト)
        後、会社の倉庫に転がっていたカメラ(しょぼいの(笑))を貰って帰ってテストしたのですが、win7機では2台でも問題無いのですが、仮想サーバのubutsueだとesxホストごとフリースするトラブルが発生して切り分けしているところです。

        とりあえずはesxiを使わないでどうか・・・ですね。

        • こんばんは!

          頑張ってらっしゃいますね!
          USBのカメラのインターフェースやらネゴシエーションをesxiが間に入ることで邪魔をしているかもしれませんね。

          私もC930で苦戦中。 C920とは違ってUVCの規格が異なっていて、Linuxでh.264転送がうまくいっている人がどうもほとんどいないようです。

          MJPEGでもFullHDの30FPS転送ができるようなのでまずはこれを実現するための試行錯誤を繰り返しています。

          何かわかったら書き込んでいきます。では。

  2. こんばんは。
    レスありがとうございます。

    追加された記事の方にと思いましたが、同様の内容で来られる方もおられるかもなのでこちらで失礼しますね。
    >チャレンジ
    ソフトもハードも両方ですね(笑

    >USBケーブルの制限(5m)
    そうなんですよね
    5mから伸ばすには、「USBエクステンダー」や「リピーターケーブル」等を検討しないといけないですからね。

    尼のレビューでは、同じようにwebカメラを接続して・・・という方もおられたのですが、賛否両論のコメントだったのでまずは最小構成で稼動させてから考えようと思ってます。(一番は5m以内に収まれば良いのですがね)

    それとPCですが、ジャンクのPCが4000円で入手できました。
    Lenovo x200 (CPU Core2 Duo 8400 2.26GHz MEM 2G Hddなし)
    ジャンクなので、ACアダプタもありませんでしたが、同機種の故障機が1台あるので、使える部品を流用して作成してみる予定です。

    • お、PC入手完了ですねッ!

      スモールスタートで実験されるのは大賛成です。 その時点でいろいろな課題を解消しておけば、拡張していくのは比較的容易です。

      USBケーブルの延長は波形整形をしてくれるリピータを挟むことで実現できますが、電源電圧の降下の可能性も考慮しておく必要がありそうですね。

      具体的に進んでおられるようで盛り上がりますね~。

      • こんばんは。
        webカメラ(c920)系の話題なので、こちらのレスで失礼します。
        c920ですが、販売終了して新機種が出ているようですね。
        (一部では在庫処分のようです。)
        ロジクールのサイトで確認すると、後継機種はC922 ProとC920rのようですが、商品比較をするとH.264 AVC圧縮が付いているのは、前者(922 Pro)のみのようです。
        (c920rはc920tの後継?)
        値段も(店舗での実価格も含めて)そんなに違わないので購入するなら922 Proなんでしょうが、以前のコメントにあったH.264エンコーダ内蔵はこの項目(H.264 AVC圧縮)で合ってってますよね。

          • こんにちは。
            色々バタバタしていて遅レスで申し訳ございません。
            レスありがとうございます。
            H.264エンコーダー とあったので多分旧機種(c920)と同じ感じかなと思っています。
            ここは人柱にならないといけないかなと思って
            いるのですが、公私共にドタバタしていて中々時間が取れない状況です。
            ゆっくり思考錯誤する時間が早く出来ればよいのですが・・

        • ゆっくり、じっくりやりましょう。

          私もraspberry pi3を購入計画中デス。

          「ねこすきやん」プロジェクトもスタート中。

          • こんばんは。
            raspberryといえば、「Raspberry Pi Zero V1.3」が日本でも発売されたようですね。
            第一世代のスペック(メモリが512MB等)ですが値段が648円なのは玩具として興味がそそられてます(笑

            ねこすきやん」プロジェクト
            楽しみにしてますね。
            (ちなみにうちの実家も新たなにゃん子を保護したそうです。)

  3. こんばんは。
    その3掲載ありがとうございます。
    今回も成程~とためになるまとめをありがとうございます。
    カメラは野外(ベランダ)設置なのでさすがにC920は躊躇して、C615あたりにしようかと思ってます。
    (+防水加工も考えないと・・・)

    そういえば、Raspberry PiのようなシングルボードでTinker Boardというのが出たらしいです。
    まだ登場だけなので日本に入るのかさえも不明ですが、Pi3の2倍の性能(+値段も)らしいです。

    • くーたさん、

      こんばんは! AsusのTinker Boardよさそうですね。 OSの整備や活発な更新がカギですね。 マザボの専門メーカからですから性能や品質は最高でしょうねっ!

      カメラにH264エンコーダが内蔵されていない場合、高解像度でUSBから生データ30FPSで取り込むのは結構厳しいように思います。

      MJPEGで取り込んで、一度デコードしてエンコードしなおすか、MJPEG Streamerのようなアプリを使って直接配信してしまうというのもレガシーですがよく記事を見かけます。

      広く配信するならH264のような広く普及しているコーデックを使うことは必要でしょうが、個人的に外から見るだけならMJPEGでも十分のように思います。

      次の記事ではcrtmpserverを書こうと思ってますが、いくつかすでにブログに掲載されている方々の記事のほうがためになるように思います。 設定サンプルをお見せするぐらいの記事になりそうです。笑

      • こんばんは。
        遅レスですいません。
        Tinker Board良いのですが値段が高いのが少し難点ですかね。
        +2k~3k程足すて1万ぐらいだと中古PCが買えてしまいそうですからね。
        実際、中古のx201(i5)が1万(OS無し)で出ていて、買おうか否か悩んでいるうちに売れてしまったので・・・。
        カメラにH264エンコーダの件は、標準ソフトだけ有効なのかと思ってました。それであれば少し値が張りますが検討ですね。(もしくはカメラも中古でないかと近くの店をたまに覗いています)

        • くーたさん、

          家族のroseが最近ゲーム用PCをアップグレードしまして、余ったパーツを使って仮想基盤サーバを構築しつつあります。 crtmpserverのインストール確認など次の記事の品質を上げるためにちょっと時間をかけてます。

          カメラですが、やはりh264エンコーダ内蔵のカメラは希少ですが、高画質ということではとても重要なファクタのように思いマス。

          バッファローからも同様のカメラを販売しています。次のモデルに切り替わるのか、生産停止で在庫販売中です。 Logicool のC920のようにいろいろな画像サイズでh264で利用できるわけではないようです。(1280×720限定とあります。)

          でも、価格が6000円台なのは魅力的ですね。(利用できるのを自身で確かめたわけではないので、悪しからず)

          いろいろ検討されるときが一番楽しいときですねっ!

          • だいまるさん
            こんにちは。
            時間が掛かるのは全然問題ありません。
            本当にお手すきの際で結構です^^

            c920は本当に良いですね。(高いですが・・)
            室内であれば奮発して購入なのですが、室外(ベランダ)なのでやっぱり躊躇してしまってます^^;
            pc本体の設置場所(多分室内)・USBの延長(エアコン配管穴から出し)・防滴/温度・にゃんこがベランダ中を移動するのでいたずら対策等・・

            本当に検討しているの時が楽しいのですが、時間と予算が無いのが残念です(笑

          • くーたさん、

            ちょうど、その4、crtmpserverの記事をアップしたところでしたッ!

            くーたさんのチャレンジは、ソフトウエア系の苦労とは違って、ハードウエアの本質的な問題に挑戦する内容ですね!

            屋外に電子機器を設置するのは本当に大変だと思います。
            USBケーブルは、せいぜい5m程度しか延長できないと思います。 屋外まで引っ張るなら、LANケーブルで引っ張るほうが安定すると思います。

            LANケーブルならPOEという規格を利用することで、電源も届けることができます。

            いずれにしてもRaspberryPiのような小さいコンピュータ基板を外に出さねばならないのは宿命です。

            あとはビデオカメラをHDMIで引っ張るというのもあるかもしれません。ケーブルの長さは相当程度まで引っ張れますが、電源供給はPOEのようなわけにはいかないですが。 またHDMIで来た信号をキャプチャカードで取り込む必要もあるので、コスト的には高くなっちゃうかな。

            楽しくご検討ください~!

コメントを残す

メールアドレスが公開されることはありません。


四 − 3 =