Androidでビデオへオーバレイできるか
以前のエントリ「【ダウンロード違法化直前】HT-03Aでニコニコ動画をストリーミングその2」から派生して。
上記リンク先では、ニコニコ動画をAndroidで視聴する方法のひとつを提示した。その方法とは、サーバ側でAndroidで再生可能なフォーマットに変換し、Androidはそのファイルをストリーム再生する、というものであった。コメントも動画に埋め込んでしまうことで、コメントも動画の一部として再生させた。
しかし、コメントも動画の一部としてしまった場合、コメントだけの更新が不可能になり利便性が低いのではないかという意見が有った。
ここで、コメントを動画に埋め込む方式(エンベッド方式と呼称)と、クライアント側で動画の上にコメントを描画する方式(オーバレイ方式と呼称)の利点と欠点を挙げる。まず、エンベッド方式のメリットとして、以下の点が挙げられる。
- 端末依存性を無くすことができる。
- (前回の方式で例えると)mp4ストリーム再生可能な機種であれば再生ができる。AndroidもiPhoneも再生可能である。
- オーバレイ方式では、専用のクライアントアプリが必要である。
- 端末の処理負荷を低減できる。これは反応速度や電池の持ちに影響する。
- エンベッド方式では、コメントを表示する場合に動画再生処理以外の処理が不要。
- オーバレイ方式では、動画再生処理+コメント表示処理が必要。
一方、デメリットとしては以下の点が考えられる。
- コメントを表示する/しないのリアルタイム変更が不能。
- エンベッド方式では、変換要求時までに決定する必要があり、切り替える場合はそれぞれに対応する変換処理が必要になる。
- オーバレイ方式では、再生時に合成するため、再生中に切り替えることが可能。
- コメントを最新化する場合の処理負荷(ここでは、キャッシュ保存に関する法的な問題は考えない)
- エンベッド方式では、画像変換処理をやり直す必要がある。
- オーバレイ方式では、コメントデータのみを再取得すれば良い。
個人的には、携帯端末でPCほどの多機能性は不要であり、エンベッド方式で十分だと考えている。
ところで、Androidで動画にオーバレイすることは可能なのだろうか。
既存のアプリGoogle Goggles(日本語解説)やLayer(紹介動画)では、カメラから取り込んだ映像にウィジェットをオーバレイしているが、どうもビデオへのオーバレイはHT-03Aの現行OSであるバージョン1.6では不可能なようだ。
FrameLayoutを用いればウィジェットを重ねあわせることができる。また、SurfaceViewは背景を透明化することができる(参考)。不透明な動画再生Viewを下に、透明なコメント再生Viewを上にして重ねれば上手く行くかと考えたのだが、透明化すると下のViewが見えるようになるわけではなく、下のActivityが見えてしまった。つまり下のViewも透過してしまうようだ。
では、動画再生Activityとコメント再生Activity、というようにActivityを分けてしまえば良いのかというと、動画再生Activityがバックグランドに回った時点で動画再生は停止してしまい、こちらもうまくいかなかった。
さきゅばすが利用しているffmpegのavfilterや、以前JMFで試したようなeffect filterといった、動画像を画面描画前にフィルタ処理するようなAPIも、調べた限りではなさそうだ。
ただ、API Level 5、つまりAndroid2.0ではSurficeViewにsetZOrderMediaOverlayというメソッドが追加されており、これを利用すれば可能になるかもしれない。
しかし透過させるために前述の方法では特定のViewだけ透過させることは不可能であるしどうするのか、と思っていたのだが、Color.TRANSPARENTという色が定義されているようで、これを用いれば良いのかもしれない(ちなみにAndroidで使用するのはjava.awt.Colorではなくandroid.graphics.Colorだ)。
調査が中途半端になってしまったが、他に行わなければならないことが多くあるため、これよりいくらかの期間プログラミングを休むことにする。なお、書きかけのプログラミング関連エントリもいくつかあるのだが、これらについては簡単に終えられるようであれば完成させて投稿したい。
追記:
上で「どうもビデオへのオーバレイはHT-03Aの現行OSであるバージョン1.6では不可能なようだ。」というように書いたが、ドワンゴのインターンシップでAndroid用ニコニコ動画プレーヤを作成した方の記事を読んだところ、別に問題なく行えるようだ[参考:hiroki - ドワンゴインターンで作ったもの, 第1回名古屋Android勉強会 でインターンについて発表してきた]。
また、「調査が中途半端になってしまったが、」と書いたが、こちらについてもよくよく考えると今に始まったことではなかった。
« Android SDK Toolsを更新できない | トップページ | Androidでメールが受信できなくなったので初期化した »
この記事へのコメントは終了しました。
« Android SDK Toolsを更新できない | トップページ | Androidでメールが受信できなくなったので初期化した »
コメント