• 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

  • 相关阅读:
    Linux下tty/pty/pts/ptmx详解
    ubuntu 12 或更高版本 下安装和配置 xrdp 远程登陆
    ubuntu+apache2+php5+mysql5.0的安装
    Ubuntu SSH 服务安装配置和使用
    ubuntu 12.10 进入命令行界面 (字符界面)
    ubuntu 下使用 cron 和 crontab
    Ubuntu用命令行发邮件mutt,报警发短信通知
    Ubuntu 安装 proftpd,并添加虚拟用户
    绝对有效的 ubuntu 12.xx 下 apache2 + svn 安装和配置方法
    添加android系统通知
  • 原文地址:https://www.cnblogs.com/klcf0220/p/3277122.html
Copyright © 2020-2023  润新知