zoukankan      html  css  js  c++  java
  • Android:视频(VideoView/MediaPlayer)

    Android之视频播放

    VideoView

    if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){   //判断SDCard是否存在
         SDExit = true;
    } else{
         SDExit = false;
         Toast.makeText(VideoActivity.this, "SD卡不存在!", Toast.LENGTH_SHORT).show();
    }

    public class VideoActivity extends Activity{
        private VideoView videoView;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.video);
            videoView=(VideoView)findViewById(R.id.video);
            String videoPath = "file:///sdcard/video/he.mp4";
            videoView.setVideoURI(Uri.parse(videoPath));
            videoView.setMediaController(new MediaController(this));// 设置播放器的控制条
            videoView.requestFocus();
            videoView.start(); // 开始播放视频
        }
    }

    <!-- VideoView - 视频播放控件-->
    <VideoView android:id="@+id/video" android:layout_width="fill_parent"
        android:layout_height="360dp" />

    MediaPlayer

    <SurfaceView
        android:id="@+id/surface"
        android:layout_width="match_parent"
        android:layout_height="360dp" > </SurfaceView>

    public class VideoActivity extends Activity implements OnBufferingUpdateListener, OnCompletionListener,
        OnPreparedListener,OnVideoSizeChangedListener, SurfaceHolder.Callback{

        private MediaPlayer mediaPlayer;
        private SurfaceView surfaceView;
        private SurfaceHolder holder;
        private Bundle bundle;
        private String videoPath;
        private int mVideoWidth, mVideoHeight;
        private static final String MEDIA = "media";
        private static final int LOCAL_AUDIO = 1, STREAM_AUDIO = 2, RESOURCES_AUDIO = 3, LOCAL_VIDEO = 4, STREAM_VIDEO = 5;
        private boolean isVideoSizeKnown = false, isVideoReadyToBePlayed = false;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.video);

            surfaceView = (SurfaceView) findViewById(R.id.surface);
            holder = surfaceView.getHolder();
            holder.addCallback(this);
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            bundle = getIntent().getExtras();
            private void playVideo(){ //播放视频
            cleanUp();
            try {
                videoPath = "file:///sdcard/video/he.mp4";
                //videoPath = "http://192.168.0.180:8080/?action=stream";
                if(videoPath == ""){
                    Toast.makeText(VideoActivity.this, "视频路径不正确!", Toast.LENGTH_SHORT).show();
                }
                mediaPlayer = new MediaPlayer();
                mediaPlayer.setDataSource(videoPath);
                mediaPlayer.setDisplay(holder);
                mediaPlayer.prepare();
                mediaPlayer.setOnBufferingUpdateListener(this);
                mediaPlayer.setOnCompletionListener(this);
                mediaPlayer.setOnPreparedListener(this);
                mediaPlayer.setOnVideoSizeChangedListener(this);
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            }catch (Exception e) {
            }
        }
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        }
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            playVideo();
        }
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
        }
        @Override
        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
            if (width == 0 || height == 0) {
                return ;
            }
            isVideoSizeKnown = true;
            mVideoWidth = width;
            mVideoHeight = height;
            if (isVideoReadyToBePlayed && isVideoSizeKnown) {
                startVideoPlayback();
            }
        }
        @Override
        public void onPrepared(MediaPlayer mp) {
            isVideoReadyToBePlayed = true;
            if (isVideoReadyToBePlayed && isVideoSizeKnown) {
                startVideoPlayback();
            }
        }
        @Override
        public void onCompletion(MediaPlayer mp) {
        }
        @Override
        public void onBufferingUpdate(MediaPlayer mp, int percent) {
        }
        @Override
        protected void onPause() {
            super.onPause();
            releaseMediaPlayer();
            cleanUp();
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            releaseMediaPlayer();
            cleanUp();
        }
        private void releaseMediaPlayer() {
            if (mediaPlayer != null) {
                mediaPlayer.release();
                mediaPlayer = null;
            }
        }
        private void cleanUp() {
            mVideoWidth = 0;
            mVideoHeight = 0;
            isVideoReadyToBePlayed = false;
            isVideoSizeKnown = false;
        }
        private void startVideoPlayback() {
            holder.setFixedSize(mVideoWidth, mVideoHeight);
            mediaPlayer.start();
        }
    }

    官网参考链接:http://developer.android.com/reference/android/media/MediaPlayer.html

    参考链接:

    代码下载示例:http://download.csdn.net/detail/klcf0220/5999561

  • 相关阅读:
    学习
    素数环
    数独
    nyoj迷宫寻宝(一)
    Django H1 高级教程:如何编写可重用的应用
    Django L6 编写你的第一个Django应用
    Django L5 编写你的第一个Django应用
    Django L4 编写你的第一个Django应用
    Django L3 编写你的第一个Django应用
    Django L2 编写你的第一个Django应用
  • 原文地址:https://www.cnblogs.com/klcf0220/p/3277122.html
Copyright © 2011-2022 走看看