瀏覽代碼

完善视频播放器内核优化

杨充 4 年之前
父節點
當前提交
5c432a4e41

+ 3 - 3
VideoKernel/src/main/java/com/yc/kernel/factory/PlayerFactory.java

@@ -2,7 +2,7 @@ package com.yc.kernel.factory;
 
 import android.content.Context;
 
-import com.yc.kernel.inter.AbstractPlayer;
+import com.yc.kernel.inter.AbstractVideoPlayer;
 
 
 /**
@@ -11,11 +11,11 @@ import com.yc.kernel.inter.AbstractPlayer;
  *     blog  : https://github.com/yangchong211
  *     time  : 2018/11/9
  *     desc  : 此接口使用方法
- *     revise: 1.继承{@link AbstractPlayer}扩展自己的播放器。
+ *     revise: 1.继承{@link AbstractVideoPlayer}扩展自己的播放器。
  *             2.继承此接口并实现{@link #createPlayer(Context)},返回步骤1中的播放器。
  * </pre>
  */
-public abstract class PlayerFactory<T extends AbstractPlayer> {
+public abstract class PlayerFactory<T extends AbstractVideoPlayer> {
 
     public abstract T createPlayer(Context context);
 

+ 2 - 2
VideoKernel/src/main/java/com/yc/kernel/impl/exo/ExoMediaPlayer.java

@@ -26,7 +26,7 @@ import com.google.android.exoplayer2.util.Clock;
 import com.google.android.exoplayer2.util.EventLogger;
 import com.google.android.exoplayer2.util.Util;
 import com.google.android.exoplayer2.video.VideoListener;
-import com.yc.kernel.inter.AbstractPlayer;
+import com.yc.kernel.inter.AbstractVideoPlayer;
 import com.yc.kernel.utils.VideoLogUtils;
 
 import java.util.Map;
@@ -40,7 +40,7 @@ import java.util.Map;
  *     revise:
  * </pre>
  */
-public class ExoMediaPlayer extends AbstractPlayer implements VideoListener, Player.EventListener {
+public class ExoMediaPlayer extends AbstractVideoPlayer implements VideoListener, Player.EventListener {
 
     protected Context mAppContext;
     protected SimpleExoPlayer mInternalPlayer;

+ 2 - 2
VideoKernel/src/main/java/com/yc/kernel/impl/ijk/IjkVideoPlayer.java

@@ -25,7 +25,7 @@ import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.Surface;
 import android.view.SurfaceHolder;
-import com.yc.kernel.inter.AbstractPlayer;
+import com.yc.kernel.inter.AbstractVideoPlayer;
 import com.yc.kernel.utils.VideoLogUtils;
 
 import java.util.Map;
@@ -42,7 +42,7 @@ import tv.danmaku.ijk.media.player.IjkTimedText;
  *     revise:
  * </pre>
  */
-public class IjkVideoPlayer extends AbstractPlayer {
+public class IjkVideoPlayer extends AbstractVideoPlayer {
 
     protected IjkMediaPlayer mMediaPlayer;
     private int mBufferedPercent;

+ 3 - 3
VideoKernel/src/main/java/com/yc/kernel/impl/media/AndroidMediaPlayer.java

@@ -24,7 +24,7 @@ import android.net.Uri;
 import android.os.Build;
 import android.view.Surface;
 import android.view.SurfaceHolder;
-import com.yc.kernel.inter.AbstractPlayer;
+import com.yc.kernel.inter.AbstractVideoPlayer;
 import java.util.Map;
 
 
@@ -37,7 +37,7 @@ import java.util.Map;
  *     revise:
  * </pre>
  */
-public class AndroidMediaPlayer extends AbstractPlayer {
+public class AndroidMediaPlayer extends AbstractVideoPlayer {
 
     protected MediaPlayer mMediaPlayer;
     private int mBufferedPercent;
@@ -351,7 +351,7 @@ public class AndroidMediaPlayer extends AbstractPlayer {
         @Override
         public boolean onInfo(MediaPlayer mp, int what, int extra) {
             //解决MEDIA_INFO_VIDEO_RENDERING_START多次回调问题
-            if (what == AbstractPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
+            if (what == AbstractVideoPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                 if (mIsPreparing) {
                     mPlayerEventListener.onInfo(what, extra);
                     mIsPreparing = false;

+ 3 - 34
VideoKernel/src/main/java/com/yc/kernel/inter/AbstractPlayer.java → VideoKernel/src/main/java/com/yc/kernel/inter/AbstractVideoPlayer.java

@@ -31,7 +31,7 @@ import java.util.Map;
  *     revise:
  * </pre>
  */
-public abstract class AbstractPlayer {
+public abstract class AbstractVideoPlayer {
 
     /**
      * 视频传入url为空
@@ -61,7 +61,7 @@ public abstract class AbstractPlayer {
     /**
      * 播放器事件回调
      */
-    protected PlayerEventListener mPlayerEventListener;
+    protected VideoPlayerListener mPlayerEventListener;
 
     /**
      * 初始化播放器实例
@@ -194,40 +194,9 @@ public abstract class AbstractPlayer {
     /**
      * 绑定VideoView
      */
-    public void setPlayerEventListener(PlayerEventListener playerEventListener) {
+    public void setPlayerEventListener(VideoPlayerListener playerEventListener) {
         this.mPlayerEventListener = playerEventListener;
     }
 
-    public interface PlayerEventListener {
-
-        /**
-         * 异常
-         */
-        void onError();
-
-        /**
-         * 完成
-         */
-        void onCompletion();
-
-        /**
-         * 视频信息
-         * @param what                          what
-         * @param extra                         extra
-         */
-        void onInfo(int what, int extra);
-
-        /**
-         * 准备
-         */
-        void onPrepared();
-
-        /**
-         * 视频size变化监听
-         */
-        void onVideoSizeChanged(int width, int height);
-
-    }
-
 }
 

+ 59 - 0
VideoKernel/src/main/java/com/yc/kernel/inter/VideoPlayerListener.java

@@ -0,0 +1,59 @@
+/*
+Copyright 2017 yangchong211(github.com/yangchong211)
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+package com.yc.kernel.inter;
+
+/**
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2018/11/9
+ *     desc  : 播放器event监听
+ *     revise:
+ * </pre>
+ */
+public interface VideoPlayerListener {
+
+    /**
+     * 异常
+     */
+    void onError();
+
+    /**
+     * 完成
+     */
+    void onCompletion();
+
+    /**
+     * 视频信息
+     * @param what                          what
+     * @param extra                         extra
+     */
+    void onInfo(int what, int extra);
+
+    /**
+     * 准备
+     */
+    void onPrepared();
+
+    /**
+     * 视频size变化监听
+     * @param width                         宽
+     * @param height                        高
+     */
+    void onVideoSizeChanged(int width, int height);
+
+
+}

+ 17 - 21
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/player/VideoPlayer.java

@@ -1,30 +1,24 @@
 package org.yczbj.ycvideoplayerlib.player;
 
-import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.AssetFileDescriptor;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.Color;
-import android.net.Uri;
-import android.os.Build;
 import android.os.Parcelable;
 
-import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.Gravity;
-import android.view.View;
 import android.view.ViewGroup;
-import android.view.WindowManager;
 import android.widget.FrameLayout;
 import org.yczbj.ycvideoplayerlib.R;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.controller.BaseVideoController;
 
-import com.yc.kernel.inter.AbstractPlayer;
+import com.yc.kernel.inter.AbstractVideoPlayer;
 import com.yc.kernel.factory.PlayerFactory;
 
 import org.yczbj.ycvideoplayerlib.config.PlayerConfig;
@@ -32,6 +26,8 @@ import org.yczbj.ycvideoplayerlib.surface.ISurfaceView;
 import org.yczbj.ycvideoplayerlib.surface.SurfaceViewFactory;
 import org.yczbj.ycvideoplayerlib.tool.toast.BaseToast;
 import org.yczbj.ycvideoplayerlib.tool.utils.PlayerUtils;
+
+import com.yc.kernel.inter.VideoPlayerListener;
 import com.yc.kernel.utils.VideoLogUtils;
 
 import java.io.IOException;
@@ -49,8 +45,8 @@ import java.util.Map;
  *     revise:
  * </pre>
  */
-public class VideoPlayer<P extends AbstractPlayer> extends FrameLayout
-        implements InterVideoPlayer, AbstractPlayer.PlayerEventListener {
+public class VideoPlayer<P extends AbstractVideoPlayer> extends FrameLayout
+        implements InterVideoPlayer, VideoPlayerListener {
 
     private Context mContext;
     /**
@@ -211,6 +207,14 @@ public class VideoPlayer<P extends AbstractPlayer> extends FrameLayout
         }
     }
 
+    @Override
+    protected Parcelable onSaveInstanceState() {
+        VideoLogUtils.d("onSaveInstanceState: " + mCurrentPosition);
+        //activity切到后台后可能被系统回收,故在此处进行进度保存
+        saveProgress();
+        return super.onSaveInstanceState();
+    }
+
 
     /**
      * 初始化播放器视图
@@ -579,19 +583,19 @@ public class VideoPlayer<P extends AbstractPlayer> extends FrameLayout
     @Override
     public void onInfo(int what, int extra) {
         switch (what) {
-            case AbstractPlayer.MEDIA_INFO_BUFFERING_START:
+            case AbstractVideoPlayer.MEDIA_INFO_BUFFERING_START:
                 setPlayState(ConstantKeys.CurrentState.STATE_BUFFERING_PAUSED);
                 break;
-            case AbstractPlayer.MEDIA_INFO_BUFFERING_END:
+            case AbstractVideoPlayer.MEDIA_INFO_BUFFERING_END:
                 setPlayState(ConstantKeys.CurrentState.STATE_COMPLETED);
                 break;
-            case AbstractPlayer.MEDIA_INFO_VIDEO_RENDERING_START: // 视频开始渲染
+            case AbstractVideoPlayer.MEDIA_INFO_VIDEO_RENDERING_START: // 视频开始渲染
                 setPlayState(ConstantKeys.CurrentState.STATE_PLAYING);
                 if (mPlayerContainer.getWindowVisibility() != VISIBLE) {
                     pause();
                 }
                 break;
-            case AbstractPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED:
+            case AbstractVideoPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED:
                 if (mRenderView != null)
                     mRenderView.setVideoRotation(extra);
                 break;
@@ -995,14 +999,6 @@ public class VideoPlayer<P extends AbstractPlayer> extends FrameLayout
         return mVideoController != null && mVideoController.onBackPressed();
     }
 
-    @Override
-    protected Parcelable onSaveInstanceState() {
-        VideoLogUtils.d("onSaveInstanceState: " + mCurrentPosition);
-        //activity切到后台后可能被系统回收,故在此处进行进度保存
-        saveProgress();
-        return super.onSaveInstanceState();
-    }
-
 
     /**-----------------------------暴露api方法--------------------------------------**/
     /**-----------------------------暴露api方法--------------------------------------**/

+ 2 - 2
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/surface/ISurfaceView.java

@@ -5,7 +5,7 @@ import android.view.View;
 
 import androidx.annotation.NonNull;
 
-import com.yc.kernel.inter.AbstractPlayer;
+import com.yc.kernel.inter.AbstractVideoPlayer;
 
 /**
  * <pre>
@@ -21,7 +21,7 @@ public interface ISurfaceView {
     /**
      * 关联AbstractPlayer
      */
-    void attachToPlayer(@NonNull AbstractPlayer player);
+    void attachToPlayer(@NonNull AbstractVideoPlayer player);
 
     /**
      * 设置视频宽高

+ 3 - 3
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/surface/RenderTextureView.java

@@ -11,7 +11,7 @@ import android.view.View;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
-import com.yc.kernel.inter.AbstractPlayer;
+import com.yc.kernel.inter.AbstractVideoPlayer;
 
 
 @SuppressLint("ViewConstructor")
@@ -21,7 +21,7 @@ public class RenderTextureView extends TextureView implements ISurfaceView, Text
     private SurfaceTexture mSurfaceTexture;
 
     @Nullable
-    private AbstractPlayer mMediaPlayer;
+    private AbstractVideoPlayer mMediaPlayer;
     private Surface mSurface;
 
     public RenderTextureView(Context context) {
@@ -35,7 +35,7 @@ public class RenderTextureView extends TextureView implements ISurfaceView, Text
     }
 
     @Override
-    public void attachToPlayer(@NonNull AbstractPlayer player) {
+    public void attachToPlayer(@NonNull AbstractVideoPlayer player) {
         this.mMediaPlayer = player;
     }
 

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/tiktok/TikTokRenderView.java

@@ -5,7 +5,7 @@ import android.view.View;
 
 import androidx.annotation.NonNull;
 
-import com.yc.kernel.inter.AbstractPlayer;
+import com.yc.kernel.inter.AbstractVideoPlayer;
 
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.surface.ISurfaceView;
@@ -24,7 +24,7 @@ public class TikTokRenderView implements ISurfaceView {
     }
 
     @Override
-    public void attachToPlayer(@NonNull AbstractPlayer player) {
+    public void attachToPlayer(@NonNull AbstractVideoPlayer player) {
         mProxyRenderView.attachToPlayer(player);
     }