私は、もうすぐ60歳。大昔mac+に飛びついてハイパーカードのアプリケーションをpascalで作ることに生きがいを感じていました。思えばハイパーカードはwebの方向性を導いた偉大なソフトだと思っています。ただ私も生活していかなければならないので、その当時の「わくわく」を胸の奥にしまったまま、約30年間ひたすら自分の欲求を抑えてきました。
家庭の事情で仕事を辞め、空いた時間に、好きだった何も役に立たないソフト作りをもう少しやってみたいと思って作ったものを少しずつ書き留めていこうと思います。
皆さんはRaspberypiやBeagle Bnoe BlackのHDMI出力画像をMacで表示したいと思ったことはないですか?VNCを使えばいいじゃんなんて私も思ってたのですが、表示が遅いのでイライラするし、普通のHDMI出力じゃパソコン以外にディスプレイが余計に必要でスッキリしません。そこでMacにビデオキャプチャーデバイスを繋げれば簡単に表示できるのでは?と、思ってトライしてみた結果を最初に書いてみます。
Pi2で動いている Openframeworksの3d ExampleをHDMI接続したiMacに表示させています。 Pi2で動く Openframeworksサンプルも結構早いでしょ!!
Macに繋ぐビデオキャプチャーデバイス
もともとMac関連のビデオキャプチャーデバイスは数少ないのですが、我々の手に入りやすいものはBlackmagic Design社の製品でしょうか。現在の環境にするまでには、次のような問題がありました。
- 最初に「Intensity Shuttle for Thunderbolt」を買ったが電源関係が弱く、3ヶ月ぐらいで昇天した!!-->分解したので保証対象外
この製品は冷却ファンが無く、かなり高熱になるのでそれが原因か?
- 次に同社の 「Intensity Pro」を購入-->現在使用中
こちらはファン付きなので熱対策は問題無し(2年くらい故障せず)
ただしドライバソフトの相性が悪く10.3.7になって初めてまともに動くようになった。
だいぶ時間が経つので、現在のShuttleは初期と比較してだいぶ良くなっていると思う。ただしMac用のドライバソフトが頻繁に変更されていて、バージョンによっては全く動かなくなる場合があるので注意。(ちなみに現在使っているものは10.3.7 基本これで問題ないので、へたに最新版を使わないほうが良い)
右がpi2 左がIntensity Pro MacとThunderbolt接続
Pi2のケースで気に入ったものがなかったので、レザーをベースにして、簡単なものを作って見ました。コネクタ類はキンキラキンで安っぽく見えるので、薄いレザーを貼り、CPUの上にはヒートシンクと5Vファンを付けてます。本体IOピンに接続したケーブルはブレッドボードの下で半田付けしてます。なかなか実用的でカッコイイでしょ....。
ビデオキャプチャーソフト
2016/3/27 現在 以下の設定でQuickTime player で正常に表示できるようです。
逆にOpenframeworks 0.9.3以降では動かないようです。
・Blackmagicホームページから最新版Desktop Video Utility(10.6.2)をインストール
・pi3 側の /boot/config.txt の中身を修正
# uncomment to force a specific HDMI mode (this will force VGA) 部分を以下の設定にして
hdmi_group=1
hdmi_mode=34
・保存してreboot。
QuickTime player でカメラを Blackmagic に変更するとバッチリ。
フレームレートが30に下がりますが、まーなんとか.......。 60にできたらまた書き込みます。
プレビューするだけなので、なんとかなると思ったのですが、そう簡単ではありませんでした。
以前のドライバソフトバージョンではQT上でディバイスさえも認識しなかった。
QuickTime Playerだとこうなってしまう(フレームレイトがどうしても合わない)
- Blackmagic Media Express という付属ソフトでプレビューできるが表示の大きさに限界がある-->最大に表示してもpiの文字が読めない。
- Mac環境では、HDMIプレビューのみのソフトが無い。
ということで、一時は断念したのですが、当時Openframeworksを少しかじっていて、Example の中に使えそうなものが入っていたので、これを修正したら超簡単にプレビューできました。今回のプログラムを応用すれば、多分1行程度の追加だけで、ゲーム機の録画も簡単にできると思います。
簡単プレビューソフトの作り方
- Xcodeをインストールする-->AppleStore からインストール
- Openframewarksをインストールする openFrameworks
- 解凍したフォルダの中に入りexamples/Video/asciiVideo/asciiVideo.xcodeprojをダブルクリック
- srcフォルダにあるmain.cppとofApp.cppを以下のように修正する
- ビルドする
- 動作を確認したら、binフォルダにできる ⚪︎⚪︎⚪︎.appファイルをどこかに移動すればOK.
main.cpp 画面の大きさを表す数値を変えるだけ
#include "ofMain.h"
#include "ofApp.h"
//========================================================================
int main( ){
ofSetupOpenGL(1920*1.1,1080*1.1, OF_WINDOW); // <-------- setup the GL context
// this kicks off the running of my app
// can be OF_WINDOW or OF_FULLSCREEN
// pass in width and height too:
ofRunApp( new ofApp());
}
ofApp.cppの中身
setup() update() draw()の中身を以下に変更(ほとんど消すことになる)
vidGrabber.setDeviceID(5) を加える。piのHDMIの場合デバイス番号は5を指定する。ちなみに0がMac内臓カメラ。Intensity Proを接続した場合、フレームレイトや解像度によりこの番号を変える。Openframeworksを使う場合、Blackmagic Desktop Videoの設定変更は必要ありません。(OpenframewarksのVideo exampleのなかでosxVideoRecorderExampleを試してみるとビデオディバイス番号(フレームレイト選択)が分かります。)
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup(){
ofBackground(0,0,0);
camWidth = 1920*1.1; // try to grab at this size.
camHeight = 1080*1.1;
vidGrabber.setDeviceID(5);
vidGrabber.setVerbose(true);
vidGrabber.initGrabber(camWidth,camHeight);
}
//--------------------------------------------------------------
void ofApp::update(){
vidGrabber.update();
}
//--------------------------------------------------------------
void ofApp::draw(){
vidGrabber.draw(0,0);
}
これだけです。Cのネイティブコードがほとんど素人でも簡単にできてしまうのがわかると思います。上手くビルドして、PiとHDMI接続してあればpiの画面(この写真ではXwindow)が表示されます。XcodeとOpenframewarksの基本的な使い方は各自Webで調べてください。(C言語が多少分かれば大したことありません)
iMac27インチにpi2の画面を表示させているところ。文字の視認性は充分。
考察
解像度1080 59.95fpsで表示しているのでスピードは文句無しですが、キャプチャーデバイスが3万くらいしましたので、pi2が5台くらい買えてしまいます。まー趣味ですから.......。
Intensity Proは製造中止になったようですが、価格の安いShuttleでも同じことができると思います。
現在pi2でOpenframeworksを実行させる場合の確認用として使っています。