Android学习总结(十六) ———— MediaPlayer播放音频与视频
2017-03-16 21:18
337 查看
一、基本概念
本文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构。Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。 MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。它支持三种不同的媒体来源:
本地资源
内部的URI,比如你可以通过ContentResolver来获取
外部URL(流) 对于Android所支持的的媒体格式列表
二、代码之旅
2.1 使用MediaPlayer播放音频:布局代码很简单,就播放、暂停、停止按钮,这里就不写出来了,我们还是赶紧看看关键代码吧,代码示例如下:
package com.nyl.mediaplayertest; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity implements View.OnClickListener { private Button btnPlay; private Button btnPause; private Button btnStop; private MediaPlayer mediaPlayer = null; private boolean isRelease = true; //判断MediaPlayer是否释放的标志 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //初始化控件 } private void initView() { btnPlay = (Button) findViewById(R.id.btnPlay); btnPause = (Button) findViewById(R.id.btnPause); btnStop = (Button) findViewById(R.id.btnStop); btnPlay.setOnClickListener(this); btnPause.setOnClickListener(this); btnStop.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btnPlay: //播放 if (isRelease){ //在raw下的资源 mediaPlayer = MediaPlayer.create(this,R.raw.fly); isRelease = false; } mediaPlayer.start(); //开始播放 btnPlay.setEnabled(false); btnPause.setEnabled(true); btnStop.setEnabled(true); break; case R.id.btnPause: mediaPlayer.pause(); //停止播放 btnPlay.setEnabled(true); btnPause.setEnabled(false); btnStop.setEnabled(false); break; case R.id.btnStop: mediaPlayer.reset(); //重置MediaPlayer mediaPlayer.release(); //释放MediaPlayer isRelease = true; btnPlay.setEnabled(true); btnPause.setEnabled(false); btnStop.setEnabled(false); break; } } }
注意:播放的是res/raw目录下的音频文件,创建MediaPlayer调用的是create方法,第一次启动播放前 不需要再调用prepare(),如果是使用构造方法构造的话,则需要调用一次prepare()方法!
当点击播放按钮时,音乐就会播放,哈哈哈~话不多说,感兴趣的朋友还是自己动手操作吧,我们来看运行效果图,如下所示:
![](https://images2015.cnblogs.com/blog/877390/201703/877390-20170316193410370-1382608147.png)
2.2 使用MediaPlayer播放视频
MediaPlayer主要用于播放音频,没有提供图像输出界面,所以我们需要借助其他的 组件来显示MediaPlayer播放的图像输出,我们可以使用用SurfaceView 来显示,下面我们使用SurfaceView来写个视频播放的例子,布局代码如下所示:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <SurfaceView android:id="@+id/sfvShow" android:layout_width="match_parent" android:layout_height="300dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center|bottom"> <Button android:id="@+id/btnStart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始" /> <Button android:id="@+id/btnPause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="暂停 " /> <Button android:id="@+id/btnStop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="终止" /> </LinearLayout> </LinearLayout>
接着就是最关键的代码的,如下所示:
package com.nyl.mediaplayerdemo; import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; public class MainActivity extends Activity implements View.OnClickListener, SurfaceHolder.Callback { private SurfaceView sfvShow; private Button btnStart; private Button btnPause; private Button btnStop; private MediaPlayer mediaPlayer = null; private SurfaceHolder surfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //初始化布局控件 } private void initView() { sfvShow = (SurfaceView) findViewById(R.id.sfvShow); btnStart = (Button) findViewById(R.id.btnStart); btnPause = (Button) findViewById(R.id.btnPause); btnStop = (Button) findViewById(R.id.btnStop); btnStart.setOnClickListener(this); btnPause.setOnClickListener(this); btnStop.setOnClickListener(this); //初始化SurfaceHolder类,SurfaceView的控制器 surfaceHolder = sfvShow.getHolder(); surfaceHolder.addCallback(this); //显示的分辨率,不设置为视频默认 surfaceHolder.setFixedSize(320,220); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btnStart: mediaPlayer.start(); break; case R.id.btnPause: mediaPlayer.pause(); break; case R.id.btnStop: mediaPlayer.stop(); break; } } @Override public void surfaceCreated(SurfaceHolder holder) { mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.lesson); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置视频显示在SurfaceView上 mediaPlayer.setDisplay(surfaceHolder); } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { } @Override protected void onDestroy() { super.onDestroy(); if (mediaPlayer.isPlaying()){ mediaPlayer.stop(); } mediaPlayer.release(); } }
运行效果图如下所示:
![](https://images2015.cnblogs.com/blog/877390/201703/877390-20170316210531541-632780753.png)
亲爱的园友们,MediaPlayer播放音频与视频我们就学到这里了,有什么不足的地方欢迎大家提出宝贵意见哦!
相关文章推荐
- Android基础学习总结(十六)——基于ijkplayer封装支持简单界面UI定制的视频播放器
- Android基础学习总结(十六)——接入腾讯X5内核TBS浏览器WebView方法
- 1.16Android 学习+进度之十六-项目阶段性总结(没有更高的需求可能是最终总结)
- android Bitmap学习总结
- Android刷机Root相关学习总结
- 二十六个月Android学习工作总结【转】
- Android学习总结——文件储存
- android 自动化测试学习总结
- Android学习总结六:ArrayList动态数组、Foreach syntax
- android学习:知识点总结
- Android开发从零开始之十六:Service学习(二)
- 关于这一周学习Android自定义View的经验总结
- Android动画学习总结---中
- Android wakelock 学习总结第二篇
- Android学习总结(5)——9个非常有用的Andorid 程序片段
- android WIFI学习总结
- Android研究院之ListView原理学习与优化总结(二十一)
- Android MVVM框架学习总结(二)
- android MVVM框架学习总结(三)
- Android开发学习笔记:Button事件实现方法的总结