当前位置: 首页 > 知识库问答 >
问题:

在Android WebRTC应用程序中使用DataChannel

段超
2023-03-14

由于Android WebRTC客户端示例中的突破性变化,我正在寻找代码示例,它展示了如何在Android中添加和使用DataChannel。我只需要发送“Hello Worlds”通过2个Android设备之间的数据通道。以下是旧代码:

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

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

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

共有1个答案

景宏盛
2023-03-14

我在一个带有旧版本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());
@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());
    }
}
public void sendData(final String data) {

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


}

祝你好运

 类似资料:
  • 我试图理解我们什么时候需要使用这个应用程序。在我们的node Express中使用 当我在网上搜索时,我在reddit上偶然发现了这个答案,它说明了应用程序之间的区别。获取和应用程序。使用 在此基础上,我总结了以下几点。 充当超级路由或中间件?这意味着它在? 此外,如果有人能添加更多关于app.use.的信息/练习,我将不胜感激

  • 在99%的情况下,当SQL server返回意外错误或文件系统中缺少文件时,我不能做任何合理的事情,我只想记录这种情况并将错误返回给用户。所以我看不出有什么理由应该返回“err”手动展开堆栈,实际上我会丢失stacktrace和上下文,并且更难找到错误的原因。 有没有什么我错过了,所以这种方法不会很好地工作?似乎大多数Go文章都建议不要使用panic/recover,但我不明白为什么。它看起来非常

  • 我尝试在JAVA代码中调用MessageBoxA函数。以下方法有什么问题,以至于我的程序抛出了很多错误? 1-st: run:线程“main”java.lang.ClassFormatError:java.lang.ClassLoader的类文件加载/库/MessageBox中的本机或抽象方法中的代码属性。java.lang.ClassLoader.defineClass(ClassLoader.

  • 问题内容: 因此,我正在使用C#开发一个应用程序以从Web读取一些信息,但这是一个Windows窗体应用程序。我得到一个JSON字符串,我需要从中获取一些信息。我知道有一个用于C#Web应用程序的库,但是如何在Windows窗体应用程序中使用呢? 问题答案: 那里有许多JSON库。您可以考虑以下三个建议: Json.NET ,一个相当流行的JSON(反序列化)库。 ****根据 ServiceSt

  • 问题内容: 我正在寻找在 独立的(桌面/秋千)* 应用程序中使用 Spring的 示例或教程,我进行了很多搜索,但找不到有用的东西,所有示例和教程均适用于Web应用程序,请告知。 * 问题答案: 使用maven创建独立应用程序,如下所示: 使用Maven创建独立的应用程序 将applicationContext放在类路径中,并按如下所示将其加载到主类中: 在此处查看全文: http://www.d

  • 我是kubernetes的新手,需要在openshift平台上使用k8s confimap将springboot应用程序的属性文件外部化。我已将属性文件保存在git repo中,作为“greeter.message=Spring Bootmyapplication.properties已在库伯内特斯上挂载为卷!”并使用“oc create confimap myconfig--from-file=