package com.example.jarry.playvideo_texuture; import android.app.Activity; import android.graphics.SurfaceTexture; import android.media.MediaPlayer; import android.os.Environment; import android.os.Bundle; import android.view.Surface; import android.view.TextureView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import java.io.IOException; public class MainActivity extends Activity implements TextureView.SurfaceTextureListener, MediaPlayer.OnPreparedListener, OnClickListener { private String path = "/storage/sdcard0/DCIM/Camera/VID_20160318_104656.3gp";// "/a.mp4" //"/storage/sdcard0/DCIM/Camera/VID_20160318_104656.3gp" public String videoPath = Environment.getExternalStorageDirectory() .getPath() + "//storage//sdcard0//DCIM//Camera//VID_20160318_104656.mp4"; private TextureView textureView; private MediaPlayer mediaPlayer; private Button swich3dor2d; private TextureSurfaceRenderer videoRenderer; private int surfaceWidth; private int surfaceHeight; private Surface surface; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textureView = (TextureView) findViewById(R.id.id_textureview); textureView.setSurfaceTextureListener(this); swich3dor2d = (Button) findViewById(R.id.bt_2dor3d); swich3dor2d.setOnClickListener(this); swich3dor2d.setText("split"); } private void playVideo() { if (mediaPlayer == null) { videoRenderer = new VideoTextureSurfaceRenderer(this, textureView.getSurfaceTexture(), surfaceWidth, surfaceHeight); surface = new Surface(videoRenderer.getSurfaceTexture()); initMediaPlayer(); } } private void initMediaPlayer() { this.mediaPlayer = new MediaPlayer(); try { // mediaPlayer.setDataSource(videoPath); mediaPlayer.setDataSource(path); mediaPlayer.setSurface(surface); mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener(this); mediaPlayer.setLooping(true); mediaPlayer.getDuration(); } catch (Exception e1) { e1.printStackTrace(); } } @Override public void onPrepared(MediaPlayer mp) { try { if (mp != null) { mp.start(); } } catch (IllegalStateException e) { e.printStackTrace(); } } @Override protected void onResume() { super.onResume(); if (textureView.isAvailable()) { playVideo(); } } @Override protected void onPause() { super.onPause(); if (videoRenderer != null) { videoRenderer.onPause(); } if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; } } //Activity implements了SurfaceTextureListener接口因此activity中需要重写如下方法: @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { surfaceWidth = width; surfaceHeight = height; playVideo(); } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { } @Override public void onClick(View v) { Button button = (Button) v; switch (videoRenderer.getPlayType()) { case TextureSurfaceRenderer.halfVideo: videoRenderer.setPlayType(TextureSurfaceRenderer.splitVideo); button.setText("split"); break; case TextureSurfaceRenderer.splitVideo: videoRenderer.setPlayType(TextureSurfaceRenderer.fullVideo); button.setText("full"); break; case TextureSurfaceRenderer.fullVideo: videoRenderer.setPlayType(TextureSurfaceRenderer.halfVideo); button.setText("half"); break; } } }
package com.example.jarry.playvideo_texuture; import android.graphics.SurfaceTexture; import android.opengl.EGL14; import android.opengl.GLUtils; import android.util.Log; import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLContext; import javax.microedition.khronos