一、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
;
}
}
}
|
(二)
-
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,如需转载请自行联系原作者