首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由于WebRTC观察者中的onTrack方法而导致的PeerConnection崩溃

由于WebRTC观察者中的onTrack方法而导致的PeerConnection崩溃
EN

Stack Overflow用户
提问于 2020-01-27 13:39:07
回答 1查看 1K关注 0票数 4

我使用英特尔webRtc。连接成功,但当调用启动并单击“发布”按钮时会发生此错误。

java.lang.AbstractMethodError:抽象方法"void java.lang.AbstractMethodError“

E/rtc: gen/sdk/android/generated_base_jni/jni/../../../../../../../third_party/webrtc/sdk/android/src/jni/jni_generator_helper.h,行38A/libc中的致命错误:致命信号6 (SIGABRT),在tid 16744 (signaling_threa)中编码-6

EN

回答 1

Stack Overflow用户

发布于 2020-02-28 17:34:55

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

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

代码语言:javascript
运行
复制
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‘是interface中唯一具有默认方法实现的方法。它后面有"{}“,而不是";”。这个名为“默认方法”的特性被添加到Java 8中的Java接口中。

现在我们遇到的错误"AbstractMethodError“可能是因为JNI代码不知道Android8,并且期望客户端代码实现接口中的所有方法.

我最初解决了这个问题,并通过添加方法的实现将工作的WebRTC调用还原到我的应用程序中:

代码语言:javascript
运行
复制
private class Peer implements SdpObserver, PeerConnection.Observer {
     ...

     @Override
     public void onAddStream(MediaStream mediaStream) {}

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

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

代码语言:javascript
运行
复制
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

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

编辑:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59932333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档