Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Playing video on TextureView

In the documentation of Android TextureView it says that you can use a TextureView to play video: But I cant seem to find any example of how to do this. Does anyone know?

I need to use a textureView because I want to animate the video. I want to play a video in .3gp/.mp4 format, not video from the Camera :)

Any help would be appreciated..

UPDATE:

Solution is posted as a community wiki answer

like image 683
Zelleriation Avatar asked May 24 '12 11:05

Zelleriation


2 Answers

Here is how you can do it: (solution by the question author, that he posted as an update in the 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 = new TextureView(this);       mPreview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));       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();     }    }  

And animating it works really well.

like image 170
3 revs, 2 users 95% Avatar answered Oct 08 '22 22:10

3 revs, 2 users 95%


I had the same problem, and solved it with a TextureView. I found setScaleX and setScaleY very useful, if this helps anyone. http://developer.android.com/reference/android/view/View.html#setScaleX%28float%29

However if you are only targeting API 16+:

mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING); 

should do it:)

like image 37
Maximosaic Avatar answered Oct 09 '22 00:10

Maximosaic