我在一个带有旧版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());
}
}
我将onReceivedDataevents添加到PeerConnectionEvents接口,所有事件都在CallActivity中实现,因此我处理从那里接收的数据.
要从CallActivity发送数据:
public void sendData(final String data) {
ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
peerConnectionClient.getPCDataChannel().send(new DataChannel.Buffer(buffer, false));
}
我只是快速查看了新的类并对我的代码进行了一些细微的修改,我希望它能为你工作而不再需要更改.
祝好运