Android笔记:视屏播放、VideoView、surfaceView,简易视频播放

  1. 云栖社区>
  2. 博客>
  3. 正文

Android笔记:视屏播放、VideoView、surfaceView,简易视频播放

余二五 2017-11-23 23:08:00 浏览834
展开阅读全文

一、VideoView方法

1.activity_video.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".VideoActivity" >
 
    <VideoView
        android:id="@+id/video_videoView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />
 
</RelativeLayout>


2.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.example.vediotest;
 
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.MediaController;
import android.widget.VideoView;
 
public class VideoActivity extends Activity
{
     
    private VideoView videoView;
    private Uri mUri;
    private int mPositionWhenPaused;
     
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
         
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置成全屏模式
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 强制为横屏
        setContentView(R.layout.activity_video);
         
        String url = "http://videofile.xxxx.cn/Upload/Video/File/20140411/201404110228168972.mp4";
        // String url =
        // "http://player.youku.com/player.php/sid/XNDYwOTEzNzQ4/v.swf";
         
        mUri = Uri.parse(url);
         
        videoView = (VideoView) findViewById(R.id.video_videoView);
        MediaController mediaController = new MediaController(this);
        videoView.setMediaController(mediaController);
         
        // videoView.setVideoPath("/sdcard/xyx.3gp");
        // videoView.setVideoURI(mUri);
        // videoView.requestFocus();
        // videoView.start();
         
    }
     
    public void onStart()
    {
        // Play Video
        videoView.setVideoURI(mUri);
        videoView.start();
         
        super.onStart();
    }
     
    public void onPause()
    {
        // Stop video when the activity is pause.
        mPositionWhenPaused = videoView.getCurrentPosition();
        videoView.stopPlayback();
         
        super.onPause();
    }
     
    public void onResume()
    {
        // Resume video player
        if (mPositionWhenPaused >= 0)
        {
            videoView.seekTo(mPositionWhenPaused);
            mPositionWhenPaused = -1;
        }
         
        super.onResume();
    }
     
    public boolean onError(MediaPlayer player, int arg1, int arg2)
    {
        return false;
    }
     
    public void onCompletion(MediaPlayer mp)
    {
        this.finish();
    }
}



二、surfaceView方法

(一)

1.activity_video_surface.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="标题" />
 
    <SurfaceView
        android:id="@+id/surfaceVideo_surfaceView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" >
    </SurfaceView>
 
</LinearLayout>


2.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package com.example.vediotest;
 
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
 
public class SurfaceVideoActivity extends Activity implements Callback, OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener
{
     
    private int width = 0;
    private int height = 0;
    private MediaPlayer mMediaPlayer = null;
    private SurfaceView mSurfaceView = null;
    private SurfaceHolder holder = null;
    private String path = "";
     
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_surface);
         
        mSurfaceView = (SurfaceView) this.findViewById(R.id.surfaceVideo_surfaceView);
        holder = mSurfaceView.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 设置风格
         
    }
     
    public void playVedio()
    {
        try
        {
            path = android.os.Environment.getExternalStorageDirectory() + "/moto_0012.3gp";
            mMediaPlayer = new MediaPlayer();
            // mMediaPlayer.setDataSource(path);
             
          String url = "http://videofile.housebox.cn/Upload/Video/File/20140411/201404110228168972.mp4";
//            String url = "http://player.youku.com/player.php/sid/XNDYwOTEzNzQ4/v.swf";
             
            mMediaPlayer.setDataSource(this, Uri.parse(url));
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mMediaPlayer.setDisplay(holder);
            mMediaPlayer.prepare();// 准备
            Log.e("TAG-Duration", mMediaPlayer.getDuration() + "");
            mMediaPlayer.setOnBufferingUpdateListener(this);
            mMediaPlayer.setOnCompletionListener(this);
            mMediaPlayer.setOnPreparedListener(this);
        }
        catch (Exception ex)
        {
             
        }
    }
     
    public void onBufferingUpdate(MediaPlayer mp, int percent)
    {
        // TODO Auto-generated method stub
        Log.i("TAG-onBufferingUpdate", percent + "|" + mMediaPlayer.getCurrentPosition());
    }
     
    public void onCompletion(MediaPlayer mp)
    {
        // TODO Auto-generated method stub
        Log.i("TAG-onCompletion""Completion");
    }
     
    public void onPrepared(MediaPlayer mp)
    {
        // TODO Auto-generated method stub
        width = mMediaPlayer.getVideoWidth();
        height = mMediaPlayer.getVideoHeight();
        if (width != 0 && height != 0)
        {
            holder.setFixedSize(width, height);// 设置视频高宽
            mMediaPlayer.start();
            Log.i("TAG-Duration2", mMediaPlayer.getDuration() + "");
        }
    }
     
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
    {
        // TODO Auto-generated method stub
         
    }
     
    public void surfaceCreated(SurfaceHolder holder)
    {
        // TODO Auto-generated method stub
        playVedio();
    }
     
    public void surfaceDestroyed(SurfaceHolder holder)
    {
        // TODO Auto-generated method stub
        Log.i("TAG-surfaceDestroyed""surfaceDestroyed");
    }
     
    @Override
    protected void onPause()
    {
        super.onPause();
        if (mMediaPlayer != null)
        {
            if (mMediaPlayer.isPlaying())
            {
                mMediaPlayer.stop();
            }
            mMediaPlayer.reset();
            mMediaPlayer.release();
            mMediaPlayer = null;
        }
    }
     
}


