31

画面上でビデオを回転できるようにする必要があるため、VideoViewの現在の実装と同様に、MediaPlayer上に便利なレイヤーを提供するカスタムTextureViewを作成しました。このAndroidブログの投稿では、TextureViewについて次のように述べています。

SurfaceViewのコンテンツはアプリケーションのウィンドウに表示されないため、効率的に変換(移動、拡大縮小、回転)することはできません。これにより、ListViewまたはScrollView内でSurfaceViewを使用することが困難になります。また、SurfaceViewは、フェードエッジやView.setAlpha()などのUIツールキットの一部の機能と適切に対話できません。

これらの問題を解決するために、Android 4.0では、ハードウェアアクセラレーションによる2DレンダリングパイプラインとSurfaceTextureに依存するTextureViewと呼ばれる新しいウィジェットが導入されています。TextureViewはSurfaceViewと同じ機能を提供しますが、SurfaceViewとは異なり、通常のビューとして動作します。たとえば、TextureViewを使用して、OpenGLシーンまたはビデオストリームを表示できます。TextureView自体は、アニメーション化、スクロールなどが可能です。

ただし、TextureViewがビデオの再生に苦労しているようです。私がテストしているターゲットデバイスには、1.2Ghz Rockchip RK3066デュアルコアCPU、クアッドコアMali-400 GPU(ARM)、および1GBRAMが搭載されています。このデバイスでVideoViewsを使用した同じコードは正常に実行されますが、特定のデバイスに応じて、TextureViewsは再生中に「途切れる」か、まったく表示されません(左上に白い四角が付いたブラックボックス)。TextureViewsは、Intel提供のx86「デバイス」を使用するエミュレーターで正常に動作します。

このパフォーマンスヒットは予想されますか、それとも問題を見つけるために他の場所を探す必要がありますか?ありがとう

4

2 に答える 2

27

はい、期待されTextureViewます。TextureView を使用すると、GPU で直接合成される SurfaceView とは異なり、ビデオはレンダリングのために通常のビュー合成を行います (デコード パイプラインは、 を配置した画面の領域に直接レンダリングしますSurfaceView)。レンダリングはハードウェア アクセラレーションで行われますが、TextureView柔軟性を高めるためにさらに多くの手順が必要であり、パフォーマンスに明確な影響があります。さらに、UI スレッドで実行されているコードは、さまざまな影響を与える可能性がありTextureViewますSurfaceView

追加情報:

于 2013-04-26T00:35:05.487 に答える