在 Android WebRTC 应用程序中使用 DataChannel
Working with DataChannel in Android WebRTC application
由于 Android WebRTC 客户端示例中的重大更改,我正在寻找显示如何在 Android 中添加和使用 DataChannel 的代码示例。我只需要通过 2 Android 设备之间的 DataChannel 发送 "Hello Worlds"。这是旧代码:
它使用了新版本中不再存在的一些类和接口。
那么我如何才能将对 DataChannel 的支持添加到我的 Android WebRTC 应用程序中,通过它发送和接收文本?
我在一个使用旧版本 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());
}
});
}
添加频道观察者:
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());
}
}
我向 PeerConnectionEvents
接口添加了 onReceivedData
事件,所有事件都在 CallActivity 中实现,因此我从那里处理通道上接收到的数据。
发送数据,来自CallActivity:
public void sendData(final String data) {
ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
peerConnectionClient.getPCDataChannel().send(new DataChannel.Buffer(buffer, false));
}
我只是快速浏览了新的 类 并对我的代码进行了一些小改动,我希望它不会对你有用。
祝你好运
很抱歉我对 Guy S 的代码有疑问
在您的代码中,createPeerConnectionInternal() 和 onDataChannel() 中都有以下两个语句。
dataChannel.registerObserver(new DcObserver());
我认为这可能会导致重复注册。正确吗??
我的意思是,在调用之前,它创建了一个dataChannal并注册了一个Observer。然后..如果有电话进来,调用了onDataChannel,然后dataChannel指向dc并再次注册?
由于 Android WebRTC 客户端示例中的重大更改,我正在寻找显示如何在 Android 中添加和使用 DataChannel 的代码示例。我只需要通过 2 Android 设备之间的 DataChannel 发送 "Hello Worlds"。这是旧代码:
它使用了新版本中不再存在的一些类和接口。
那么我如何才能将对 DataChannel 的支持添加到我的 Android WebRTC 应用程序中,通过它发送和接收文本?
我在一个使用旧版本 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());
}
});
}
添加频道观察者:
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());
}
}
我向 PeerConnectionEvents
接口添加了 onReceivedData
事件,所有事件都在 CallActivity 中实现,因此我从那里处理通道上接收到的数据。
发送数据,来自CallActivity:
public void sendData(final String data) {
ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
peerConnectionClient.getPCDataChannel().send(new DataChannel.Buffer(buffer, false));
}
我只是快速浏览了新的 类 并对我的代码进行了一些小改动,我希望它不会对你有用。
祝你好运
很抱歉我对 Guy S 的代码有疑问
在您的代码中,createPeerConnectionInternal() 和 onDataChannel() 中都有以下两个语句。
dataChannel.registerObserver(new DcObserver());
我认为这可能会导致重复注册。正确吗??
我的意思是,在调用之前,它创建了一个dataChannal并注册了一个Observer。然后..如果有电话进来,调用了onDataChannel,然后dataChannel指向dc并再次注册?