Darwin Streaming Serverを試す

先日の「Macで手持ち動画ファイルをソーシャルビューイングする」というエントリで書いたHangoutを使う方法は、やはりフレームレートの低さに我慢がならず他の方法を模索しました。そういえば、OSX ServerもSnow LeopardまではQuicktime Streaming Serverを搭載してたのにLionでなくなったんだよなぁ、と思って代替ソリューションをググったところ、元々オープンソースで公開されていたので、野良ビルドというかポートされたものがあるのを発見。Darwin Streaming Serverという名前で、OSX以外にもLinuxやWindowsでも動かせるみたい。OSX用のパッケージはここで拾えます。いくつかつまづいたので導入メモなど。執筆時点のバージョンは6.0.3。もうApple的にはメンテが終息してるっぽいのであまり進化はしないかも知れないですね。

■導入メモ

・OSX Serverにインストールできるようにする

なぜかインストーラー.pkgがServer OSを弾く設定になっています。もともとServer OSには入ってたものなのでその名残?こちらに回避策がありました。まず.dmgファイルを開いて仮想ドライブとしてマウントし、中の.pkgファイルをローカルドライブにコピーします(そうしないと編集できないから)。.pkgファイルは実はフォルダなので、ターミナルでcdしていけば中に入れるんですが、DarwinStreamingServer.pkg/Contents/Resources/VolumeCheck というファイルをエディタで開いて、サーバーOSかどうか調べて弾く部分を丸々コメントアウトします。具体的には29行目以降に赤字の#を挿入します。

#  don’t install on OS X Server                                                                   
#if ( -e $INSTALLED_SERVER_OS_VERS )                                                              
#{                                                                                                
#    if ( -e $ERROR_STRINGS )                                                                     
#    {   #there are localized error strings so use them                                           
#        $RESULT = 114;                                                                           
#    }                  

これでインストーラーを起動すれば普通にインストールできます。管理者パスワードや動画の保存場所などを指定すると、インストーラーが最後にブラウザで設定ページを開いてくれるので、そこをブックマークするなりしておけば、以後全ての設定はそちらで行えるようになります。

 

・動画ファイルにヒントトラックを付加する

H.264+AACなMP4ファイルが利用できるはずですが、そのまま登録しても非対応と言われてしまいます。動画にヒントトラックというインデックス情報のようなものが含まれている必要があるみたいです。QuickTime Proやmp4boxというフリーのコマンドラインツールで付加できるようです。mp4boxはエンコ作業で普段から使ってるので、以下はWindows機で作業。

mp4box.exe –hint (元ファイル名).mp4 –out (新ファイル名).mp4

などとすればヒントトラック入りの別ファイルが作成されます。再エンコードするワケではないのでファイルコピー程度の時間で終わります。

ただ手持ちのmp4box 0.4.6-DEV (internal rev. 5)では「Invalid IsoMedia File」というエラーが出てハマりました。最新版とされている0.4.6-rev2735をゲットしてみたらOKでした。バージョンは、

mp4box.exe –version

で調べられます。

最近のMediaCoderならエンコード時に自動で付加することもできるっぽいですが、ファイルサイズで比べると1,2割は大きくなるようなので、全部のファイルに予め付与しておくのは無駄かなという印象。

 

・動画ファイルへのアクセス権を付与する

これはOSX Serverだけの現象かも知れませんが、プレイリストに動画を登録して再生スタートすると、

– PlaylistBroadcaster: Permission to access the SDP reference movie was denied.
   Read access required.
   (path: /Library/QuickTimeStreaming/Movies/hoge.mp4, errno: 13).

のようなエラーが出ます。他のサンプルファイルをみるとオーナーが_qtssとなっているので、それに揃えてやります。

sudo chown _qtss hoge.mp4

 

・80番ポートを使わない場合のポート番号

インストーラーまたはポート設定画面に「80番ポートを使う」という項目がありますが、通常80番はWebサーバーが使うので重複の心配があります。そこでオフにしてみたんですが、じゃぁ代わりに何番になるかというのがどこにも表示されていません。

わかった範囲では、

1022番:管理ページ

8000: http://プロトコロルによる動画配信(iOS向け?)

554番:rtsp//プロトコルによる動画配信

等。ただし8000番を使ったhttp配信はまだ成功していません。エラーメッセージ的にはつながってるっぽいってだけ。

 

・プレイリストを作って疑似ライブストリーミングをする

