Воспроизведение видео на TextureView
В документации Android TextureView говорится, что вы можете использовать TextureView для воспроизведения видео: Но я не могу найти какой-либо пример того, как это сделать. Кто-нибудь знает?
Мне нужно использовать textureView
потому что я хочу оживить видео. Я хочу воспроизводить видео в формате.3gp/.mp4, а не видео с камеры:)
Любая помощь будет оценена..
ОБНОВИТЬ:
Решение опубликовано как ответ сообщества вики
3 ответа
Вот как вы можете это сделать: (решение автора вопроса, которое он опубликовал как обновление в вопросе)
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();
}
}
И анимация работает очень хорошо.
У меня была такая же проблема, и я решил ее TextureView
, я нашел setScaleX
а также setScaleY
очень полезно, если это кому-нибудь поможет. http://developer.android.com/reference/android/view/View.html
Однако, если вы ориентируетесь только на API 16+:
mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
должен сделать это:)
Ваш setContentView(mPreview);
должен быть вызван до
mPreview = (TextureView) findViewById(R.id.surface);
mPreview.setSurfaceTextureListener(this);