MediaPlayer是Android中播放視頻最簡單的控件,這篇文章將介紹MediaPlaer播放視頻的基本方法,在后續(xù)文章中將分析MediaPlayer的原理娶耍。
MediaPlayer的創(chuàng)建有兩種方法,一種是new MediaPlayer
臼寄,另一種是MediaPlayer.create
伪朽,兩種方法都將返回MediaPlayer的實例對象,需要注意的是使用MediaPlayer.create
創(chuàng)建實例對象的時候如果使用new MediaPlayer創(chuàng)建對象,則需要調(diào)用
setDataSource()
方法來設(shè)置播放源炕檩,下面我們來看看MediaPlayer的常用方法斗蒋。
常用方法
void start():開始或恢復(fù)播放。
void stop():停止播放笛质。
void pause():暫停播放泉沾。
int getDuration():獲取流媒體的總播放時長,單位是毫秒妇押。
int getCurrentPosition():獲取當(dāng)前流媒體的播放的位置跷究,單位是毫秒。
void seekTo(int msec):設(shè)置當(dāng)前MediaPlayer的播放位置舆吮,單位是毫秒揭朝。
void setLooping(boolean looping):設(shè)置是否循環(huán)播放。
boolean isLooping():判斷是否循環(huán)播放色冀。
boolean isPlaying():判斷是否正在播放潭袱。
void prepare():同步的方式裝載流媒體文件。
void prepareAsync():異步的方式裝載流媒體文件锋恬。
void release ():回收流媒體資源屯换。
void setAudioStreamType(int streamtype):設(shè)置播放流媒體類型。
void setWakeMode(Context context, int mode):設(shè)置CPU喚醒的狀態(tài)。
setNextMediaPlayer(MediaPlayer next):設(shè)置當(dāng)前流媒體播放完畢彤悔,下一個播放的MediaPlayer嘉抓。
下面是基本使用流程代碼
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button mStart;
private Button mPause;
private Button mStop;
private SurfaceView mVideoView;
private MediaPlayer mMediaPlayer;
private boolean isPause;
private boolean isStop = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initMediaController();
}
private void initMediaController() {
SurfaceHolder holder = mVideoView.getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
initMediaPlayer(holder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
}
private void initMediaPlayer(SurfaceHolder holder) {
mMediaPlayer = new MediaPlayer();
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "aa.mp4";
try {
mMediaPlayer.setDataSource(path);
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.setDisplay(holder);
try {
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(true);
isStop = false;
int duration = mp.getDuration();
Toast.makeText(MainActivity.this, "" + duration, Toast.LENGTH_SHORT).show();
}
});
mMediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
private void initView() {
mStart = findViewById(R.id.bt_start);
mPause = findViewById(R.id.bt_pause);
mStop = findViewById(R.id.bt_stop);
mVideoView = findViewById(R.id.sv_video);
mStart.setOnClickListener(this);
mPause.setOnClickListener(this);
mStop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_start:
if (isStop) {
try {
mMediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
mMediaPlayer.start();
break;
case R.id.bt_pause:
if (isPause) {
mMediaPlayer.start();
mPause.setText("暫停");
isPause = false;
} else {
mMediaPlayer.pause();
mPause.setText("繼續(xù)");
isPause = true;
}
break;
case R.id.bt_stop:
mMediaPlayer.stop();
isStop = true;
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.release();
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/bt_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="開始"
/>
<Button
android:id="@+id/bt_pause"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="暫停"
/>
<Button
android:id="@+id/bt_stop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="停止"
/>
<SurfaceView
android:id="@+id/sv_video"
android:layout_gravity="center_horizontal"
android:layout_width="320dp"
android:layout_height="160dp"/>
</LinearLayout>
效果圖