PC/Macでの視聴にはrtspプロトコルに対応した動画プレーヤーを使います。具体的にはQuickTime PlayerかVLC辺りがお手頃でしょう。ファイルメニューから「URLを開く」とか「場所を開く」「ネットワークを開く」といった文言の項目を選び、アドレスを入力するだけです。

サーバーの設定画面で指定したフォルダに、hoge.mp4というファイルを置いた場合、

rtsp://(IPアドレスまたはホスト名)/hoge.mp4

というアドレスを入れれば視聴できます(ルーター越えさせる場合は554ポートを開放しておく必要があります)。ただしこれだと個々にオンデマンドで再生されるので、単純にファイル共有して視聴するのとあまり代わりありません。せっかくストリーミングサーバーを介すのだから同期視聴してこそです。それにはプレイリストを作成します。管理ページ上で「Playlists」を選ぶとプレイリスト一覧画面になるので、「New Media Playlist」を選択し新規作成します。仮にNameをhoge、Mount Pointをhoge.sdpなどとしておきます。そしてファイル一覧に動画フォルダのファイル一覧が見えてるのでドラッグして右側のリストに追加し、「Save Changes」で保存して一覧画面に戻ります。一覧画面のプレイリストに再生ボタンがついているのでクリック。Statusが「Playing」になれば成功です。エラーが出た場合はアイコンをクリックすると詳細が確認できます。またServer自体が起動しているか左上の表示で確認しましょう。

「Playing」になっていると、誰かが見て様が見てまいがサーバー上では再生が進んでいる状態です。そこで、クライアントのプレーヤーソフトから、

rtsp://(IPアドレスまたはホスト名)/hoge.sdp

のようにMount Pointを指定してやると、視聴できると思います。

■使用感

・画質

画質に関してはHangoutやSkype、iChatの画面共有に比べてはっきりと優位を感じます。というか回線速度が追いついている限り、ローカルで再生しているのと同等だと思います。

 

・使い勝手

ここはやはりHangout等に比べると若干落ちます。まずホスト側ですらあまり自由に再生を制御できません。プレイリストの再生と停止しかできないので、ちょっと面子がトイレいくから一時停止ね、とかもできない。止めたらまたプレイリストの最初からになります。クライアント側でポーズはできますが、それは当人のところで止まるだけ。Hangout等であれば画面共有しているホスト役の人が一時亭ししたりオープニングをスキップしたりも自在なので、ここは惜しいところです。

また、サーバー側でプレイリストをPlayingにしてないとクライアントからつなぐこともできないので、全員接続してから再生スタート、ということもできず、サーバーでスタートさせてからチャットなどで「よしお前らつなげ!」などと号令をかけるしかない。それでも頭の数秒は見損ねてしまうでしょう。プレイリストの先頭にダミーの動画を10秒程度入れておくと良いかも知れません。

そしてもちろんチャット周りについては何も機能がないので、SkypeなりLive Messengerなりを別途使うしかありません。まぁここはお互いがIDをもってて使いやすいものを選べるというメリットでもありますが。

クライアント側に再生ソフトをインストールしなければならない点も負担な人には負担ですが、まぁ今時QuickTime PlayerはiTunes入れてればほぼ強制的に入るし、VLCもフリーだし許容範囲ですかね。今回ネットカフェから参加した人もいましたが、VLCは再起動しなくて使えるので好都合でした(ネットカフェのPCはセキュリティの為、再起動すると全ての変更が巻戻る)。

惜しいのは動画にヒントトラックをつけないと使えない点ですね。我が家にある膨大なライブラリから「よし今日はアレ観ようぜ」とかいって即座に始められません。さりとて現状の利用頻度では全てのファイルにあらかじめヒントトラックを埋め込んで置くのはちょっと手間的にも容量的にも非効率。mp4bpxでの付加自体にはそう時間はかからないので、なにかバッチファイルなり簡単に一括付加できるフロントエンドツールなどを作っておくといいんでしょう。

 

・安定性

やはり途中何度か映像が乱れたり音声が途切れたりということがありました。もともとストリーミングを意識してエンコした動画ファイルではないので、仕方ないかも知れません。感覚的にはやはり動きが激しくビットレートが高くなるところが不安定になってた気がします。たぶん可変ではなく固定ビットレートにすると良い気がしますが、普段使いの画質を優先するかトレードオフですね。1~2Mbps程度の動画で光同士ならほぼ無問題、WiMAXでたまに不調、一番ヒドいのは某ネットカフェから参加した人、って感じでした。一度乱れだしたら、軽く(数秒?)ポーズして先読みを進めてやると良いとか、それでもダメなら再接続が確実っぽかったです。

