Вопрос по java, android – Воспроизведение видео на TextureView

47

В документации AndroidTextureView он говорит, что вы можете использовать TextureView для воспроизведения видео: Но я не могу найти какой-либо пример того, как это сделать. Кто-нибудь знает?

Мне нужно использоватьtextureView потому что я хочу оживить видео. Я хочу воспроизводить видео в формате .3gp / .mp4, а не видео с камеры :)

Любая помощь будет оценена ..

ОБНОВИТЬ:

Решение опубликовано как ответ сообщества вики

@Zelleriation вы должны опубликовать свое решение в качестве ответа. Это хорошо сработало для меня. anakin78z
Не могли бы вы понять, почему onSurfaceTextureAvailable никогда не вызывается? George Taskos
Также. вы всегда можете проверитьnetmite.com/android/mydroid/frameworks/base/core/java/android/… за то, как Google сделал обычный VideoView. Edison
Я просто установил это в Манифесте :) Zelleriation
Вы включили аппаратный Acel на активность? Ronnie

Ваш Ответ

3   ответа
42

Вот как вы можете это сделать: (решение автора вопроса, которое он выложил как обновление в вопросе)

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

И анимация работает очень хорошо.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded@OverrideError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
6

У меня была такая же проблема, и я решил ееTextureView, я нашелsetScaleX а такжеsetScaleY очень полезно, если это кому-нибудь поможет.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);

должен сделать это :)

Error: User Rate Limit Exceeded
-3

ВашsetContentView(mPreview); должен быть вызван до

mPreview = (TextureView) findViewById(R.id.surface);
mPreview.setSurfaceTextureListener(this);
Error: User Rate Limit Exceeded

Похожие вопросы