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)其他方法
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));
總結
以上是生活随笔為你收集整理的android播放mp3方法,Android之MediaPlayer播放音频与视频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android wifi定位服务,如何在
- 下一篇: 一套代码编译出ios和android,H