在 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; }