packagecom.weex.app.media;importandroid.content.Context;importandroid.net.Uri;importcom.google.android.exoplayer2.ExoPlayer;importcom.google.android.exoplayer2.ExoPlayerFactory;importcom.google.android.exoplayer2.PlaybackParameters;importcom.google.android.exoplayer2.Player;importcom.google.android.exoplayer2.SimpleExoPlayer;importcom.google.android.exoplayer2.source.ExtractorMediaSource;importcom.google.android.exoplayer2.source.MediaSource;importcom.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;importcom.google.android.exoplayer2.trackselection.DefaultTrackSelector;importcom.google.android.exoplayer2.trackselection.TrackSelection;importcom.google.android.exoplayer2.trackselection.TrackSelector;importcom.google.android.exoplayer2.upstream.BandwidthMeter;importcom.google.android.exoplayer2.upstream.DataSource;importcom.google.android.exoplayer2.upstream.DefaultBandwidthMeter;importcom.google.android.exoplayer2.upstream.DefaultDataSourceFactory;importcom.google.android.exoplayer2.util.Util;importjava.io.File;public classAudioPlayerManager {private static final String TAG = "AudioPlayerManager";public static Float[] speedArray = new Float[]{1.0f, 1.25f, 1.75f, 0.5f, 0.75f};private staticAudioPlayerManager instance;privateContext context;privateSimpleExoPlayer mediaPlayer;privateDataSource.Factory dataSourceFactory;privateAudioPlayerManager(Context context) {this.context =context;
createPlayer();
}public staticAudioPlayerManager getInstance(Context context) {synchronized (AudioPlayerManager.class) {if (instance == null) {
instance= newAudioPlayerManager(context);
}
}returninstance;
}publicExoPlayer getMediaPlayer() {returnmediaPlayer;
}
//设置播放urlpublic voidsetAudioUrl(String audioUrl) {try{//这是一个代表将要被播放的媒体的MediaSource
MediaSource mediaSource = newExtractorMediaSource.Factory(dataSourceFactory)
.createMediaSource(Uri.parse(audioUrl));
mediaPlayer.prepare(mediaSource);
mediaPlayer.setPlayWhenReady(false);
}catch(Exception e) {
e.printStackTrace();
}
}
//设置播放filepublic voidsetAudioFile(File file) {try{//这是一个代表将要被播放的媒体的MediaSource
MediaSource mediaSource = newExtractorMediaSource.Factory(dataSourceFactory)
.createMediaSource(Uri.fromFile(file));
mediaPlayer.prepare(mediaSource);
mediaPlayer.setPlayWhenReady(false);
}catch(Exception e) {
e.printStackTrace();
}
}
//开始播放public voidstart() {
mediaPlayer.setPlayWhenReady(true);
}
//判断是否是播放状态public booleanisPlaying() {int playbackState =mediaPlayer.getPlaybackState();if (playbackState == SimpleExoPlayer.STATE_READY &&mediaPlayer.getPlayWhenReady()) {return true;
}return false;
}
//播放,带回调事件public voidplayWithCompletionListener(String url, Player.EventListener listener) {if (listener != null) {
mediaPlayer.addListener(listener);
}if (url.startsWith("http")) {
setAudioUrl(url);
}else{
setAudioFile(newFile(url));
}
mediaPlayer.setPlayWhenReady(true);
}
//播放or暂停public voidplayOrPause() {if(isPlaying()) {
mediaPlayer.setPlayWhenReady(false);
}else{
mediaPlayer.setPlayWhenReady(true);
}
}
//切换播放速率public void switchSpeed(intspeedIndex) {//API 23 (6.0)以上 ,通过设置Speed改变音乐的播放速率
if(isPlaying()) {//判断是否正在播放,未播放时,要在设置Speed后,暂停音乐播放
getMediaPlayer().setPlaybackParameters(newPlaybackParameters(speedArray[speedIndex]));
}else{
getMediaPlayer().setPlaybackParameters(newPlaybackParameters(speedArray[speedIndex]));
getMediaPlayer().setPlayWhenReady(false);
}
}
//停止播放public void stop(booleanreset) {if (mediaPlayer != null) {
mediaPlayer.stop(reset);
}
}
//释放资源public voidrelease() {if (mediaPlayer != null) {
mediaPlayer.release();
}
}//创建一个新的player
private voidcreatePlayer() {//创建带宽
BandwidthMeter bandwidthMeter = newDefaultBandwidthMeter();//创建轨道选择工厂
TrackSelection.Factory videoTrackSelectionFactory = newAdaptiveTrackSelection.Factory(bandwidthMeter);//创建轨道选择器实例
TrackSelector trackSelector = newDefaultTrackSelector(videoTrackSelectionFactory);//step2.创建播放器
mediaPlayer =ExoPlayerFactory.newSimpleInstance(context, trackSelector);//创建一个DataSource对象,通过它来下载多媒体数据
dataSourceFactory = newDefaultDataSourceFactory(context,
Util.getUserAgent(context,"loader"));
}
}