引用vitamio框架提示libffmpeg.so、libstlport_shared.so无法找到的错误

一波三百六十折...问题似乎不止一个,而且总觉得自己已经完美解决了然而没有,所以文章可读性极差,我把解决的方案扔在一个“解决方案”的一级标题下面,读者可以直接点目录跳转。


一开始写博客的时候,就其实有个疑惑,

https://blog.csdn.net/nishigesb123/article/details/89554881

官网新手入门

提供的项目地址

和下载链接导向的地址有出入...

我也没搞清楚区别是什么,似乎后者的版本更新一点?

所以贴了两个地址,另一个地址写了个其他,

而且官网也很奇怪

如果访问的是带en后缀的英文官网

https://www.vitamio.org/en/

Download显示的最新版和中文官网有出入,而且下载是直链,没有导向GitHub

 

而这个https://github.com/yixia/VitamioBundle项目地址导向的是英文官网

 

反正最后就是...有一大堆版本!!!

版本变了 每个版本的so也大不相同,估计老版本的so已经不行了?(我猜太老了?现在的CPU更新太快,所以不兼容?)

 

NDK暂时还没有加入学习计划,自己生成又生成不来,只能用人家提供的,结果就是各种错,用不起来,没办法,吃人嘴软拿人手短。

果然啥都是靠自己靠谱,得把这块的进程提一提了。


解决方案

两个项目地址的东西,建议都下载一份!

但是应该去使用下面这个项目的代码!

https://github.com/yixia/VitamioBundleStudio

?这个链接的我反正至今还是各种错误循环,可能是水平不够...遗漏了什么

https://github.com/yixia/VitamioBundle

然后就是这样,实际上问题已经基本解决了!!!(我都不知道我之前在努力些什么....)

然后要注意的

  • 添加下载来的项目为自己项目的Android Library
  • 记得声明权限
  • gradle里添加依赖  implementation project(path: ':vitamio')

最后!!!

https://github.com/yixia/VitamioBundleStudio

项目地址下载的没有checkVitamioLibs!!!

没测试不加?的是不是也能正常运行

if (!LibsChecker.checkVitamioLibs(this))
    return;

我的解决是从那个有checkVitamioLibs的项目里拷一份....所以一开始建议两份都下载...

 

我这里直接把checkVitamioLibs.java的源码复制一下,有需要的可以直接复制,就不用下载另一个版本的项目了。毕竟github下载速度感人...

/*
 * Copyright (C) 2013 YIXIA.COM
 *
 * 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 io.vov.vitamio;

import android.app.Activity;
import android.content.Intent;

/**
 * LibsChecker is a wrapper of {@link Vitamio}, it helps to initialize Vitamio
 * easily.
 * <p/>
 * <pre>
 * public void onCreate(Bundle b) {
 * 	super.onCreate(b);
 * 	if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this))
 * 		return;
 *
 * 	// Code using Vitamio should go below {@link LibsChecker#checkVitamioLibs}
 * }
 * </pre>
 */
public final class LibsChecker {
  public static final String FROM_ME = "fromVitamioInitActivity";

  public static final boolean checkVitamioLibs(Activity ctx) {
    if (!Vitamio.isInitialized(ctx) && !ctx.getIntent().getBooleanExtra(FROM_ME, false)) {
      Intent i = new Intent();
      i.setClassName(Vitamio.getVitamioPackage(), "io.vov.vitamio.activity.InitActivity");
      i.putExtras(ctx.getIntent());
      i.setData(ctx.getIntent().getData());
      i.putExtra("package", ctx.getPackageName());
      i.putExtra("className", ctx.getClass().getName());
      ctx.startActivity(i);
      ctx.finish();
      return false;
    }
    return true;
  }
}

 

 

 

 

 

 

 

 

 

 

 

 


下面是一开始写的博客,但是疯狂操作了一堆,也没有解决问题.....不过用还是有用哒

 

学习使用Vitamio框架的时候遇到了图示错误

