Browse Source

1,新增系统播放器
2,解决部分机顶盒因为关闭动画程序时长播放导致不能准确启用插帧动画转动视角的问题

lyn 4 years ago
parent
commit
0902306176

+ 1 - 0
.idea/gradle.xml

@@ -11,6 +11,7 @@
             <option value="$PROJECT_DIR$/app" />
             <option value="$PROJECT_DIR$/core" />
             <option value="$PROJECT_DIR$/ijkvideo" />
+            <option value="$PROJECT_DIR$/systemvideo" />
             <option value="$PROJECT_DIR$/vrlib" />
           </set>
         </option>

+ 1 - 0
app/build.gradle

@@ -66,6 +66,7 @@ dependencies {
     androidTestImplementation lib.test.espresso
     implementation project(path: ':core')
     implementation project(path: ':ijkvideo')
+    implementation project(path: ':systemvideo')
     implementation project(path: ':vrlib')
 }
 

+ 3 - 8
app/src/main/java/com/haochuan/hciptvbasic/BaseWebActivity.java

@@ -12,8 +12,6 @@ import android.content.Context;
 import android.content.res.Configuration;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.Handler;
-import android.text.TextUtils;
 import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.webkit.WebSettings;
@@ -28,10 +26,6 @@ import com.asha.vrlib.MDVRLibrary;
 import com.haochuan.core.BaseMediaPlayer;
 import com.haochuan.core.IVideoPlayer;
 import com.haochuan.core.Logger;
-import com.haochuan.core.http.RequestServer;
-import com.haochuan.core.http.ResponseListener;
-import com.haochuan.core.http.bean.ApkSettingBean;
-import com.haochuan.core.http.bean.ResponseBean;
 import com.haochuan.core.util.ELS;
 import com.haochuan.core.util.HandlerUtil;
 import com.haochuan.hciptvbasic.util.ELSUtil;
@@ -40,7 +34,8 @@ import com.haochuan.hciptvbasic.webview.PayToJS;
 import com.haochuan.hciptvbasic.webview.PlayerToJS;
 import com.haochuan.hciptvbasic.webview.HCWebChromeClient;
 import com.haochuan.hciptvbasic.webview.UtilToJS;
-import com.haochuan.systemvideo.IjkVideoPlayer;
+import com.haochuan.ijk.IjkVideoPlayer;
+import com.haochuan.systemvideo.SystemVideoPlayer;
 
 import java.util.List;
 
