由于 Android WebRTC 客户端示例中的重大更改,我正在寻找显示如何在 Android 中添加和使用 DataChannel 的代码示例。我只需要在 2 个 Android 设备之间通过 DataChannel 发送“Hello Worlds”。这是旧代码:
它使用了一些在新版本中不再存在的类和接口(interface)。
那么我如何才能为我的 Android WebRTC 应用程序添加对 DataChannel 的支持,并通过它发送和接收文本?
最佳答案
我在一个使用旧版本 webrtc 的项目中添加了 DataChannel。我查看了最新的类,方法和回调似乎仍然存在,希望它对您有用。
对 PeerConnectionClient
的更改:
在 isInitiator = false;
之后,在 createPeerConnectionInternal
中创建 DataChannel:
DataChannel.Init dcInit = new DataChannel.Init();
dcInit.id = 1;
dataChannel = pc.createDataChannel("1", dcInit);;
dataChannel.registerObserver(new DcObserver());
onDataChannel
的更改:
@Override
public void onDataChannel(final DataChannel dc) {
Log.d(TAG, "onDataChannel");
executor.execute(new Runnable() {
@Override
public void run() {
dataChannel = dc;
String channelName = dataChannel.label();
dataChannel.registerObserver(new DcObserver());
}
});
}
添加 channel 观察者:
private class DcObserver implements DataChannel.Observer {
@Override
public void onMessage(final DataChannel.Buffer buffer) {
ByteBuffer data = buffer.data;
byte[] bytes = new byte[data.remaining()];
data.get(bytes);
final String command = new String(bytes);
executor.execute(new Runnable() {
public void run() {
events.onReceivedData(command);
}
});
}
@Override
public void onStateChange() {
Log.d(TAG, "DataChannel: onStateChange: " + dataChannel.state());
}
}
我将 onReceivedData
事件添加到 PeerConnectionEvents
接口(interface),所有事件都在 CallActivity 中实现,因此我从那里处理 channel 上接收到的数据。
从 CallActivity 发送数据:
public void sendData(final String data) {
ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
peerConnectionClient.getPCDataChannel().send(new DataChannel.Buffer(buffer, false));
}
我只是快速浏览了新类并对我的代码做了一些小改动,我希望它能为你工作而不需要做更多的改动。
祝你好运
关于java - 在 Android WebRTC 应用程序中使用 DataChannel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29465192/