首页 > 解决方案 > 使用 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

标签: androidkotlinjava-native-interfacebuffertwilio-video

解决方案


首先,当您在 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

推荐阅读