Browse Source

修改播放异常监听

yangchong 4 năm trước cách đây
mục cha
commit
6be513220b

+ 3 - 0
AudioPlayer/src/main/java/com/yc/audioplayer/bean/AudioTtsPriority.java

@@ -2,9 +2,12 @@ package com.yc.audioplayer.bean;
 
 public enum AudioTtsPriority {
 
+    //p2正常普通级
     NORMAL_PRIORITY,
 
+    //p1中优先级
     MIDDLE_PRIORITY,
 
+    //p0最高优先级
     HIGH_PRIORITY
 }

+ 9 - 0
AudioPlayer/src/main/java/com/yc/audioplayer/delegate/AudioServiceDelegate.java

@@ -7,6 +7,15 @@ import com.yc.audioplayer.bean.AudioPlayData;
 import com.yc.audioplayer.inter.InterAudio;
 import com.yc.audioplayer.inter.InterPlayListener;
 
+/**
+ * <pre>
+ *     @author yangchong
+ *     email  : yangchong211@163.com
+ *     time  : 2018/8/6
+ *     desc  : 代理类
+ *     revise:
+ * </pre>
+ */
 public final class AudioServiceDelegate implements InterAudio {
 
     private final InterAudio mDelegate ;

+ 20 - 0
AudioPlayer/src/main/java/com/yc/audioplayer/deque/AudioTtsDeque.java

@@ -8,6 +8,15 @@ import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
+/**
+ * <pre>
+ *     @author yangchong
+ *     email  : yangchong211@163.com
+ *     time  : 2018/8/6
+ *     desc  : tts消息队列
+ *     revise:
+ * </pre>
+ */
 public class AudioTtsDeque {
 
     private final Lock mLock = new ReentrantLock();
@@ -16,18 +25,25 @@ public class AudioTtsDeque {
     private final LinkedBlockingDeque<AudioPlayData> mMiddleDeque = new LinkedBlockingDeque<>();
     private final LinkedBlockingDeque<AudioPlayData> mNormalDeque = new LinkedBlockingDeque<>();
 
+    /**
+     * 将播放内容tts添加到对应级别待播放队列中
+     * @param tts                           tts
+     */
     public void add(AudioPlayData tts) {
         mLock.lock();
         try {
             switch (tts.mPriority) {
+                //最高优先级
                 case HIGH_PRIORITY:
                     mHighDeque.add(tts);
                     VideoLogUtils.d("TTS queue add high: " + tts.getTts());
                     break;
+                //中优先级
                 case MIDDLE_PRIORITY:
                     mMiddleDeque.add(tts);
                     VideoLogUtils.d("TTS queue add  middle: " + tts.getTts());
                     break;
+                //普通级别
                 case NORMAL_PRIORITY:
                     mNormalDeque.add(tts);
                     VideoLogUtils.d("TTS queue add  normal: " + tts.getTts());
@@ -54,6 +70,10 @@ public class AudioTtsDeque {
         return data;
     }
 
+    /**
+     * 获取tts播放内容,按照优先级从P0至P2的顺序依次取出
+     * @return
+     */
     public AudioPlayData getTts() {
         AudioPlayData tts = mHighDeque.poll();
         if (tts == null) {

+ 27 - 2
AudioPlayer/src/main/java/com/yc/audioplayer/dispatch/AudioTaskDispatcher.java

@@ -9,7 +9,15 @@ import com.yc.audioplayer.bean.AudioPlayData;
 import com.yc.audioplayer.inter.InterPlayListener;
 import com.yc.videotool.VideoLogUtils;
 
-
+/**
+ * <pre>
+ *     @author yangchong
+ *     email  : yangchong211@163.com
+ *     time  : 2018/8/6
+ *     desc  : task任务分发处理器
+ *     revise:
+ * </pre>
+ */
 public class AudioTaskDispatcher implements InterPlayListener {
 
     private AudioTtsDeque mTaskDeque ;
@@ -26,11 +34,13 @@ public class AudioTaskDispatcher implements InterPlayListener {
     }
 
     public static AudioTaskDispatcher getInstance() {
+        //使用单利模式
         return Holder.INSTANCE;
     }
 
     @Override
     public void onCompleted() {
+        //完成状态
         mAudioManager.onCompleted();
     }
 
@@ -39,22 +49,31 @@ public class AudioTaskDispatcher implements InterPlayListener {
 
     }
 
+    /**
+     * 初始化
+     * @param manager                     AudioManager
+     */
     public void initialize(final AudioManager manager) {
         this.mAudioManager = manager;
+        //创建tts消息队列
         this.mTaskDeque = new AudioTtsDeque();
         this.mRunning = true;
         VideoLogUtils.d("AudioTaskDispatcher initialize: ");
         this.mTtsThread = new Thread() {
             @Override
             public void run() {
+                //设置进程优先级
                 Process.setThreadPriority(Process.THREAD_PRIORITY_AUDIO);
                 while (mRunning) {
                     try {
                         VideoLogUtils.d("AudioTaskDispatcher is running ");
+                        //从tts消息队列获取当前数据
                         mCurrentPlayData = mTaskDeque.get();
+                        //播放当前数据
                         mAudioManager.play(mCurrentPlayData);
                         synchronized (manager.mMutex) {
                             VideoLogUtils.d("AudioTaskDispatcher is wait  " + mCurrentPlayData.getTts());
+                            //等待
                             manager.mMutex.wait();
                         }
                     } catch (InterruptedException e) {
@@ -67,14 +86,20 @@ public class AudioTaskDispatcher implements InterPlayListener {
         this.mTtsThread.start();
     }
 
+    /**
+     * 将播放内容data任务添加到分发器中
+     * @param data                              data
+     */
     public void addTask(AudioPlayData data) {
         if (data == null) {
             return;
         }
-        if (mCurrentPlayData != null && data.mPriority.ordinal() > mCurrentPlayData.mPriority.ordinal()) {
+        if (mCurrentPlayData != null &&
+                data.mPriority.ordinal() > mCurrentPlayData.mPriority.ordinal()) {
             mAudioManager.stop();
         }
         VideoLogUtils.d("AudioTaskDispatcher data: " + data.getTts() + data.mPriority);
+        //添加对
         mTaskDeque.add(data);
     }
 

+ 13 - 0
AudioPlayer/src/main/java/com/yc/audioplayer/inter/PlayStateListener.java

@@ -0,0 +1,13 @@
+package com.yc.audioplayer.inter;
+
+import com.yc.audioplayer.bean.AudioPlayData;
+
+public interface PlayStateListener {
+
+    void onStartPlay(AudioPlayData playData);
+
+    void onCompletePlay(AudioPlayData playData);
+
+    void onError(AudioPlayData playData) ;
+
+}

+ 22 - 0
AudioPlayer/src/main/java/com/yc/audioplayer/manager/DefaultPlayStateListener.java

@@ -0,0 +1,22 @@
+package com.yc.audioplayer.manager;
+
+import com.yc.audioplayer.bean.AudioPlayData;
+import com.yc.audioplayer.inter.PlayStateListener;
+
+public class DefaultPlayStateListener implements PlayStateListener {
+
+    @Override
+    public void onStartPlay(AudioPlayData playData) {
+
+    }
+
+    @Override
+    public void onCompletePlay(AudioPlayData playData) {
+
+    }
+
+    @Override
+    public void onError(AudioPlayData playData) {
+
+    }
+}

+ 1 - 0
AudioPlayer/src/main/java/com/yc/audioplayer/spi/AudioServiceImpl.java

@@ -70,6 +70,7 @@ public class AudioServiceImpl implements AudioServiceProvider {
             VideoLogUtils.d("audio not init!");
             return;
         }
+        //将播放内容任务添加到分发器中
         mAudioTaskDispatcher.addTask(data);
     }
 

+ 1 - 0
Demo/src/main/java/com/yc/ycvideoplayer/audio/AudioActivity.java

@@ -59,6 +59,7 @@ public class AudioActivity extends AppCompatActivity implements View.OnClickList
         btnTts.setOnClickListener(this);
     }
 
+
     @Override
     public void onClick(View v) {
         if (v == btnInit){

+ 0 - 3
VideoTool/build.gradle

@@ -28,7 +28,4 @@ android {
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation project.ext.AppDependencies['appcompat']
-    testImplementation 'junit:junit:4.12'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
 }