Closed cs9420 closed 4 years ago
``java
public static Object getDecoderInstance(int planId){
Object instance = null;
try{
Class clz = getSDKClass(PlayerConfig.getPlan(planId).getClassPath());
if(clz!=null){
Constructor constructor = getConstructor(clz);
if(constructor!=null){
instance = constructor.newInstance();
}
}
}catch (Exception e){
e.printStackTrace();
}
return instance;
}````
这个很大可能是因为ijkplayer内部加载解码库时抛出了异常造成反射实例化失败,请注意logcat中的日志。
这个很大可能是因为ijkplayer内部加载解码库时抛出了异常造成反射实例化失败,请注意。
IjkMediaPlayer.class
public static void loadLibrariesOnce(IjkLibLoader libLoader) {
Class var1 = IjkMediaPlayer.class;
synchronized(IjkMediaPlayer.class) {
if (!mIsLibLoaded) {
if (libLoader == null) {
libLoader = sLocalLibLoader;
}
libLoader.loadLibrary("ijkffmpeg");
libLoader.loadLibrary("ijksdl");
libLoader.loadLibrary("ijkplayer");
mIsLibLoaded = true;
}
}
}
这三个解码文件的确是没有加载成功,但是反复看了demo和引入没发现是哪块的问题,可否点拨一下
libLoader.loadLibrary("ijkffmpeg");
libLoader.loadLibrary("ijksdl");
libLoader.loadLibrary("ijkplayer");
引用了这三个文件
implementation project(':exoplayer')
implementation project(':ijkplayer')
api project(':playerbase')
你的so库呢? 对so库的引入,以下方式二选一: 1. //ijk官方的解码库依赖,较少格式版本且不支持HTTPS。 implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' 2. 本地so文件 如果引入的有so,ijkplayer依然实例化失败,则需要确认下so的位置或者是否配置了abiFilter引起的。
你的so库呢? 对so库的引入,以下方式二选一: 1. //ijk官方的解码库依赖,较少格式版本且不支持HTTPS。 implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' 2. 本地so文件 如果引入的有so,ijkplayer依然实例化失败,则需要确认下so的位置或者是否配置了abiFilter引起的。
问题找到了,因为so文件只有armeabi-v7a,所以有其他比如arm64-v8a,armeabi等CPU支持的so文件,加载的时候就只会加载一种,如果手机CPU加载的是arm64-v8a支持的so文件,IjkPlayer就会找不着文件,我想咨询一下,怎么可以获取其他CPU支持的so文件呢
如果是本地引入的就使用我之前编译好的全平台so文件 链接: https://pan.baidu.com/s/17SNkfY-iEa9f-GeC8Jz_uQ 提取码: gbrw 如果是远程引入的,使用ijk官方依赖,如下: implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
如果是本地引入的就使用我之前编译好的全平台so文件 链接: https://pan.baidu.com/s/17SNkfY-iEa9f-GeC8Jz_uQ 提取码: gbrw 如果是远程引入的,使用ijk官方依赖,如下: implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
非常感谢
如果是本地引入的就使用我之前编译好的全平台so文件 链接: https://pan.baidu.com/s/17SNkfY-iEa9f-GeC8Jz_uQ 提取码: gbrw 如果是远程引入的,使用ijk官方依赖,如下: implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
分享过期了啊
如果是本地引入的就使用我之前编译好的全平台so文件 链接: https://pan.baidu.com/s/17SNkfY-iEa9f-GeC8Jz_uQ 提取码: gbrw 如果是远程引入的,使用ijk官方依赖,如下: implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8' 分享过期了,能否再分享一下
PlayerLoader.class
public static Object getDecoderInstance(int planId){ Object instance = null; try{ Class clz = getSDKClass(PlayerConfig.getPlan(planId).getClassPath()); if(clz!=null){ Constructor constructor = getConstructor(clz); if(constructor!=null){ instance = constructor.newInstance(); } } }catch (Exception e){ e.printStackTrace(); } return instance; }
Class clz = getSDKClass(PlayerConfig.getPlan(planId).getClassPath()); 会抛异常 XML 里的BaseVideoView无法获得实例 inflater 抛异常 使用 ExoPlayer 没有问题非常感谢