视频播放(在线)

来源:互联网 发布:免流软件原理 编辑:程序博客网 时间:2024/04/28 18:55

背景android:background="#FFFFFF"


使用surfaceview控件实现视频播放,但是接到电话在播放的时候只有声音无画面,因为surfaceview控件离开前台后会被摧毁,当activity重新回到前台的时候surfaceview又会被重建,但是在onResume()方法,故onResume()中无法播放,可以通过监听对象,在surfaceview创建的回调方法中重新播放,保存position,再次播放用

onDestroy()方法中释放播放器对象。

path=filename实现在线播放

public class MainActivity extends Activity {    private EditText nameText;    private String path;    private MediaPlayer mediaPlayer;    private SurfaceView surfaceView;    private boolean pause;    private int position;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                mediaPlayer = new MediaPlayer();        nameText = (EditText) this.findViewById(R.id.filename);        surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);        //把输送给surfaceView的视频画面,直接显示到屏幕上,不要维持它自身的缓冲区        surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        surfaceView.getHolder().setFixedSize(176, 144);  //设置分辨率        surfaceView.getHolder().setKeepScreenOn(true); //保持屏幕高亮,不锁屏        surfaceView.getHolder().addCallback(new SurfaceCallback());    }        private final class SurfaceCallback implements Callback{public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}public void surfaceCreated(SurfaceHolder holder) {if(position>0 && path!=null){play(position);position = 0;}}public void surfaceDestroyed(SurfaceHolder holder) {if(mediaPlayer.isPlaying()){position = mediaPlayer.getCurrentPosition();mediaPlayer.stop();}}    }@Overrideprotected void onDestroy() {    mediaPlayer.release();    mediaPlayer = null;super.onDestroy();}public void mediaplay(View v){    switch (v.getId()) {case R.id.playbutton:String filename = nameText.getText().toString();if(filename.startsWith("http")){path = filename;     //实现在线播放play(0);}else{File file = new File(Environment.getExternalStorageDirectory(), filename);if(file.exists()){path = file.getAbsolutePath();play(0);}else{path = null;Toast.makeText(this, R.string.filenoexsit, 1).show();}}break;case R.id.pausebutton:if(mediaPlayer.isPlaying()){mediaPlayer.pause();pause = true;}else{if(pause){mediaPlayer.start();pause = false;}}break;case R.id.resetbutton:if(mediaPlayer.isPlaying()){mediaPlayer.seekTo(0);}else{if(path!=null){play(0);}}break;case R.id.stopbutton:if(mediaPlayer.isPlaying()){mediaPlayer.stop();}break;}    }private void play(int position) {try {mediaPlayer.reset();mediaPlayer.setDataSource(path);mediaPlayer.setDisplay(surfaceView.getHolder());mediaPlayer.prepare();//缓冲mediaPlayer.setOnPreparedListener(new PrepareListener(position));} catch (Exception e) {e.printStackTrace();}}private final class PrepareListener implements OnPreparedListener{private int position;public PrepareListener(int position) {     this.position = position;}public void onPrepared(MediaPlayer mp) {mediaPlayer.start();//播放视频if(position>0) mediaPlayer.seekTo(position);}}}

0 0
原创粉丝点击