Process: com.example.a4_26vitamio, PID: 4418
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/base.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_resources_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.example.a4_26vitamio-GEE3uDjgk3TUN4h5_s8taA==/lib/x86, /system/lib, /vendor/lib]]] couldn't find "libvinit.so"
        at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
        at java.lang.System.loadLibrary(System.java:1657)
        at io.vov.vitamio.Vitamio.<clinit>(Vitamio.java:258)
        at io.vov.vitamio.Vitamio.isInitialized(Unknown Source:0)
        at io.vov.vitamio.LibsChecker.checkVitamioLibs(LibsChecker.java:40)
        at com.example.a4_26vitamio.MainActivity.onCreate(MainActivity.java:22)
        at android.app.Activity.performCreate(Activity.java:6975)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)


很长很长一串,拉到最后有个couldn't find "libvinit.so"

反正就是这货找不到是把,这货有点印象,我感觉明明已经扔进去了,查了一下

看到一篇博客

出处:https://blog.csdn.net/fang410103/article/details/83012043

 

好吧,竟然还得建一个jniLibs才行吗...


操作完了结果还是报错emmm

2019-04-26 21:38:31.713 7564-7564/com.example.a4_26vitamio E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.a4_26vitamio, PID: 7564
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.a4_26vitamio/com.example.a4_26vitamio.MainActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.a4_26vitamio/io.vov.vitamio.activity.InitActivity}; have you declared this activity in your AndroidManifest.xml?
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.a4_26vitamio/io.vov.vitamio.activity.InitActivity}; have you declared this activity in your AndroidManifest.xml?
        at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1932)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1615)
        at android.app.Activity.startActivityForResult(Activity.java:4472)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
        at android.app.Activity.startActivityForResult(Activity.java:4430)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
        at android.app.Activity.startActivity(Activity.java:4791)
        at android.app.Activity.startActivity(Activity.java:4759)
        at io.vov.vitamio.LibsChecker.checkVitamioLibs(LibsChecker.java:47)
        at com.example.a4_26vitamio.MainActivity.onCreate(MainActivity.java:22)
        at android.app.Activity.performCreate(Activity.java:6975)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
        at android.os.Handler.dispatchMessage(Handler.java:105) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 



 

好吧 至少有变化

最后有一行,啥,还需要啥声明的吗...

emm拍了拍脑袋

好像还真有...给忘了 望天

        <activity
                android:name="io.vov.vitamio.activity.InitActivity"
                android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
                android:launchMode="singleTop"
                android:theme="@android:style/Theme.NoTitleBar"
                android:windowSoftInputMode="stateAlwaysHidden"/>

结果这个改完又跳回第一个错误了...还是不行  但是短了很多

2019-04-26 21:53:33.018 9238-9238/com.example.a4_26vitamio E/Vitamio[Player]: Native libs libffmpeg.so not exists!
2019-04-26 21:53:33.337 9238-9264/com.example.a4_26vitamio E/Vitamio[Player]: Native libs libffmpeg.so not exists!
2019-04-26 21:53:34.055 9238-9238/com.example.a4_26vitamio E/Vitamio[Player]: Native libs libffmpeg.so not exists!
2019-04-26 21:53:34.465 9238-9238/com.example.a4_26vitamio E/Vitamio[Player]: Error loading libs
    java.lang.UnsatisfiedLinkError: dlopen failed: library "/data/user/0/com.example.a4_26vitamio/libs/libstlport_shared.so" not found
        at java.lang.Runtime.load0(Runtime.java:928)
        at java.lang.System.load(System.java:1621)
        at io.vov.vitamio.MediaPlayer.<clinit>(MediaPlayer.java:245)
        at com.example.a4_26vitamio.MainActivity.initMediaPlay(MainActivity.java:30)
        at com.example.a4_26vitamio.MainActivity.onCreate(MainActivity.java:26)
        at android.app.Activity.performCreate(Activity.java:6975)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
