1.MediaPlayer播放视频
音乐播放遵循了下面的 4 步流程。
(1) 创建 MediaPlayer 对象;
(2) 调用 setDataSource()设置数据源;
(3) 调用 prepare()方法;
(4) 调用 start()开始播放。
(1). 从资源文件中播放
多媒体文件可以放在资源文件夹/res/raw目录下,然后通过MediaPlayer.create()函数创建MediaPlayer对象。由于create(Context ctx, int file)函数中已经包含了多媒体文件的位置参数file,因此无须再设置数据源,调用prepare()函数,这些操作在create()函数的内部已经完成了。获得MediaPlayer对象后直接调用start()函数即可播放音乐。
1.private void playFromRawFile() {
//使用 MediaPlayer.create()获得的MediaPlayer对象默认设置了数据源并初始化完成
2.MediaPlayer player = MediaPlayer.create(this, R.raw.test);
3.player.start(); }
(2). 从文件系统播放
如果开发一个多媒体播放器,一定需要具备从文件系统播放音乐的能力。这时不能再使用 MediaPlayer.create()方法创建MediaPlayer对象,而是使用 new操作符创建MediaPlayer对象。获得MediaPlayer对象之后,需要依次调用 setDataSource()和 prepare()方法,以便设置数据源,让播放器完成准备工作。从文件系统播放 MP3 文件的代码如下所示:
1. private void playFromSDCard() {
2. try {
3. MediaPlayer player = new MediaPlayer();
//设置数据源
4. player.setDataSource("/sdcard/a.mp3");
5. player.prepare();
6. player.start();
7. } catch (IllegalArgumentException e) {
8. e.printStackTrace();
9. } catch (IllegalStateException e) {
10. e.printStackTrace();
11. } catch (IOException e) {
12. e.printStackTrace();
13. }
14.}
(3). 从网络播放
某些平台提供的多媒体框架,并不支持“边下载,边播放”的特性,而是将整个媒体文件下载到本地后再开始播放,用户体验较差。
在应用层实现“边下载,边播放”的特性是一项比较复杂的工作,一方面需要自己处理媒体文件的下载和缓冲,另一方面还需要处理媒体文件格式的解析,以及音频数据的拆包和拼装等操作。
Android 多媒体框架带来了完全不一样的网络多媒体播放体验。在播放网络媒体文件时, 下载、播放等工作均由底层的 PVPlayer 来完成,在应用层开发者只需要设置网络文件的数据源即可。从网络播放媒体文件的代码如下所示:
1. private void playFromNetwork() {
2. String path = "http://website/path/file.mp3";
3. try {
4. MediaPlayer player = new MediaPlayer();
5. player.setDataSource(path);
6. player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
7. public void onPrepared(MediaPlayer arg0) {
8. arg0.start();
9. }
10. });
//播放网络上的音乐,不能调用同步prepare()方法,只能使用prepareAsync()方法
11. player.prepareAsync();
12. } catch (IllegalArgumentException e) {
13. e.printStackTrace();
14. } catch (IllegalStateException e) {
15. e.printStackTrace();
16. } catch (IOException e) {
17. e.printStackTrace();
18. }
19.}