gpt4 book ai didi

android - WebRTC onMessage() 不会在 Android 上触发

转载 作者:行者123 更新时间:2023-11-30 02:13:51 24 4
gpt4 key购买 nike

我尝试在 Android 上实现数据通道。我使用数据通道成功地将数据从 android 发送到 web。

但是,每当我尝试将数据从网络发送到 android 时,android 不会接收到数据并且永远不会触发 onMessage()。

我不明白为什么会这样。以下是我如何实现 DataChannel.Observer。

private class DcObserver implements DataChannel.Observer {
// removed other overrided messages for clarity
@Override
public void onMessage(DataChannel.Buffer buffer) {
Toast.makeText(getApplicationContext(),
"Some Data has been received", Toast.LENGTH_SHORT)
.show();
Log.d("Data", "Some Data has been received");
}
}

我为每个 PeerConnection 对象创建对象。我有这个包含 PeerConnection 对象的类。

private class FilePeer implements SdpObserver {
private PeerConnection pc;
private DataChannel dc;
// removed other overrided methods for clarity
public FilePeer() {
PcObserver pcObserver = new PcObserver();

pc = factory.createPeerConnection(RTCConfig.getIceServer(),
RTCConfig.getMediaConstraints(), pcObserver);

dc = pc.createDataChannel("sendDataChannel", new DataChannel.Init());

//DcObserver dcObserver = new DcObserver();

//dc.registerObserver(dcObserver); // This one crashes the app, therefore, getting the datachannel using onDataChannel
}
}

这就是 PcObserver 类的样子。

private class PcObserver implements PeerConnection.Observer{

@Override
public void onDataChannel(final DataChannel dataChannel) {

runOnUiThread(new Runnable() {
public void run() {
peer.dc = dataChannel;

DcObserver dcObserver = new DcObserver();

peer.dc.registerObserver(dcObserver);

//dataChannel.registerObserver(dcObserver);
}
});
}
// other methods are removed for clarity
}

我想我做错了 peer.dc.registerObserver(dcObserver); 但我不知道是什么。

最佳答案

我在 webrtc 组上找到了这个问题的解决方案。

我需要保留对观察者的引用,以确保它不会在 DataChannel 回调时被销毁。

还有一件事,我们需要做的是删除 onDataChannel(); 中的 peer.dc = dataChannel;

下面的代码现在对我来说工作正常:

    public void onDataChannel(final DataChannel dataChannel) {
final DataChannel dc = dataChannel;
runOnUiThread(new Runnable() {
public void run() {

DcObserver dcObserver = new DcObserver();

peer.dc.registerObserver(dcObserver);

}
});


}

关于android - WebRTC onMessage() 不会在 Android 上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29708936/

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