Dans la documentation de Android TextureView , il est dit que vous pouvez utiliser un TextureView pour lire la vidéo: Mais je ne peux pas trouver d'exemple sur la façon de le faire. Est-ce que quelqu'un connaître?
Je dois utiliser un textureView
parce que je veux animer la vidéo. Je veux lire une vidéo au format .3gp/.mp4, pas une vidéo de la caméra :)
Toute aide serait appréciée..
MISE À JOUR:
La solution est publiée en tant que réponse wiki communautaire
Voici comment vous pouvez le faire: (solution de l'auteur de la question, qu'il a posté comme 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'animation fonctionne vraiment 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 aide quelqu'un. http://developer.Android.com/reference/Android/view/View.html#setScaleX%28float%29
Cependant, si vous ne ciblez que l'API 16+:
mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
devrait le faire :)