またどうしても接続後数秒(最初のIフレームまで?)は乱れまくります。

あと、プレイリスト上の動画ファイルをまたぐ時に、次のファイルが正常に再生されないという現象が何度か出ました。出る時は全員なのでサーバー側、それも個別のファイルの問題な気がします。ちょっとまで原因がつかめてないですが、こうなったら再生を止めてプレイリストを編集して前のファイルを消し、そのファイルを先頭にして再スタートさせるしかないみたい。

サーバー自体はエンコードなど負荷の高い処理をするわけではないので、余裕っぽいです。特にファンがうなりをあげるようなことはなかったです。>Mac mini Server 2011(Core i7)

 

とまぁ、こんな状況でアポイントの数時間前から突貫で準備を始め、なんとか4人で6時間に及ぶ動画視聴マラソンを楽しく実施することができました。

TMPGEnc MPEG Smart Renderer 4は上々

前身のTMPGEnc MPEG Editor 3(以下TME3)から4年の沈黙をやぶりようやく登場したTMPGEnc MPEG Smart Renderer 4(以下TMSR4)を早速購入しました。主な特徴としては、H.264.AVCなtsやmp4コンテナに対応したこと。必要最低限なエンコードでカット編集可能にするというコンセプトはそのままに、最近のAVCHDカメラからの入力や、Blu-rayへの出力などが可能になりました。マルチ音声(8ストリームまで)に対応しているのも、その筋の人には見逃せないポイントです。

まぁ購入するのは既定路線なんですが、Pegasysのソフトの場合悩ましいのはアップグレード購入すると旧バージョンがディアクティベートされて利用できなくなる点。旧バージョンが完全に不要になるかどうかで、もう1,000円余分に払って両方使える状態にしてくかが悩ましいところです。まぁ、結果としてσ(^^)は旧バージョンと決別できると判断してアップグレードで購入したわけですが、そこら辺を中心にレビューしてみます。

σ(^^)の主な用途はMPEG2+AACないわゆる生tsファイル。まぁぶっちゃけTV番組です。不要部分(CM)をカットし、最終的にMediaCoderでmp4にエンコする為の下地ファイルを作ることです。出力ファイルに問題がないことは当然ながら、その作業が効率良く快適に行えるかどうかが重要です。

発表直後の体験版には多少問題があったみたいですが即座に修正され、発売日時点のものを試した限りでは特に問題なくエンコード用ソースとして利用できました。この対応の迅速さも含めて品質面はまぁ大丈夫そうです。

レスポンスも上々。少なくともTME3に劣ってるということはないです。不要部分を探すのに、スライダーのノブをドラッグで動かしながらスイープしていってもそこそこ追従してくれます。あと書き出しが気持ち速くなってるような?

便利になった点は、TMVW5同様、tsファイルを読み込む時に詳細分析ができるようになった点。これを実行すると、EPGストリームの番組情報かなにかを境に切り出してくれます。なので少なくとも番組の直前0.5秒位のところでカットされた状態で読み込めまれるおで、手間が1つ減ります。カットどころが悪いと微妙にCM末尾の音声が入ったり、数フレーム程度固まる(CM最後のIフレームが切られるから?)ようですが、逆に本編が欠けるということは今のところなさげです。数フレーム固まって見える場合でも、本来の開始フレームより手前にゴミがついているだけなので、音声の無音部分を頼りに切り取ってしまえばOK。つまり余白がないように見えても見えなくても最初の数フレームはゴミってことですね。

あと、「おっ!」と思ったのは、クリップ一覧画面でF2を押すとクリップ名編集ダイアログが開く点。WindowsのExplorerと同じショートカットなのは感覚的です。ただ、なんとこれTME3でもできましたorz。単に右クリックメニューを出した時にショートカットとして記載されてなかっただけ…なんてこった。でもまぁ全体的にキーボードショートカット周りが整備されて、作業効率が上がった印象があります。

残念な点としては、詳細分析付きで取り込むと、クリップ名がEPG由来のものに置き換わってしまう点。せっかくtvrock側でファイル名置換を駆使してファイル名生成してるのに…。グレーな使い方なのでサポートされるか微妙ですね。いやでもEPG由来のデータ読んでる時点で完全に想定外の使い方でもないのかw。

 

マルチ音声などのその他の新機能はまだ試してませんが、H.264/AVCが色々なところでデ・ファクトスタンダードになっている昨今、これを最低限の再エンコードで切り貼り編集したり、そのままBD-R/RWに焼けるというのは様々な場面で活用できそうです。最近はすっかりマカーなσ(^^)ですが、iMovieなどはどうにも馴染めず、この分野ではやはりWindows+Pegasys製ソフトが手放せないですね。

