Android播放视频(二)
16lz
2021-12-04
package
cn.itcast.videoplayer;
import
java.io.File;
import
android.app.Activity;
import
android.media.MediaPlayer;
import
android.media.MediaPlayer.OnPreparedListener;
import
android.os.Bundle;
import
android.os.Environment;
import
android.view.SurfaceHolder;
import
android.view.SurfaceHolder.Callback;
import
android.view.SurfaceView;
import
android.view.View;
import
android.widget.EditText;
import
android.widget.Toast;
public
class
MainActivity
extends
Activity{
private
EditTextnameText;
private
Stringpath;
private
MediaPlayermediaPlayer;
private
SurfaceViewsurfaceView;
private
boolean
pause;
private
int
position;
@Override
public
void
onCreate(BundlesavedInstanceState){
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
mediaPlayer=
new
MediaPlayer();
nameText=(EditText)
this
.findViewById(R.id.filename);
surfaceView=(SurfaceView)
this
.findViewById(R.id.surfaceView);
//把输送给surfaceView的视频画面,直接显示到屏幕上,不要维持它自身的缓冲区
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setFixedSize(
176
,
144
);
surfaceView.getHolder().setKeepScreenOn(
true
);
surfaceView.getHolder().addCallback(
new
SurfaceCallback());
}
private
final
class
SurfaceCallback
implements
Callback{
public
void
surfaceChanged(SurfaceHolderholder,
int
format,
int
width,
int
height){
}
public
void
surfaceCreated(SurfaceHolderholder){
if
(position>
0
&&path!=
null
){
play(position);
position=
0
;
}
}
public
void
surfaceDestroyed(SurfaceHolderholder){
if
(mediaPlayer.isPlaying()){
position=mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
}
}
@Override
protected
void
onDestroy(){
mediaPlayer.release();
mediaPlayer=
null
;
super
.onDestroy();
}
public
void
mediaplay(Viewv){
switch
(v.getId()){
case
R.id.playbutton:
Stringfilename=nameText.getText().toString();
if
(filename.startsWith(
"http"
)){
path=filename;
play(
0
);
}
else
{
Filefile=
new
File(Environment.getExternalStorageDirectory(),filename);
if
(file.exists()){
path=file.getAbsolutePath();
play(
0
);
}
else
{
path=
null
;
Toast.makeText(
this
,R.string.filenoexsit,
1
).show();
}
}
break
;
case
R.id.pausebutton:
if
(mediaPlayer.isPlaying()){
mediaPlayer.pause();
pause=
true
;
}
else
{
if
(pause){
mediaPlayer.start();
pause=
false
;
}
}
break
;
case
R.id.resetbutton:
if
(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(
0
);
}
else
{
if
(path!=
null
){
play(
0
);
}
}
break
;
case
R.id.stopbutton:
if
(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break
;
}
}
private
void
play(
int
position){
try
{
mediaPlayer.reset();
mediaPlayer.setDataSource(path);
mediaPlayer.setDisplay(surfaceView.getHolder());
mediaPlayer.prepare();
//缓冲
mediaPlayer.setOnPreparedListener(
new
PrepareListener(position));
}
catch
(Exceptione){
e.printStackTrace();
}
}
private
final
class
PrepareListener
implements
OnPreparedListener{
private
int
position;
public
PrepareListener(
int
position){
this
.position=position;
}
public
void
onPrepared(MediaPlayermp){
mediaPlayer.start();
//播放视频
if
(position>
0
)mediaPlayer.seekTo(position);
}
}
}
更多相关文章
- opencv for android(十六):opencv在android上的录制avi格式的视频
- android 学习视频
- Android图形系统(八)-app与SurfaceFlinger共享UI元数据过程
- 【Android】 从头搭建视频播放器(1)——概述
- Android(安卓)音视频开发(五) : OpenGL ES API,了解 OpenGL 开发
- Android视频播放之边缓存边播放
- android之视频播放
- android开发视频教程 android培训入门教程 Android菜鸟教程
- Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析