gstreamerでカメラから転送(その2)Tweetこの記事では、ねこライブ配信システムの解説(その1)で説明した全体システムの中、カメラとそのエンコードの部分を説明しています。(以下の図の部分です)3年前に構築したので、当時の開発環境やコンパイル手順などがなくなってしまい、最近のネットの情報を検索して掲載しています。コンパイル、インストールなどの情報は検証済みではありませんので、悪しからず。Raspbianの書き込まれたSDカード、電源、LANケーブル、SSHでRaspberryPiを制御するためLAN経由でパソコンが必要です。おっと、USBカメラも必需品です。高解像度を追いかけないなら1000円ぐらいで入手できるVGA解像度のUVC規格のUSBカメラがお手軽です。私はLogitechのC270が大好きです。画像がほんとにキレイ。同じ価格で他の製品はここまで画像がきれいではないと思います。(自分の経験だけのハナシ。)さて、USBカメラから取り込んだ映像をエンコードする中核のソフトウエアGstreamerを準備します。USBカメラによる撮影とエンコード、そして映像データをcrtmpserverへ送出。ここではラズベリーパイを使ったUSBカメラからの映像をh.264で圧縮し、そのデータをcrtmpserverへ転送するところを説明します。USBカメラからの映像の転送ソフトにはGstreamerを使います。最近のUSBカメラは便利なものもありまして、カメラの中にh.264で映像を圧縮できる機能を持つものがあります。いうカメラの場合には、h.264エンコーディングをしなくて済むので、raspberrypi側ではビデオコンテナの処理だけで済むようになり、負担が軽くなります。1.カメラのh.264内蔵エンコーダを利用する。Logitech(日本ではLogicool)のC920(現在はC930ですかね)です。このようなカメラは1920x1080の解像度での撮影が可能です。h.264でエンコード済みのデータを取り込むには、それに対応した処理が必要です。Gstreamerのプラグインの中にはそれをうまく処理できるものがあります。「uvch264src」というもので、UVC規格に沿ったh.264エンコーダーを内蔵したUSBカメラのストリームをうまく取り込んでくれます。2.RaspberryPiのハードウエアエンコーダを利用する。LogitechのC270です。安くて解像度はVGA程度ですがそれなりにキレイな映像が得られます。MJPEGというJPEG方式の画像圧縮ができるのですが、圧縮したデータを得られても、ライブストリーミングに利用するには、h.264などの圧縮効率の良いコーデックを使って再変換する必要があるので、この機能は使いません。USBカメラから生データを取り込んで、RaspberryPi上のハードウエアエンコーダを使って圧縮する方法を使います。これによりRaspberryPiのCPU負担が軽くなります。ここでもGstreamerを使いますが、プラグインの中でRaspberryPino内蔵エンコーダを利用するモジュールを使います。それがomx-h264srcです。これを利用することでハードウエアエンコーダを利用することができます。3.GstreamerのインストールRaspberryPiに使うOSはサポートが豊富な、Raspbianを使います。Minimumのものを使うことでCPUリソースやSDカードのスペースを食うXWindowなどを使わないようにします。JessieRaspbianのLITEバージョンを使って、GUIを使わないサーバを構築します。サーバ構築などの作業はこの記事の目的ではないため、割愛します。最新のRaspbianはSSHサーバがデフォルトでは動作していないとのことなので、これらの作業はディスプレイが必要かな?標準でGstreamerをインストールすると、上記のuvch264srcやomx-h264srcは含まれていないようなので以下のサイトにあるスクリプトを利用してコンパイル、インストールします。以下にコンパイル一式のコマンドを張り付けていただいている方がいらして、これを利用するのが便利かと思います。RaspberryPiから直接インターネットからソースをダウンロードしていき、コンパイル、インストールまでしてくれる命令が詰まっています。RaspberryPiからインターネットにアクセスできる状態にしておきましょう。http://pastebin.com/u8T7mE18コンパイル・インストールが終了したら、目的のモジュールが使える状態かどうかを確かめます。内蔵ハードウエアエンコーダ用のomx関連。omxh264encが目的のモジュール。どのようなモジュールがどのようなエレメント(入出力要素)、処理機能を持っているかなどを確かめる便利なツールです。gstreamerでいろいろとパイプラインをつなげていくときにヘルプとして欠かせません。ダウンロードしたソースなどがSDカードを圧迫するなら削除しておきます。4.Gstreamerの使い方Gstreamerはデータのソース(元)=>「処理」=>シンク(排)という基本的な流れで配管のように分岐させたり処理を重ねていったりという処理を行うことができるライブラリ群です。本来はこれらのライブラリを使って実行形式のアプリケーションを書くのだろうと思いますが、スクリプト形式でこれらの流れをコマンドラインで記述して実行することも可能です。これを行うには、Gst-Launchというツールを使ってやります。コマンドライン形式なので、試行錯誤が簡単です。C920のようなh.264エンコーダ内蔵のカメラから転送する場合。書き方はRaspberrypiでもPCサーバ上でも全く同じですね。C270のような生データをカメラから転送してRaspberrypiの内蔵エンコーダを利用する場合。モジュールには以下のような各設定パラメータを制御することができます。すべてを試しているわけではなくて、機能の一覧です。gst-inspect-1.0で表示できます。$Gstreamerでの映像転送の実例を書きました。Gstreamerで設定していないUSBカメラのいろいろな設定をv4l2-utilを使って行っています。これらの解説は次回その3で書きたいと思います。コメントをキャンセルメールアドレスが公開されることはありません。コメント名前メールアドレスサイトスパム防止機能です。下の計算式を完成させてください。