@@ -188,7 +183,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
     * */
     private void initPlayer(){
         Logger.d("BaseWebActivity,initPlayer()");
-        mHCPlayer = new IjkVideoPlayer(this);
+        mHCPlayer = new SystemVideoPlayer(this);
         mHCPlayer.setVideoPlayerListener(new IVideoPlayer() {
             @Override
             public void onPreparing() {

+ 1 - 1
app/src/main/java/com/haochuan/hciptvbasic/MainActivity.java

@@ -1,6 +1,5 @@
 package com.haochuan.hciptvbasic;
 
-import android.content.Intent;
 import android.os.Bundle;
 
 import com.haochuan.core.Logger;
@@ -26,6 +25,7 @@ public class MainActivity extends BaseWebActivity  {
         super.onStop();
     }
 
+
     /**-------------------BaseWebActivity重载函数 start--------------------------*/
 
     /*

+ 1 - 1
app/src/main/java/com/haochuan/hciptvbasic/webview/PlayerToJS.java

@@ -15,6 +15,7 @@ import android.widget.FrameLayout;
 
 import com.haochuan.core.BaseMediaPlayer;
 import com.haochuan.core.Logger;
+import com.haochuan.core.util.HandlerUtil;
 import com.haochuan.core.util.JSONUtil;
 import com.haochuan.core.util.JsUtil;
 import com.haochuan.core.util.MathUtil;
@@ -428,7 +429,6 @@ public class PlayerToJS {
 
     }
 
-
     /*
      * 在视频未初始化的情况下,调用该函数初始化
      * @param x                  播放器x坐标

BIN
app/src/main/res/drawable/icon.png


BIN
app/src/main/res/drawable/loading.jpg


+ 1 - 1
core/src/main/java/com/haochuan/core/http/RequestServer.java

@@ -42,7 +42,7 @@ public class RequestServer {
 
 
     //    private static final String HOST = "http://150.138.11.180:6401/";
-    private static final String HOST = "http://202.99.114.152:24025/";
+    private static final String HOST = "http://sxsj.reading.sdteleiptv.com:6401/";
 
     private static final String UPDATE_VERSION = HOST + "apk/up_version";
 

+ 38 - 0
ijkvideo/build.gradle.bak

@@ -0,0 +1,38 @@
+apply plugin: 'com.android.library'
+
+android {
+    compileSdkVersion versions.compileSdk
+    defaultConfig {
+        minSdkVersion versions.minSdk
+        targetSdkVersion versions.targetSdk
+        versionCode versions.versionCode
+        versionName versions.versionName
+        testInstrumentationRunner lib.test.test_runner
+    }
+
+    buildTypes {
+        release {
+            buildConfigField "Boolean", "isDebug", "false"     //app全局是否调试,发布版本不要开启
+        }
+
+        debug {
+            buildConfigField "Boolean", "isDebug", "true"     //app全局是否调试,调试版本开启
+        }
+    }
+
+    compileOptions {
+        sourceCompatibility versions.Java
+        targetCompatibility versions.Java
+    }
+
+}
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+    implementation lib.support.appcompat
+    testImplementation lib.test.junit
+    androidTestImplementation lib.test.runner
+    androidTestImplementation lib.test.espresso
+    implementation project(path: ':core')
+}

+ 1 - 1
ijkvideo/src/main/AndroidManifest.xml

@@ -1,5 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.haochuan.systemvideo">
+    package="com.haochuan.ijk">
 
     <application
         android:allowBackup="true"

+ 1 - 1
ijkvideo/src/main/java/com/haochuan/systemvideo/ErrorMessage.java

@@ -1,4 +1,4 @@
-package com.haochuan.systemvideo;
+package com.haochuan.ijk;
 
 import android.media.MediaPlayer;
 

+ 1 - 1
ijkvideo/src/main/java/com/haochuan/systemvideo/IjkVideoPlayer.java

@@ -1,4 +1,4 @@
-package com.haochuan.systemvideo;
+package com.haochuan.ijk;
 import android.content.Context;
 import android.media.MediaPlayer;
 import android.util.AttributeSet;

+ 0 - 11
ijkvideo/src/main/res/layout/layout_system_video.xml

@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merge xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <tv.danmaku.ijk.media.player.IjkMediaPlayer
-        android:id="@+id/sys_video"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_gravity="center"/>
-</merge>

+ 1 - 1
settings.gradle

@@ -1 +1 @@
-include ':app', ':core', ':vrlib', ':ijkvideo'
+include ':app', ':core', ':vrlib', ':ijkvideo','systemvideo'

+ 1 - 0
systemvideo/build.gradle

@@ -20,6 +20,7 @@ android {
         }
     }
 
+
     compileOptions {
         sourceCompatibility versions.Java
         targetCompatibility versions.Java

+ 0 - 4
systemvideo/src/main/AndroidManifest.xml

@@ -1,7 +1,3 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.haochuan.systemvideo">
-
-    <application
-        android:allowBackup="true"
-        android:supportsRtl="true" />
 </manifest>

+ 0 - 49
systemvideo/src/main/java/com/haochuan/systemvideo/ErrorMessage.java

@@ -1,49 +0,0 @@
-package com.haochuan.systemvideo;
-
-import android.media.MediaPlayer;
-
-public class ErrorMessage {
-
-    public static final int EXTRA_ERROR_IO = MediaPlayer.MEDIA_ERROR_IO;
-    public static final String MSG_ERROR_IO = "文件/网络连接异常。";
-
-    public static final int EXTRA_ERROR_MALFORMED = MediaPlayer.MEDIA_ERROR_MALFORMED;
-    public static final String MSG_ERROR_MALFORMED = "比特流不符合相关的编码标准或文件规范。";
-
-    public static final int EXTRA_ERROR_UNSUPPORTED = MediaPlayer.MEDIA_ERROR_UNSUPPORTED;
-    public static final String MSG_ERROR_UNSUPPORTED = "比特流符合相关的编码标准或文件规范,但媒体框架不支持该功能。";
-
-    public static final int EXTRA_ERROR_TIMED_OUT = MediaPlayer.MEDIA_ERROR_TIMED_OUT;
-    public static final String MSG_ERROR_TIMED_OUT = "有些操作需要很长时间才能完成,通常超过3-5秒。";
-
-    public static final int EXTRA_ERROR_SYSTEM = -2147483648; // - low-level system error.
-    public static final String MSG_ERROR_SYSTEM = "低级系统错误。";
-
-
-
-    public static final int WHAT_ERROR_UNKNOWN = MediaPlayer.MEDIA_ERROR_UNKNOWN;
-    public static final String MSG_ERROR_UNKNOWN = "未指定的媒体播放器错误。";
-
-    public static final int WHAT_ERROR_SERVER_DIED = MediaPlayer.MEDIA_ERROR_SERVER_DIED;
-    public static final String MSG_ERROR_SERVER_DIED = "媒体服务器已挂。应用程序必须释放MediaPlayer对象并实例化一个新对象。";
-
-
-    public static final int INFO_VIDEO_TRACK_LAGGING = MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING;
-    public static final String MSG_ERROR_VIDEO_TRACK_LAGGING = "视频对于解码器而言过于复杂:它无法足够快地解码帧。可能只有音频在这个阶段播放得很好。";
-
-    public static final int INFO_BAD_INTERLEAVING = MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING;
-    public static final String MSG_ERROR_BAD_INTERLEAVING = "错误的交织意味着媒体已经被不正确地交织或者根本不被交织,例如,所有的视频样本首先是所有的音频样本。视频正在播放,但可能会发生大量磁盘搜索。";
-
-    public static final int INFO_NOT_SEEKABLE = MediaPlayer.MEDIA_INFO_NOT_SEEKABLE;
-    public static final String MSG_ERROR_NOT_SEEKABLE = "无法搜索媒体(例如直播)。";
-
-    public static final int INFO_NOT_UNSUPPORTED_SUBTITLE = MediaPlayer.MEDIA_INFO_UNSUPPORTED_SUBTITLE;
-    public static final String MSG_ERROR_UNSUPPORTED_SUBTITLE = "媒体框架不支持字幕轨道。";
-
-    public static final int INFO_NOT_SUBTITLE_TIMED_OUT = MediaPlayer.MEDIA_INFO_SUBTITLE_TIMED_OUT;
-    public static final String MSG_ERROR_SUBTITLE_TIMED_OUT = "阅读字幕轨道需要太长时间。";
-
-    public static final int INFO_NOT_NETWORK_BANDWIDTH = 703;// - bandwidth information is available (as extra kbps)
-    public static final String MSG_ERROR_NETWORK_BANDWIDTH = "- 带宽信息可用(额外kbps)";
-}
-

+ 1 - 0
vrlib/src/main/java/com/asha/vrlib/MDKeyboardHelper.java

@@ -91,6 +91,7 @@ public class MDKeyboardHelper {
                 }
             }
         });
+        ValueAnimatorUtil.resetDurationScale();
         valueAnimator.start();
     }
 

+ 47 - 0
vrlib/src/main/java/com/asha/vrlib/ValueAnimatorUtil.java

@@ -0,0 +1,47 @@
+package com.asha.vrlib;
+
+import android.animation.ValueAnimator;
+
+
+import java.lang.reflect.Field;
+
+/**
+ * @author: xulin
+ * @projectName:HcIPTVBasic
+ * @createTime:2020/8/6 19:53
+ */
+public class ValueAnimatorUtil {
+    /**
+     * 如果动画被禁用,则重置动画缩放时长
+     */
+    public static void resetDurationScaleIfDisable() {
+        if (getDurationScale() == 0)
+            resetDurationScale();
+    }
+
+    /**
+     * 重置动画缩放时长
+     */
+    public static void resetDurationScale() {
+        try {
+            getField().setFloat(null, 1);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static float getDurationScale() {
+        try {
+            return getField().getFloat(null);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return -1;
+        }
+    }
+
+    private static Field getField() throws NoSuchFieldException {
+        Field field = ValueAnimator.class.getDeclaredField("sDurationScale");
+        field.setAccessible(true);
+        return field;
+    }
+}