瀏覽代碼

1,升级ijk播放器

lyn 4 年之前
父節點
當前提交
5af82b4ffd

+ 1 - 0
.idea/gradle.xml

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

+ 46 - 10
app/src/main/java/com/haochuan/hciptvbasic/BaseWebActivity.java

@@ -4,8 +4,6 @@ package com.haochuan.hciptvbasic;
 * 这是主页面的基类,负责webview的初始化工作
 *
 * */
-
-
 import android.annotation.SuppressLint;
 import android.app.ActivityManager;
 import android.content.Context;
@@ -54,11 +52,14 @@ public abstract class BaseWebActivity extends AppCompatActivity {
     private BaseMediaPlayer mHCPlayer = null;
     protected ELS els;
     VRUtil vrUtil;
-    private int playerType = 1; //1,ijk播放器;2,系统播放器
+    private int playerType = 1; //1,ijk播放器;2,系统播放器;3,普通视频系统播放器
 
     //vr模块
     MDVRLibrary mVRLibrary;
 
+    //是否开启vr模块
+    Boolean openVr = true;
+
     /**-----------------------虚函数-----------------------*/
 
     //获取启动页web地址
@@ -91,8 +92,29 @@ public abstract class BaseWebActivity extends AppCompatActivity {
         Logger.init(this,getWebView());
 
         runH5();
+
+        //test();
     }
 
+    /*private void test(){
+        //两秒后播放视频
+        HandlerUtil.runOnUiThreadDelay(()->{
+            String param = "{\"url\":\"http://gzhc-sxrj.oss-cn-shenzhen.aliyuncs.com/vr/20200909/727849628794897.ts\"}";
+            getPlayerToJS().play(param);
+            //10秒后切换成普通视频
+            HandlerUtil.runOnUiThreadDelay(()->{
+                String typeParam = "{\"type\":3}";
+                getPlayerToJS().setPlayerType(typeParam);
+                HandlerUtil.runOnUiThreadDelay(()->{
+                    String param1 = "{\"url\":\"http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4\"}";
+                    getPlayerToJS().play(param1);
+                },2000);
+            },20000);
+        },2000);
+
+
+    }
+*/
     private void runH5(){
         webView.loadUrl(getIndexURL());
     }
@@ -171,15 +193,18 @@ public abstract class BaseWebActivity extends AppCompatActivity {
         mVRLibrary.onOrientationChanged(this);
     }
 
+    /**
+     *2020/8/11,将dispatchEvent修改为onKeyDown,防止按键两次的情况
+     *这个功能还没有更新到线上,下次更新记得加上
+     */
     @Override
-    public boolean dispatchKeyEvent(KeyEvent event) {
-        int keycode = event.getKeyCode();
-        if(keycode == KeyEvent.KEYCODE_BACK || keycode == KeyEvent.KEYCODE_ESCAPE){
+    public boolean onKeyDown(int keyCode,KeyEvent event) {
+        if(keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_ESCAPE){
             Logger.d("dispatchKeyEvent onBack event");
             utilToJS.onBackPressed();
             return true;
         }else{
-            return super.dispatchKeyEvent(event);
+            return super.onKeyDown(keyCode,event);
         }
     }
 
@@ -200,13 +225,21 @@ public abstract class BaseWebActivity extends AppCompatActivity {
     private void initPlayer(){
         Logger.d("BaseWebActivity,initPlayer()");
         switch (playerType){
+            case 1:
+                openVr = true;
+                mHCPlayer = new IjkVideoPlayer(this);
+                break;
             case 2:
+                openVr = true;
+                mHCPlayer = new SystemVideoPlayer(this);
+                break;
+            case 3:
+                openVr = false;
                 mHCPlayer = new SystemVideoPlayer(this);
                 break;
             default:
                 mHCPlayer = new IjkVideoPlayer(this);
                 break;
-
         }
 
         mHCPlayer.setVideoPlayerListener(new IVideoPlayer() {
@@ -232,6 +265,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
 
             @Override
             public void onDestroy() {
+                initPlayerAndVr();
             }
 
             @Override
@@ -264,7 +298,9 @@ public abstract class BaseWebActivity extends AppCompatActivity {
         if(vrUtil == null){
             vrUtil = new VRUtil();
         }
-        mVRLibrary = vrUtil.createVRLibrary(this,mHCPlayer);
+        if(openVr){
+            mVRLibrary = vrUtil.createVRLibrary(this,mHCPlayer);
+        }
     }
 
     /**
@@ -338,7 +374,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
                 return;
             }
             playerType = type;
-            initPlayerAndVr();
+            playerToJS.stop();
         });
     }
     private void setPayToJS(){ payToJS = new PayToJS(this,webView); }

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

@@ -5,6 +5,7 @@ import android.os.Bundle;
 import com.haochuan.core.Logger;
 import com.haochuan.core.http.DownloadServer;
 import com.haochuan.core.http.RequestServer;
+import com.haochuan.core.util.HandlerUtil;
 
 
 public class MainActivity extends BaseWebActivity  {
@@ -46,4 +47,6 @@ public class MainActivity extends BaseWebActivity  {
         super.AppExit();
     }
 
+
+
 }

+ 2 - 2
build.gradle

@@ -19,8 +19,8 @@ buildscript {
             'compileSdk'            : 28,
             'Java'                  : JavaVersion.VERSION_1_8,
             'supportLibrary'        : '28.0.0',
-            'versionCode'           : 2,
-            'versionName'           : "1.0.2"
+            'versionCode'           : 4,
+            'versionName'           : "1.0.4"
     ]
 
     // 引用的lib

+ 7 - 3
ijkvideo/build.gradle

@@ -25,6 +25,12 @@ android {
         targetCompatibility versions.Java
     }
 
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+        }
+    }
+
 }
 
 dependencies {
@@ -35,8 +41,6 @@ dependencies {
     androidTestImplementation lib.test.runner
     androidTestImplementation lib.test.espresso
     implementation project(path: ':core')
+    implementation project(path: ':ijkplayer-java')
 
-    implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
-    implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
-    implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
 }

二進制
ijkvideo/libs/arm64-v8a/libijkffmpeg.so


二進制
ijkvideo/libs/arm64-v8a/libijkplayer.so


二進制
ijkvideo/libs/arm64-v8a/libijksdl.so


二進制
ijkvideo/libs/armeabi-v7a/libijkffmpeg.so


二進制
ijkvideo/libs/armeabi-v7a/libijkplayer.so


二進制
ijkvideo/libs/armeabi-v7a/libijksdl.so


二進制
ijkvideo/libs/x86/libijkffmpeg.so


二進制
ijkvideo/libs/x86/libijkplayer.so


二進制
ijkvideo/libs/x86/libijksdl.so


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

@@ -60,12 +60,21 @@ public class IjkVideoPlayer extends BaseMediaPlayer {
     private void enableHardwareDecoding(){
         if (mediaPlayer instanceof IjkMediaPlayer){
             IjkMediaPlayer player = (IjkMediaPlayer) mediaPlayer;
-            player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
+            /*player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
             player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1);
             player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);
             player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 60);
             player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-fps", 0);
             player.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
+            player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-hevc", 1);*/
+
+            player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);      //关闭硬解码
+            player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1);
+            player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);
+            player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 60);
+            player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-fps", 0);
+            player.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
+            player.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");
         }
     }
 

+ 1 - 1
settings.gradle

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

+ 1 - 0
systemvideo/src/main/java/com/haochuan/systemvideo/SystemVideoPlayer.java

@@ -113,6 +113,7 @@ public class SystemVideoPlayer extends BaseMediaPlayer {
             Logger.e(PLAYER_OBJ_NULL,"播放器对象为null,退出执行");
             return;
         }
+        iVideoPlayer.onPreparing();
         videoView.setVideoPath(url);
         videoView.start();
         playerStatus = MediaStatusCode.PREPARE;  //视频准备中;