android播放mp3方法,Android之MediaPlayer播放音频与视频

本节带来的是Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频 该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码 和播放音视频。它支持三种不同的媒体来源:

本地资源

内部的URI,比如你可以通过ContentResolver来获取

外部URL(流) 对于Android所支持的的媒体格式列表

使用MediaPlayer播放音频:

1)获得MediaPlayer实例:

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)其他方法

521ffa27db39?d=123

Paste_Image.png

实例

//[1]初始化mediaplayer

MediaPlayer mediaPlayer = new MediaPlayer();

//[2]设置要播放的资源位置 path 可以是网络 路径 也可是本地路径

try {

mediaPlayer.setDataSource("/mnt/sdcard/xpg.mp3");

//[3]准备播放

mediaPlayer.prepare();

//[4]开始播放

mediaPlayer.start();

} catch (Exception e) {

e.printStackTrace();

}

本地Uri:

Uri myUri = ....; // initialize Uri here

MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

mediaPlayer.setDataSource(getApplicationContext(), myUri);

mediaPlayer.prepare();

mediaPlayer.start();

网络音频

String url = "http://........"; // your URL here

MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

mediaPlayer.setDataSource(url);

mediaPlayer.prepare(); // might take long! (for buffering, etc)

mediaPlayer.start();

使用MediaPlayer播放视频:

MediaPlayer主要用于播放音频,没有提供图像输出界面,所以我们需要借助其他的 组件来显示MediaPlayer播放的图像输出,我们可以使用用SurfaceView 来显示,下面我们使用SurfaceView来写个视频播放的例子:

//[0]找到控件用来显示播放视频的内容

final SurfaceView sfv = (SurfaceView) findViewById(R.id.sfv);

//获取holder 对象 用来维护视频播放的内容

SurfaceHolder holder = sfv.getHolder();

//[0.1]添加holder 生命周期 方法

holder.addCallback(new Callback() {

//当surface view 销毁

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

System.out.println("surfaceDestroyed");

//停止播放视频

if (mediaPlayer!=null && mediaPlayer.isPlaying()) {

//获取到当前播放视频的位置

currentPosition = mediaPlayer.getCurrentPosition();

mediaPlayer.stop();

}

}

//这个方法执行了 说明sufaceView准备好了

@Override

public void surfaceCreated(SurfaceHolder holder) {

//[1]初始化mediaplayer

System.out.println("surfaceCreated");

mediaPlayer = new MediaPlayer();

//[2]设置要播放的资源位置 path 可以是网络 路径 也可是本地路径

try {

mediaPlayer.setDataSource("http://192.168.11.86:8080/cc.MP4");

//[3]准备播放

mediaPlayer.prepareAsync();

//[3.0]设置显示给sfv sufraceholder 是用来维护视频播放的内容

mediaPlayer.setDisplay(holder);

//[3.1]设置一个准备完成的监听

mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp) {

//[4]开始播放

mediaPlayer.start();

//[5]继续上次的位置继续播放

mediaPlayer.seekTo(currentPosition);

}

});

} catch (Exception e) {

e.printStackTrace();}}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

});

使用VideoView播放视频

// 插件vitamio框架检查是否可用

if (!LibsChecker.checkVitamioLibs(this)) {

return;

}

final VideoView vv = (VideoView) findViewById(R.id.vv);

vv.setVideoPath("http://192.168.11.86:8080/aa.avi");

vv.setOnPreparedListener(new OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp) {

vv.start();

}

});

//设置video的控制器

vv.setMediaController(new MediaController(this));


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部