在Android WebRTC应用程序中使用DataChannel

アレッ*_*ックス 4 java android webrtc

由于Android WebRTC客户端示例中的重大变化,我正在寻找代码示例,该示例演示如何在Android中添加和使用DataChannel.我需要通过DataChannel在2个Android设备之间发送"Hello Worlds".这是旧代码:

https://chromium.googlesource.com/external/webrtc/stable/talk/+/master/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java#177

它使用了新版本中不存在的一些类和接口.

那么我如何才能将DataChannel的支持添加到我的Android WebRTC应用程序中,通过它发送和接收文本?

Guy*_*y S 7

我在一个带有旧版webrtc的项目中添加了DataChannel.我查看了最新的类,似乎方法和回调仍然存在,所以希望它对你有用.

变更为PeerConnectionClient:

在创建DataChannel createPeerConnectionInternal后isInitiator = false;:

DataChannel.Init dcInit = new DataChannel.Init();
dcInit.id = 1;
dataChannel = pc.createDataChannel("1", dcInit);;
dataChannel.registerObserver(new DcObserver());
Run Code Online (Sandbox Code Playgroud)

变更为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());
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

添加频道观察者:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我onReceivedData向PeerConnectionEvents接口添加了事件,并且所有事件都在CallActivity中实现,因此我从那里处理在通道上接收的数据.

要从CallActivity发送数据:

public void sendData(final String data) {

    ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
    peerConnectionClient.getPCDataChannel().send(new DataChannel.Buffer(buffer, false));


}
Run Code Online (Sandbox Code Playgroud)

我只是快速查看了新的类并对我的代码进行了一些细微的修改,我希望它能为你工作而不再需要更改.

祝好运