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

原文地址:https://www.cnblogs.com/klcf0220/p/3277122.html