From 718f31c92e2029d05260810435a2c70cef6e6ce5 Mon Sep 17 00:00:00 2001 From: lmw <125975490@qq.com> Date: 星期四, 24 四月 2025 10:45:55 +0800 Subject: [PATCH] save --- app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java | 138 +++++++++++++++++++++++---------------------- 1 files changed, 71 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java b/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java index f248846..35baa80 100644 --- a/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java +++ b/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java @@ -1,6 +1,7 @@ package com.sinata.xqmuse.utils; import android.content.Context; +import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.net.Uri; @@ -8,8 +9,24 @@ import android.os.Handler; import android.util.Log; +import com.danikula.videocache.HttpProxyCacheServer; +import com.google.android.exoplayer2.ExoPlayer; +import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.PlaybackException; +import com.google.android.exoplayer2.Player; +import com.google.android.exoplayer2.SimpleExoPlayer; +import com.google.android.exoplayer2.source.MediaSource; +import com.sinata.xqmuse.utils.cache.PreloadManager; +import com.sinata.xqmuse.utils.cache.ProxyVideoCacheManager; +import com.sinata.xqmuse.utils.exo.ExoMediaPlayer; +import com.sinata.xqmuse.utils.exo.ExoMediaPlayerFactory; + import java.io.File; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import xyz.doikki.videoplayer.player.AbstractPlayer; public class AudioUtils { @@ -23,7 +40,7 @@ public static final int MAX_LENGTH = 1000 * 600;// 最大录音时长十分钟,实际行程设置为5分钟上传一次 private OnAudioStatusUpdateListener audioStatusUpdateListener; - private MediaPlayer mMediaPlayer; + private SimpleExoPlayer mMediaPlayer; private float volume = 0.5f; //播放音量 @@ -222,33 +239,36 @@ if (mMediaPlayer != null) { stopPlayMusic(false); } - mMediaPlayer = new MediaPlayer(); - mMediaPlayer.setVolume(volume,volume); + mMediaPlayer = new SimpleExoPlayer.Builder(context).build(); + mMediaPlayer.setVolume(volume); isPause = false; try { Log.e("mmp", "开始播放 path:" + filePath); - mMediaPlayer.setDataSource(context, Uri.parse(filePath)); - mMediaPlayer.prepareAsync(); - mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + HttpProxyCacheServer cacheServer = ProxyVideoCacheManager.getProxy(context); + String proxyUrl = cacheServer.getProxyUrl(filePath); + MediaItem mediaItem = MediaItem.fromUri(Uri.parse(proxyUrl)); + mMediaPlayer.setMediaItem(mediaItem); + mMediaPlayer.prepare(); + mMediaPlayer.play(); + mMediaPlayer.addListener(new Player.Listener(){ @Override - public void onPrepared(MediaPlayer mp) { - // 装载完毕回调 - mMediaPlayer.start(); - if (audioStatusUpdateListener != null){ - audioStatusUpdateListener.onGetDuration(mMediaPlayer.getDuration()); - audioStatusUpdateListener.onStartPlay(); - } + public void onPlayerError(PlaybackException error) { + Log.e("mmp","播放错误:"+error.getMessage()); } - - }); - mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override - public void onCompletion(MediaPlayer mp) { - stopPlayMusic(true); -// BaseEvent baseEvent = new BaseEvent(BaseEvent.SEND_AODIO_PLAY_OVER); -// baseEvent.setMsg(filePath); -// EventBus.getDefault().post(baseEvent); + public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { + if (playbackState == Player.STATE_BUFFERING) + Log.e("mmp","缓冲中...STATE_BUFFERING"); + else if (playbackState == Player.STATE_READY){ + Log.e("mmp","缓冲完成,音频准备就绪:STATE_READY"); + + } else if (playbackState == Player.STATE_ENDED){ + Log.e("mmp","播放完成:STATE_ENDED"); + stopPlayMusic(true); + } else if (playbackState == Player.STATE_IDLE){ + Log.e("mmp","播放器空闲:STATE_IDLE"); + } } }); } catch (Exception e) { @@ -266,34 +286,18 @@ if (mMediaPlayer != null) { stopPlayMusic(false); } - mMediaPlayer = new MediaPlayer(); - mMediaPlayer.setVolume(volume,volume); + mMediaPlayer = new SimpleExoPlayer.Builder(context).build(); + mMediaPlayer.setVolume(volume); isPause = false; try { Log.e("mmp", "循环播放 path:" + filePath); - mMediaPlayer.setDataSource(context, Uri.parse(filePath)); - mMediaPlayer.prepareAsync(); - mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { - @Override - public void onPrepared(MediaPlayer mp) { - // 装载完毕回调 - mMediaPlayer.start(); - if (audioStatusUpdateListener != null) - audioStatusUpdateListener.onStartPlay(); - } - }); - mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { - @Override - public void onCompletion(MediaPlayer mp) { - Log.e("mmp", "播放完成 从新循环 path:" + filePath); - mMediaPlayer.start(); - if (isPause){ - Log.e("mmp", "循环播放异步暂停"); - mMediaPlayer.pause(); - } - } - }); - + HttpProxyCacheServer cacheServer = ProxyVideoCacheManager.getProxy(context); + String proxyUrl = cacheServer.getProxyUrl(filePath); + MediaItem mediaItem = MediaItem.fromUri(Uri.parse(proxyUrl)); + mMediaPlayer.setMediaItem(mediaItem); + mMediaPlayer.prepare(); + mMediaPlayer.setRepeatMode(Player.REPEAT_MODE_ONE); + mMediaPlayer.play(); } catch (Exception e) { e.printStackTrace(); } @@ -308,7 +312,7 @@ public void resume(){ if (mMediaPlayer != null) { - mMediaPlayer.start(); + mMediaPlayer.play(); isPause = false; } } @@ -322,11 +326,11 @@ public void setVolume(float volume){ this.volume = volume; if (mMediaPlayer!=null){ - mMediaPlayer.setVolume(volume,volume); + mMediaPlayer.setVolume(volume); } } - public int getCurrentPosition(){ + public long getCurrentPosition(){ if (mMediaPlayer!=null){ return mMediaPlayer.getCurrentPosition(); } @@ -359,23 +363,23 @@ * @param filePath * @return */ - public int getMusicTime(Context context, String filePath) { - if (mMediaPlayer != null) { - stopPlayMusic(false); - } - mMediaPlayer = new MediaPlayer(); - try { - mMediaPlayer.setDataSource(context, Uri.parse(filePath)); - mMediaPlayer.prepare(); - int duration = mMediaPlayer.getDuration(); - if (0 != duration) { - mMediaPlayer.release(); - return duration / 1000; - } - } catch (IOException e) { - e.printStackTrace(); - } - return 0; - } +// public int getMusicTime(Context context, String filePath) { +// if (mMediaPlayer != null) { +// stopPlayMusic(false); +// } +// mMediaPlayer = new MediaPlayer(); +// try { +// mMediaPlayer.setDataSource(context, Uri.parse(filePath)); +// mMediaPlayer.prepare(); +// int duration = mMediaPlayer.getDuration(); +// if (0 != duration) { +// mMediaPlayer.release(); +// return duration / 1000; +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// return 0; +// } } \ No newline at end of file -- Gitblit v1.7.1