2019-04-26 21:53:34.466 9238-9238/com.example.a4_26vitamio E/zygote: No implementation found for void io.vov.vitamio.MediaPlayer.unloadOMX_native() (tried Java_io_vov_vitamio_MediaPlayer_unloadOMX_1native and Java_io_vov_vitamio_MediaPlayer_unloadOMX_1native__)
2019-04-26 21:53:34.466 9238-9238/com.example.a4_26vitamio E/Vitamio[Player]: unloadOMX failed java.lang.UnsatisfiedLinkError: No implementation found for void io.vov.vitamio.MediaPlayer.unloadOMX_native() (tried Java_io_vov_vitamio_MediaPlayer_unloadOMX_1native and Java_io_vov_vitamio_MediaPlayer_unloadOMX_1native__)
2019-04-26 21:53:34.467 9238-9238/com.example.a4_26vitamio E/zygote: No implementation found for void io.vov.vitamio.MediaPlayer.native_init() (tried Java_io_vov_vitamio_MediaPlayer_native_1init and Java_io_vov_vitamio_MediaPlayer_native_1init__)
2019-04-26 21:53:34.468 9238-9238/com.example.a4_26vitamio E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.a4_26vitamio, PID: 9238
    java.lang.UnsatisfiedLinkError: No implementation found for void io.vov.vitamio.MediaPlayer.native_init() (tried Java_io_vov_vitamio_MediaPlayer_native_1init and Java_io_vov_vitamio_MediaPlayer_native_1init__)
        at io.vov.vitamio.MediaPlayer.native_init(Native Method)
        at io.vov.vitamio.MediaPlayer.<init>(MediaPlayer.java:238)
        at io.vov.vitamio.MediaPlayer.<init>(MediaPlayer.java:192)
        at com.example.a4_26vitamio.MainActivity.initMediaPlay(MainActivity.java:30)
        at com.example.a4_26vitamio.MainActivity.onCreate(MainActivity.java:26)
        at android.app.Activity.performCreate(Activity.java:6975)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
2019-04-26 21:53:40.410 9238-9247/com.example.a4_26vitamio E/zygote: No implementation found for void io.vov.vitamio.MediaPlayer.native_finalize() (tried Java_io_vov_vitamio_MediaPlayer_native_1finalize and Java_io_vov_vitamio_MediaPlayer_native_1finalize__)
2019-04-26 21:53:40.410 9238-9247/com.example.a4_26vitamio E/System: Uncaught exception thrown by finalizer
2019-04-26 21:53:40.410 9238-9247/com.example.a4_26vitamio E/System: java.lang.UnsatisfiedLinkError: No implementation found for void io.vov.vitamio.MediaPlayer.native_finalize() (tried Java_io_vov_vitamio_MediaPlayer_native_1finalize and Java_io_vov_vitamio_MediaPlayer_native_1finalize__)
        at io.vov.vitamio.MediaPlayer.native_finalize(Native Method)
        at io.vov.vitamio.MediaPlayer.finalize(MediaPlayer.java:947)
        at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:250)
        at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:237)
        at java.lang.Daemons$Daemon.run(Daemons.java:103)
        at java.lang.Thread.run(Thread.java:764)
 


不是说只认识jniLibs吗?为啥又去libs找啊喂,索性我就libs里也扔了几份,结果还是不行。

找到了下面的博客

出处:https://blog.csdn.net/dufangyu1990/article/details/51188512

 

于是我也删一点文件夹试试,好吧,结果还是不行

试着按照提示删的只剩下一个和自己模拟器搭的版本,

查看自己模拟器/手机CPU的架构信息,可以在终端输入如下指令查看,也可以直接百度查cpu型号

  • adb shell  
  • cat  /proc/cpuinfo

模拟器的话,直接在avd manager里看就好

 

结果

然后把文件名改了都说找不到。

还是不行!!!!

绝望中


最后Po一段官方文档的Vitamio错误汇总,点对应标题可以返回官网链接

 

错误汇总

Vitamio无法使用的错误 

Error loading libs
java.lang.UnsatisfiedLinkError: Library …  libstlport_shared.so not found