(二)

  1. activity_video_surface2.xml

1
2
3
4
5
6
7
8
9
10
11
12
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
 
    <SurfaceView
        android:id="@+id/surface2_surfaceView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" >
    </SurfaceView>
 
</RelativeLayout>


2.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package com.example.vediotest;
 
import java.io.IOException;
 
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.util.Log;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
 
public class SurfaceVideo2Activity extends Activity implements OnBufferingUpdateListener, OnCompletionListener, MediaPlayer.OnPreparedListener,
        SurfaceHolder.Callback
{
    private MediaPlayer mediaPlayer;
    private SurfaceView surfaceView;
    private SurfaceHolder surfaceHolder;
    private int videoWidth;
    private int videoHeight;
     
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_video_surface2);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 强制为横屏
        this.surfaceView = (SurfaceView) this.findViewById(R.id.surface2_surfaceView);
        this.surfaceHolder = this.surfaceView.getHolder();
        this.surfaceHolder.addCallback(this);
        this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        Log.v("cat"">>>create ok.");
         
    }
     
    private void playVideo() throws IllegalArgumentException, IllegalStateException, IOException
    {
      String url = "http://videofile.housebox.cn/Upload/Video/File/20140411/201404110228168972.mp4";
//        String url = "http://player.youku.com/player.php/sid/XNDYwOTEzNzQ4/v.swf";
         
         
        this.mediaPlayer = new MediaPlayer();
//        this.mediaPlayer.setDataSource("/sdcard/daoxiang.3gp");
        this.mediaPlayer.setDataSource(this, Uri.parse(url));
         
        this.mediaPlayer.setDisplay(this.surfaceHolder);
        this.mediaPlayer.prepare();
        this.mediaPlayer.setOnBufferingUpdateListener(this);
        this.mediaPlayer.setOnPreparedListener(this);
        this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        Log.i("mplayer"">>>play video");
    }
     
    @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)
    {
        Log.i("cat"">>>surface changed");
    }
     
    @Override
    public void surfaceCreated(SurfaceHolder holder)
    {
        try
        {
            this.playVideo();
        }
        catch (Exception e)
        {
            Log.i("cat"">>>error", e);
        }
        Log.i("cat"">>>surface created");
    }
     
    @Override
    public void surfaceDestroyed(SurfaceHolder holder)
    {
        Log.v("mplayer"">>>surface destroyed");
    }
     
    @Override
    public void onCompletion(MediaPlayer arg0)
    {
        // TODO Auto-generated method stub
    }
     
    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent)
    {
        // TODO Auto-generated method stub
    }
     
    @Override
    public void onPrepared(MediaPlayer arg0)
    {
        this.videoWidth = this.mediaPlayer.getVideoWidth();
        this.videoHeight = this.mediaPlayer.getVideoHeight();
        if (this.videoHeight != 0 && this.videoWidth != 0)
        {
            this.surfaceHolder.setFixedSize(this.videoWidth, this.videoHeight);
            this.mediaPlayer.start();
        }
    }
     
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        if (this.mediaPlayer != null)
        {
            this.mediaPlayer.release();
            this.mediaPlayer = null;
        }
    }
     
}




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1414232,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
余二五
+ 关注