在 Android 視頻播放器 (一):使用VideoView播放視頻 咱們講了一下如何使用VideoView播放視頻,瞭解了基本的播放器的一些知識和內容。也知道VideoView內部封裝的就是MediaPlayer,本文就介紹如何使用MediaPlayer播放視頻。html
MediaPlayer是Android中的一個多媒體播放類,其提供的API能知足簡單的大部分音視頻的播放需求。android
下面簡單介紹一下MediaPlayer:數組
MediaPlayer 的提供的方法以下:網絡
Android經過MediaPlayer控制播放器的狀態的方式來控制媒體文件的播放,其中: session
使用MediaPlayer播放視頻的步驟以下:異步
下面咱們將展現如何使用MediaPlayer播放香港衛視的視頻流:ide
須要在AndroidManifest.xml添加權限。oop
<uses-permission android:name="android.permission.INTERNET" />
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <SurfaceView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="195dp" /> </LinearLayout> </android.support.constraint.ConstraintLayout>
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surface_view);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource("http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8");
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Surface surface = holder.getSurface();
mediaPlayer.setSurface(surface);
mediaPlayer.prepareAsync();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(path); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // 經過異步的方式裝載媒體資源 mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 裝載完畢回調 mediaPlayer.start(); } });
if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; }