これは大発明だ! BUFFALO どっちもUSBメモリー

コネクターに挿そうとすると裏返しだった、という率が高いUSBコネクタ。最近、BUFFALOがどちら向きにもささる特殊コネクタを開発し、ハブ、ケーブルなどを発売していましたが、ついにUSBフラッシュメモリーにも搭載品が登場しました。打ち合わせの場面などでドヤ顔できるのはやはりUSBメモリーでしょうってことで早速購入。Amazonでは16GBが1,800円、32GBが4,500円程度と、32GB版はやや容量単価が割高だったので16GBをチョイス。今時USB3.0じゃないモデルに4~5千円はもったいないですしね。

早速、MacBook Airで試してみました。当たり前ですがどちら向きでもちゃんとマウントします。

SandyBridgeのオンボードUSB3.0ポートでとったベンチはこちら。シーケンシャルのリードが22MB/s、ライトが7MB/sってとこです。

docchimo_1

さすがに最近のUSB3.0製品に慣れてると「こんなもんかー」って気がしちゃいますね。まぁ我が家のMacBookは二台ともUSB2.0だから実用面ではあんまりかわらないんですが。

あと、残念なのは(ユーザビリティ的な意味での)デザインが古くさいというか、普通に取り外しできるキャップ式な点。より便利な収納式や回転キャップ式などが溢れる中でオーソドックス過ぎます。せっかくどちらにも挿せるという画期的な特徴を持ち合わせているので、フタの取り回しで不便を感じていたら他製品と一勝一敗です。USB端子なんて剥き出しでも壊れやしないだろ?という説もありますが、このどっちもUSBに関しては中の端子が乗った板がかなり薄い(動画の12秒目辺り参照)のでいささか不安です。

どっちもUSB機構そのものは、はやく全てのUSB製品で採用してほしいと言える素晴らしいものですが、当面のドヤ顔グッズとして1,000円前後で買える4GBや8GBを持ち歩いておき、より使い勝手面や性能面、セキュリティなどの機能面で他製品に並んだモデルが出たら買い換えるというのもアリかも知れません。

Macで手持ち動画ファイルをソーシャルビューイングする

巷ではオリンピックなどをTwitterなどで会話しながら視聴するソーシャルビューイングが流行ですが、むしろローカルに保存してある動画ファイルを使ってできないか検討。まぁ、利用シーンは色々あるでしょう。録画したアニメを見る、ホームビデオを見る、ユーザテスト記録ビデオを遠隔協調分析する、etc.、etc.。

検証したビデオチャットのプラットフォーム
  • Skype
  • iChat
  • Hangout (Google+)
動画の送信方法
  • ManyCamを使って動画ファイルを仮想Webカメラ入力に見せかける
  • 画面共有機能を使う
  • iChat Theaterで送信する(iChat)

といった方法を比較検証してみました。ManyCamはWebカメラ映像にリアルタイムにエフェクトをかけたりするソフトですが、映像ソースとして動画ファイルを指定することで再生映像を流すことができます。またiChat Theaterとは、ビデオチャット中に相手映像に動画やPDFファイルをドロップすると画面共有できる機能で、動画の場合は再生映像と音声が相手にそのまま送信されます。

結果としては、

  • iChat Theaterはお手軽だし音声も自動ミックスされるが、解像度が低く見るに堪えない
  • Webカメラとして送信する場合もやはりあまり解像度が高くならない
  • またWebカメラ扱いだと場合によっては左右反転処理が必要
  • 画面共有するのが画質的には有利
  • ただし画面共有だと動画の音声は送信されないので、別途細工が必要
  • Skypeの画面共有はモニタ単位しか共有できない(昔はウインドウ単位できなかったっけ?)
  • iChat、Skypeの画面共有はテキストチャットウインドウとの併用ができない

ということで、画質及び使い勝手の面でHangoutが一歩ぬきんでていました。ただし音声をなんとかしないとね、って感じ。Hangoutも全画面表示はできないものの、左サイドにテキストチャット欄を出して併用できたり、他の面子のWebカメラ映像を下部に並べられるなど、レイアウト的にはよく練られています。画面共有単位もウインドウ単位の指定ができるので、無駄がありません。

■動画の音声ストリームを扱う

問題は音声です。当然ローカルではスピーカーから音声が再生されるので、それをマイクが拾えば一応相手にも聞こえます。ただかなり遠くなるので実用的とは言えません。

