web-dev-qa-db-ja.com

TextureViewでビデオを再生する

Android TextureView のドキュメントでは、TextureViewを使用してビデオを再生できると述べていますが、これを行う方法の例は見つかりません。知ってる?

ビデオをアニメーション化するため、textureViewを使用する必要があります。カメラからのビデオではなく、.3gp/.mp4形式のビデオを再生したい:)

助けていただければ幸いです。

更新:

ソリューションはコミュニティWikiの回答として投稿されます

51
Zelleriation

方法は次のとおりです。(質問の作成者による解決策、彼は質問の更新として投稿した)

Public class MediaPlayerDemo_Video extends Activity implements TextureView.SurfaceTextureListener {


 private MediaPlayer mMediaPlayer;

 private TextureView mPreview;

 @Override
 public void onCreate(Bundle icicle) {

      super.onCreate(icicle);

      mPreview = (TextureView) findViewById(R.id.surface);
      mPreview.setSurfaceTextureListener(this);
      extras = getIntent().getExtras();
      setContentView(mPreview);
 }

 @Override
 public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
 Surface s = new Surface(surface);

 try {
       mMediaPlayer= new MediaPlayer();
       mMediaPlayer.setDataSource("http://daily3gp.com/vids/747.3gp");
       mMediaPlayer.setSurface(s);
       mMediaPlayer.prepare();
       mMediaPlayer.setOnBufferingUpdateListener(this);
       mMediaPlayer.setOnCompletionListener(this);
       mMediaPlayer.setOnPreparedListener(this);
       mMediaPlayer.setOnVideoSizeChangedListener(this);
       mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
       mMediaPlayer.start();
      } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
} 

そして、それをアニメートすることは本当にうまくいきます。

46
Carlos Robles

同じ問題があり、TextureViewで解決しました。 setScaleXsetScaleYが非常に役立つことがわかりました。 http://developer.Android.com/reference/Android/view/View.html#setScaleX%28float%29

ただし、API 16以降のみをターゲットにしている場合:

mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);

それを行う必要があります:)

6
Maximosaic