java.lang.UnsatisfiedLinkError: Couldn't load vinit: findLibrary returned null 

java.lang.UnsatisfiedLinkError: unloadOMX_native

Native libs libffmpeg.so not exists!

凡是此类错误,一般只有以下几种情况:
1、Vitamio只支持ARMv6+以上的CPU,如果报以上错误,说明不支持你的机器。(注意:模拟器要使用4.0以上)
2、没有调用检测解码包的代码(即没有解压解码包,Vitamio会根据当前CPU的类型自动解压相应平台的库),使用方法参照DEMO:

// 检测Vitamio是否解压解码包
if (!LibsChecker.checkVitamioLibs(this))
    return;

3、没有以Library的方式使用Vitamio,漏拷贝了VitamioBundle里面的类库或代码,例如libvinit.so、libarm.so等。
4、如果您有自己的so,请参考Vitamio的libs文件夹(armeabi、armeabi-v7a、x86)将so拷贝、新建相应的文件夹。
5、如果您是从旧版本Vitamio升级过来,尤其是早期以集成方式使用的,而现在又以Library方式使用,请删除相关的类和文件(res/raw/libarm.so、libs下面的libvinit.so、io.vov.vitamio下面相应的类文件),最后改一下当前项目的versionCode(Vitamio根据当前项目的版本自动重新解压升级)。最后可以尝试卸载之前的app重新安装。强烈建议下载最新版本,先跑通官网例子,没有问题再自己集成,最后搞不定还可以直接在官网例子上修改。
6、极少数几款设备,比如华为S8600、三星GT-S5830(CPU是ARMv6+,但是无法使用)

 


视频无法播放的错误 

avformat_open_input: I/O error

1、确保视频没有问题。先拿VLC、系统自带的播放器或者PC上的播放器,测试一下链接,确保视频是可以播放的。
2、确保调用方法没有问题。参考官方的例子,先用官网例子测试一个可以播放的链接,然后再不改动其他的代码情况下仅更改播放地址进行测试。
3、确保测试环境一致。比如拿能上网的PC测试完后拿无法上网的手机测试,那肯定不行。
4、前面都确保没有问题后最后使用VPlayer来进行测试,如果VPlayer能够播放,那Vitamio一定能播放,否则只有一种情况:不支持!

java.io.FileNotFoundException: No content provider 

这个不是错误,是正常的处理。现在播放视频是这样做的:先把 URL 当做一个 ContentProvider 来打开,如果打不开,就直接当做 URL 来打开

java.lang.SecurityException:Not allowed to bind to service Intent … VitamioService 

如果手机上安装了VPlayer并且使用了旧版本(3.0以前)的Vitamio,可能会报这个错,可以简单理解为冲突,所以后续VitamioService这个类在3.0以后就没有了,还有相关的MediaScannerService也没有了。

java.lang.NoClassDefFoundError: io.vov.vitamio.R$raw 

Vitamio 3.0默认以Android Library的方式使用,对raw的引用使用的io.vov.vitamio.R,如果不是以这种方式使用比如简单的拷贝合并就报这个错。建议以Android Library方式使用,便于后续升级。如果仍然坚持要拷贝合并,可以通过在本工程新建包名io.vov.vitamio,新建R类来实现:

package io.vov.vitamio;

public class R {
    public static final class raw {
        public static final int libarm = com.nmbb.oplayer.R.raw.libarm;
        public static final int pub = com.nmbb.oplayer.R.raw.pub;
    }
}


Fatal signal 11 (SIGSEGV) at 0xb77ea280 (code=1), thread 1243 (ov.vitamio.demo)

类似Fatal signal崩溃的问题,一般是MediaPlayer的生命周期没有使用正确。比如还没有prepare就去调用isPlaying等其他方法都会导致这个问题,使用系统的MediaPlayer也会抛出IllegalStateException的异常。建议去Android官网看文档:http://developer.android.com/reference/android/media/MediaPlayer.html。尤其是MediaPlayer的状态图。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云无心鸟知还

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值