当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

9.2 MediaPlayer播放音频与视频

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:27:49

本节引言:本节带来的是Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码和播放音视频。它支持三种不同的媒体来源:本地资源内部的URI,比如你可以通过ContentResolver来获取外部URL(流)对于Android所支持的的媒体格式列表对于Android支持的媒体格式列表,可见:Supported Media Formats 文档本节我们就来用MediaPlayer来写个简单的播放音视频的例子!官方API文档:MediaPlayer1.相关方法详解1)获得MediaPlayer实例:可以直接new或者调用create方法创建:MediaPlayer mp = new MediaPlayer();MediaPlayer mp = MediaPlayer.create(this, R.raw.test); //无需再调用setDataSource另外create还有这样的形式:create(Context context, Uri uri, SurfaceHolder holder)通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器2)设置播放文件://①raw下的资源:MediaPlayer.create(this, R.raw.test);//②本地文件路径:mp.setDataSource("/sdcard/test.mp3");//③网络URL文件:mp.setDataSource("http://www.xxx.com/music/test.mp3");另外setDataSource()方法有多个,里面有这样一个类型的参数:FileDescriptor,在使用这个API的时候,需要把文件放到res文件夹平级的assets文件夹里,然后使用下述代码设置DataSource:AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());3)其他方法getCurrentPosition( ):得到当前的播放位置getDuration() :得到文件的时间getVideoHeight() :得到视频高度getVideoWidth() :得到视频宽度isLooping():是否循环播放isPlaying():是否正在播放pause():暂停prepare():准备(同步)prepareAsync():准备(异步)release():释放MediaPlayer对象reset():重置MediaPlayer对象seekTo(int msec):指定播放的位置(以毫秒为单位的时间)setAudioStreamType(int streamtype):指定流媒体的类型setDisplay(SurfaceHolder sh):设置用SurfaceHolder来显示多媒体setLooping(boolean looping):设置是否循环播放setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener):网络流媒体的缓冲监听setOnCompletionListener(MediaPlayer.OnCompletionListener listener):网络流媒体播放结束监听setOnErrorListener(MediaPlayer.OnErrorListener listener):设置错误信息监听setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener):视频尺寸监听setScreenOnWhilePlaying(boolean screenOn):设置是否使用SurfaceHolder显示setVolume(float leftVolume, float rightVolume):设置音量start():开始播放stop():停止播放2.使用代码示例示例一:使用MediaPlayer播放音频:运行效果图:关键代码:public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_play; private Button btn_pause; private Button btn_stop; private MediaPlayer mPlayer = null; private boolean isRelease = true; //判断是否MediaPlayer是否释放的标志 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindViews(); } private void bindViews() { btn_play = (Button) findViewById(R.id.btn_play); btn_pause = (Button) findViewById(R.id.btn_pause); btn_stop = (Button) findViewById(R.id.btn_stop); btn_play.setOnClickListener(this); btn_pause.setOnClickListener(this); btn_stop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_play: if(isRelease){ mPlayer = MediaPlayer.create(this,R.raw.fly); isRelease = false; } mPlayer.start(); //开始播放 btn_play.setEnabled(false); btn_pause.setEnabled(true); btn_stop.setEnabled(true); break; case R.id.btn_pause: mPlayer.pause(); //停止播放 btn_play.setEnabled(true); btn_pause.setEnabled(false); btn_stop.setEnabled(false); break; case R.id.btn_stop: mPlayer.reset(); //重置MediaPlayer mPlayer.release(); //释放MediaPlayer isRelease = true; btn_play.setEnabled(true); btn_pause.setEnabled(false); btn_stop.setEnabled(false); break; } }}注意事项:播放的是res/raw目录下的音频文件,创建MediaPlayer调用的是create方法,第一次启动播放前不需要再调用prepare(),如果是使用构造方法构造的话,则需要调用一次prepare()方法!另外贴下官方文档中,从其他两种途径播放音频的示例代码:本地Uri:Uri myUri = ....; // initialize Uri hereMediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(getApplicationContext(), myUri);mediaPlayer.prepare();mediaPlayer.start();外部URL:String url = "http://........"; // your URL hereMediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(url);mediaPlayer.prepare(); // might take long! (for buffering, etc)med

[1] [2] [3]  下一页


9.2 MediaPlayer播放音频与视频