android - 使用 Twilio JavaI420Buffer (Kotlin) 时出现 UnsatisfiedLinkError
问题描述
描述
尝试通过以下调用分配 JavaI420Buffer 时:
tvi.webrtc.JavaI420Buffer.allocate(width, height)
我收到以下错误:
java.lang.UnsatisfiedLinkError: No implementation found for java.nio.ByteBuffer tvi.webrtc.JniCommon.nativeAllocateByteBuffer(int) (tried Java_tvi_webrtc_JniCommon_nativeAllocateByteBuffer and Java_tvi_webrtc_JniCommon_nativeAllocateByteBuffer__I)
at tvi.webrtc.JniCommon.nativeAllocateByteBuffer(Native Method)
at tvi.webrtc.JavaI420Buffer.allocate(JavaI420Buffer.java:87)
at dji.ux.beta.core.widget.fpv.FPVWidget$onSurfaceTextureAvailable$yuvDataListener$1.onYuvDataReceived(FPVWidget.kt:417)
在此错误之前,我还得到:
2021-05-28 08:31:27.367 15131-15131/? I/tvi.webrtc.Logging: NativeLibrary: Loading native library: jingle_peerconnection_so
2021-05-28 08:31:27.367 15131-15131/? I/tvi.webrtc.Logging: NativeLibrary: Loading library: jingle_peerconnection_so
2021-05-28 08:31:27.369 15131-15131/? E/tvi.webrtc.Logging: NativeLibrary: Failed to load native library: jingle_peerconnection_so
2021-05-28 08:31:27.369 15131-15131/? E/tvi.webrtc.Logging: NativeLibrary: java.lang.UnsatisfiedLinkError: dlopen failed: library "libjingle_peerconnection_so.so" not found
2021-05-28 08:31:27.370 15131-15131/? E/tvi.webrtc.Logging: NativeLibrary: java.lang.UnsatisfiedLinkError: dlopen failed: library "libjingle_peerconnection_so.so" not found
奇怪的是,如果我声明使用官方 org.webrtc 库 ( implementation 'org.webrtc:google-webrtc:1.0.32006'
),那么分配字节缓冲区的本地调用会成功。
视频 Android SDK 版本
com.twilio:video-android-ktx:6.3.0
解决方案
首先,当您在 kotlin 中加载本机代码时,它应该是这样的:
companion object {
init {
System.loadLibrary("jingle_peerconnection")
}
}
在 Java 中
static {
System.loadLibrary("jingle_peerconnection")
}
其次,根据您的错误,找不到“库”libjingle_peerconnection_so.so” =>您必须在“ main -> java -> libs ”文件夹中添加相关的Android架构文件夹
Example : main -> java -> libs -> x86 -> .so file
推荐阅读
- azure-active-directory - 使用 AAD 为用户创建角色
- git - 命令行中的“Git add”未反映在 Visual Studio 2013 中
- python - Airflow + Cluster + Celery + SQS - Airflow Worker:“Hub”对象没有属性“_current_http_client”
- python - 当您输入变量名并希望它是一个整数以供以后计算时,如何使用输入函数?
- firebase - Firebase 用户已删除,但仍在设备上登录
- html - 如何在svg中创建一个椭圆
- c++ - 如何使用 uncrustify 缩进连续的函数参数?
- reactjs - 酶测试嵌套组件的方法
- javascript - Ext JS 6 经典图表 - 截断轴
- arrays - Node 6.10 JavaScript Map vs Slice 底层差异