2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS / AndroidにてVideo再生機能を使うと苦労する、という話

Last updated at Posted at 2016-07-18

(以下、AIR SDK21での挙動の話です。)

StageVideoはStage3Dレイヤー(不透明です)の下に完全に隠れて見えないからとか使いにくいとかそういう話ではなく。( Starling.current.stage3D.visible = false; みたいな感じで一時的にstage3Dを非表示にはできます。)
どうもスマホ上での挙動がいろいろ不安定なのです。デスクトップでStageVideoがうまく動いたとてしても、基本的な挙動がiOS/Androidでかなり違います。

隠れ不具合

不具合ではなく画面描画の仕組みによる仕様との事ですが、ここのバグベースにある、そして数年放置されているように再生終了後、Stage3D部分がどうやっても見えないままとなってしまう挙動が存在します。(リンク先には、NetStreamを破棄しない事で、Stage3D表示を継続させる事ができるというワークアラウンドについても記載されています。)

さらにおかしな挙動があって、ビデオを再生せずとも、関連したイベントのリスナ登録を行っただけで、内部処理的にはビデオを使った事になってしまうようです。つまりビデオがらみの不具合がビデオを再生する前に起こる事があります。自分の手元で動画周りをいじっていた際、おそらくこのあたりが関連して、スマホ実機で謎のランタイムエラーが起きてしまう事がありました。

VideoTextureを使おう

StageVideoはStage3Dの中でも古めのテクノロジーで(一般のwebサイトのビデオプレイヤーでも使われていた模様)、Stage3D描画と同時に使えないという痛い制限があります。これを解決するためにVideo映像をテクスチャとして使える仕組みがiOS先行で作られ、最近やっとデスクトップ上やAndroidでも使えるようになったのです。AdobeとしてはStageVideoについてはもう使わないで、これからはVideoTextureを使ってね、というスタンスでいるように見えます。VideoTextureのデモは立方体の各面にビデオを貼り付けた派手目のものとなっていますが、そのデモのように個性的なビジュアル表現に挑む場合だけでなく、単にビデオ再生を行う際にもVideoTexture機能を使いましょうという事です。

でも、やっぱり不安定

どうやらStageVideoで起きていた不安定な挙動はそのままVideoTextureでも起こりえるようです。特にAndroidでのVideoTexture機能はまだリリース後時間が経っていないので、より不安定に感じます。

なお、AIR SDK22ではAndroidのビデオコーデック周りに大幅な修正が入ったようです。いくつかの不具合が直っていたりするでしょうか。。
https://helpx.adobe.com/flash-player/release-note/fp_22_air_22_release_notes.html

現状でのベスト対策や不具合のワークアラウンド

  • StageVideoよりVideoTextureを使う。VideoTextureが使えない端末はサポートをあきらめる。
  • 直接VideoTextureを扱わず、StarlingおよびFeathersUIのビデオ再生機能を使う。記述も楽になるし、細かい不具合や再生環境の差異をある程度吸収してくれるはず。
  • FeathersUIのVideoPlayerはスキンなしで使えるのでデザイン素材は必要ない。積極的に使う。
  • Video再生後Stage3Dが見えなくなったままになる不具合は、そのままスマホ+ビデオテクスチャ利用時にも起こり得る。NetStreamを破棄しないことでこれを回避できる。
  • FeathersUIのビデオ再生機能(=VideoPlayer)を使っている場合は直接NetStreamにアクセスできないので、VideoPlayer自体を破棄しないような方法をとる。
  • iOSだとビデオ再生時の音量調整がActionScriptだけではできない(Androidは可能)。必要ならANEを使ってネイティブ制御する。
  • Androidの特定機種でビデオ映像が縦に割れたように崩れることがあった。これはAIR SDKの修正対応待ちしかなさそう。(SDK22で直っているといいな。)
  • ビデオ再生周りのイベントのタイミングや回数などiOS/Android/デスクトップで少しづつ異なるので、複雑な制御をする場合は動作チェックを入念にする。

および

  • 一度ビデオ再生を終え、アプリの別シーンなどに行ってまたビデオ再生シーンに戻って来た2度目の再生時は、さらに挙動が不安定になっている、、、ような気がする。(NetStreamを破棄しないで保持しているのが原因かも?) 仕様として2度目の再生を避けられるなら避けた方がいい。

以上、こんな感じです。ビデオテクスチャがどの環境でも使えるようになったのは大変良いことですが、現状スマートフォンデバイスで扱う際はかなり苦戦しますので注意しましょう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?