由于Android WebRTC客户端示例中的重大变化,我正在寻找代码示例,该示例演示如何在Android中添加和使用DataChannel。我需要通过DataChannel在2个Android设备之间发送“Hello Worlds”。这是旧代码:
它使用了新版本中不存在的一些类和接口。
那么如何在我的 Android WebRTC应用程序中添加对DataChannel的支持,通过它发送和接收文本?
答案 0 :(得分:7)
我在一个带有旧版webrtc的项目中添加了DataChannel。我查看了最新的类,似乎方法和回调仍然存在,所以希望它对你有用。
对PeerConnectionClient
的更改:
在createPeerConnectionInternal
之后isInitiator = false;
创建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());
}
}
我向onReceivedData
接口添加了PeerConnectionEvents
个事件,所有事件都在CallActivity中实现,因此我处理从那里收到的数据。
从CallActivity发送数据:
public void sendData(final String data) {
ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
peerConnectionClient.getPCDataChannel().send(new DataChannel.Buffer(buffer, false));
}
我只是快速查看了新的类并对我的代码做了一些小改动,我希望它不会对你有所帮助。
祝你好运答案 1 :(得分:1)
对不起,我对Guy S的代码有疑问。
在您的代码中,createPeerConnectionInternal()和onDataChannel()中都有以下两个语句。
dataChannel.registerObserver(new DcObserver());
我认为这可能导致两次注册。这是正确的吗?
我的意思是,在打电话之前,它创建了一个dataChannal并注册了一个Observer。然后..如果有一个调用进来,onDataChannel调用,那么dataChannel指向dc并再次注册?