次に、音声チャットを諦めて、会話はテキストチャットだけということあれば、イヤホン端子とマイク端子をケーブルで直結する手もあります。

ですがやはり、気軽にダベるには音声による会話を並行してしたいところです。ハードウェア的なアプローチとしては、

  • 外部にミキサーを用意する
  • もう一台のマシンとGoogleアカウントを用意し、そちらからもHangoutに参加する

というのもアリでしょう。

しかしここではなんとかMac一台でホストする方法を検討してみました。今回はSoundflowerという仮想オーディオデバイス生成ツールと、LadioCastという仮想ミキサーツールを用いました。仮想仮想と書いてますが、要は実際には存在しない周辺機器をソフト的にあるように見せかけるツール、とでも思って下さい。今回実験に使用したハードはMacBook Pro 15″ Early 2011とヘッドフォンです。あとマイクとしてLogicoolのWebカメラを使いましたが、これは多分内蔵でも大丈夫でしょう。OSはMountain Lionです。

2020.07.03追記:最新のmacOSではSoundflowerが使えないそうで、BlackHoleというのがいいみたいですね。私自身はまだ試せてませんが参考にリンク貼っておきます。

まず両ソフトをインストールします。Soundflowerのインストールは再起動を要請しませんでしたが、実際には再起動しないと機能しませんでした。インストールすると「Soundflower (2ch)」と「Soundflower (64ch)」という2つの仮想デバイスが生成され、OSのサウンド設定パネルの「出力」「入力」タブにそれぞれ出現します。実のところ64chの意義はあまりよくわかっていませんが、まぁ今回はとにかく2つの仮想オーディオデバイスが増えたと捉えておきます。

soundflower1

まずはここ「出力」タブで「Soundflower (64ch)」を選んでおきます。これで本来はスピーカーから聞こえるはずの動画の再生音がリダイレクトされます。

次にLadioCastを起動します。左の3つが入力系、右の3つが出力系です。入力に「Soundrflower (64ch)」(=動画の音声)とWebカムマイクや内蔵マイク(=自分の声)を選択し、それを「Soundflower(2ch)」に出力するようにします。動画音声とマイク音声のバランスは、それぞれの設定パネル内のスライダーを使って調整できます。次に動画音声だけは自分も聞きたいので、右の二段目「出力Aux 1」に内蔵出力を指定し、入力1パネルの「Aux 1」ボタンを選択した状態しておきます。これで「Soundflower(2ch)」という仮想サウンドデバイスに、動画とこちらのマイクの音声をミックスしたものが流れ、同時に「内蔵出力」には動画音声のみが流れる状態になります。

LadioCast_fig

次にブラウザでGoogle+にログインし、Hangoutの画面右上にある歯車アイコンをクリックして設定画面を呼び出します。ここでは入力ソースとして「Soundflower (2ch)」(動画音声とマイク音声がミックスされたもの)を指定。出力(相手の声)は内蔵出力(スピーカーまたはヘッドフォン)に出すようにセットします。

hangoutsetting

 

互いにヘッドフォンを使えば動画や自分の声がエコーバックすることもなくとてもクリアに動画音声と相手の声が聞き取れました。

外付けキーボードでFnキーを使えるようにするTips

Mac OS X Mountain LionでiOSのような音声入力ができるようになりましたが、デフォルトのトリガキーはFnキーの二回押しになっています。普段連打なんてしなさそうなキーなのでアリなんですが、MacBookをクラムシェルモードなどにして外付けの、しかもWindows用キーボードを使ってる場合、Fnキー自体が存在しません。さて困った。

dect_setting

OS側でできる回避策としては、上記のようにCommandキーにアサインし直すことが可能です。右Commandキーなんて普段使ってないのでまぁそれでも良かったんですが、なんかもうFnで覚えちゃったので悔しい。なんとか外付けキーボードからFnキー相当のキー入力はできないものか?

キーを眺めてみると、ちょうど良い位置に使ってないキーがありました。我が家のREALFORCEでは右ALTと右Ctrlの間。アプリケーションキーというようです(名前すら知らなかったw)。

SDIM0329

名前さえわかってしまえば、PCKeyboardHackなりKeyRemap4MacBookなりでキーコード調べてアサインしてやれば、、、と思ったら最初からKeyRemap4MacBookに設定項目が存在してました。これをチェックするだけです。

keyremap4macbook

 

 

関連記事:MacBook Proのキーボード周り環境整備覚え書き