2012-05-24 12 views
42

En la documentación de Android TextureView dice que puede usar un TextureView para reproducir video: Pero no puedo encontrar ningún ejemplo de cómo hacerlo. ¿Alguien sabe?Reproducir video en TextureView

Necesito usar un textureView porque quiero animar el video. Quiero reproducir un vídeo en formato 3gp/mp4, no de video de la cámara :)

Cualquier ayuda se agradece ..

ACTUALIZACIÓN:

solución se envía como una respuesta de la comunidad wiki

+0

¿Has activado hardware acelerado en la actividad? – Ronnie

+0

Acabo de configurarlo en el Manifiesto :) – Zelleriation

+0

¿Tendría alguna idea de por qué onSurfaceTextureAvailable nunca se llamó? –

Respuesta

37

Aquí es cómo puede hacerlo: (solución por el autor pregunta, que registró como una actualización en la pregunta)

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

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

Y la animación funciona muy bien.

+0

Usando TextureView en lugar de SurfaceView resolvió el problema de parpadeo en la reproducción de video. ¡Gracias! –

+1

¿Qué es R.id.surface & extras en el onCreate? –

+0

@PranoyC The TextureView, al parecer. –

-3

Sus setContentView(mPreview); tiene que ser llamado antes de la

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

aquí respondes la pregunta para no corregir la respuesta ... usa el comentario para corregirlo. – MBH

Cuestiones relacionadas