Lecture de vidéos sur TextureView

Dans la documentation de Android TextureView, il est dit que vous pouvez utiliser un TextureView pour lire des vidéos: Mais je ne peux pas trouver d’exemple sur la façon de procéder. Est-ce que quelqu’un sait?

Je dois utiliser un textureView parce que je veux animer la vidéo. Je veux lire une vidéo au format .3gp / .mp4, pas la vidéo de la caméra 🙂

Toute aide serait appréciée..

METTRE À JOUR:

La solution est affichée en tant que réponse wiki de la communauté

Voici comment vous pouvez le faire: (solution par l’auteur de la question, qu’il a publié comme une mise à jour dans la question)

 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(); } } 

Et l’animer fonctionne très bien.

J’ai eu le même problème et l’ai résolu avec un TextureView . J’ai trouvé setScaleX et setScaleY très utiles si cela setScaleY aider quelqu’un. http://developer.android.com/reference/android/view/View.html#setScaleX%28float%29

Cependant, si vous ne ciblez que API 16+:

 mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING); 

devrait le faire 🙂

Votre setContentView(mPreview); doit être appelé avant le

 mPreview = (TextureView) findViewById(R.id.surface); mPreview.setSurfaceTextureListener(this);