2012-05-24 52 views
42

在Android TextureView的文档中,它表示您可以使用TextureView播放视频: 但我似乎找不到任何示例说明如何执行此操作。有人知道吗?在TextureView上播放视频

我需要使用textureView,因为我想为动画制作视频。我想在名为.3gp/.MP4格式播放视频,而不是从相机:)

任何帮助,将不胜感激视频..

UPDATE:

解决方案张贴作为一个社会维基答案

+0

你打开硬件上的活动? – Ronnie

+0

我只是将它设置在清单:) – Zelleriation

+0

你有什么想法为什么onSurfaceTextureAvailable从未被调用过? –

回答

37

这里是你如何能做到这: (对这个问题笔者的解决方案,他贴作为问题的更新)

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

动画效果非常好。

+0

使用TextureView代替SurfaceView解决了视频播放时的闪烁问题。谢谢! –

+1

什么是onCreate中的R.id.surface和extras? –

+0

@PranoyC TextureView,显然。 –

-3

setContentView(mPreview);需要前

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

在这里你回答的问题不纠正答案..使用评论来纠正它。 – MBH