gpt4 book ai didi

java - 由于 PeerConnection Observer 中的 onTrack 方法导致 WebRTC 崩溃 AbstractMethodError

转载 作者:行者123 更新时间:2023-12-01 17:47:26 26 4
gpt4 key购买 nike

我使用英特尔 webRtc。连接成功,但在开始调用并单击发布按钮时出现此错误。

java.lang.AbstractMethodError: abstract method "voidorg.webrtc.PeerConnection$Observer.onTrack(org.webrtc.RtpTransceiver)"

E/rtc: Fatal error in:gen/sdk/android/generated_base_jni/jni/../../../../../../../third_party/webrtc/sdk/android/src/jni/jni_generator_helper.h,line 38A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 16744 (signaling_threa)

最佳答案

我对这个问题有了初步的了解。

首先,我们应该看一下Google的WebRTC源代码:

public interface Observer {
@CalledByNative("Observer")
void onSignalingChange(PeerConnection.SignalingState var1);

@CalledByNative("Observer")
void onIceConnectionChange(PeerConnection.IceConnectionState var1);

@CalledByNative("Observer")
void onIceConnectionReceivingChange(boolean var1);

@CalledByNative("Observer")
void onIceGatheringChange(PeerConnection.IceGatheringState var1);

@CalledByNative("Observer")
void onIceCandidate(IceCandidate var1);

@CalledByNative("Observer")
void onIceCandidatesRemoved(IceCandidate[] var1);

@CalledByNative("Observer")
void onAddStream(MediaStream var1);

@CalledByNative("Observer")
void onRemoveStream(MediaStream var1);

@CalledByNative("Observer")
void onDataChannel(DataChannel var1);

@CalledByNative("Observer")
void onRenegotiationNeeded();

@CalledByNative("Observer")
void onAddTrack(RtpReceiver var1, MediaStream[] var2);

@CalledByNative("Observer")
default void onTrack(RtpTransceiver transceiver) {
}
}

如果您注意到“onTrack”是界面中唯一具有默认方法实现的方法。它后面有“{}”而不是“;”。这个称为“默认方法”的功能已添加到 Java 8 中的 Java 接口(interface)中。

现在我们收到的错误“AbstractMethodError”可能是因为 JNI 代码不支持 Android 8,并且期望客户端代码实现接口(interface)中的所有方法...

我最初解决了这个问题,并通过添加该方法的实现来恢复对我的应用程序的工作 WebRTC 调用:

private class Peer implements SdpObserver, PeerConnection.Observer {
...

@Override
public void onAddStream(MediaStream mediaStream) {}

@Override
public void onTrack(RtpTransceiver transceiver) {}
}

但是,我认为真正的解决方案是确保项目中的所有代码都使用 Java 1.8:

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

如果有人能更多地解释为什么会发生这种情况,我将不胜感激。

编辑:

这个问题也可以通过更改 Gradle 版本来解决,例如从 3.5.2 更改为 3.4.1,但其他组合也可能有效。

关于java - 由于 PeerConnection Observer 中的 onTrack 方法导致 WebRTC 崩溃 AbstractMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59932333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com