• スポンサードリンク

速報:った大変だぁAndroid Mの罠 on Nexus9(WiFi)その5

Android

これもどうでもいいかも(^_^;)

Android5.x以降ではOSの機能の一部として、MediaProjectionManager/MediaProjection/VirtualDisplay等を用いて画面の取得を出来るようになりました。

でもAndroid Mを入れたNexus9では少なくともいくつかの条件では正常に画面を取得できないのです ガ━━(;゚Д゚)━━ン!! どうもMediaCodecの動画エンコーダーから取得したSurfaceを直接VirtualDisplayへ渡すとちゃんとフレームがこないみたいなのです。もしかするとフレーム自体は届いていてフレームが更新されたよっていうイベントが来てないのかもしれません。

最初にGitHubで公開したScreenRecordingSampleではMediaCodecの動画エンコーダーから取得したSurfaceを直接VirtualDisplayへ渡していたのでAndroid Mを入れたNexus9では動きませんでした。同じAndroid MでもNexus5だと大丈夫らしいです。SurfaceFlinger辺りに虫が住んでるんですかね?バックグラウンドで動かせるようにサービスとして実装してあるのも原因の1つなのかもしれません。

とりあえずのworkaroundとしては、一手間二手間増えますが一旦SurfaceTextureでフレームを受け取ってそれをMediaCodecの動画エンコーダーから取得したSurfaceへ描画し直すと動きます。

« »

  • スポンサードリンク