new PeerConnectionFactory() 在 android 上出现错误

2024-01-24

我正在尝试在 Android 上实现 WebRTC DataChannel。我想创建一个简单的对等连接对象,它将打开 DataChannel 以使用 WebRTC 通过网络发送数据。当我尝试创建 PeerConnection 对象时出现错误。我了解到我们使用工厂来创建对等连接对象factory.createPeerConnection().

为此,我必须首先创建 PeerConnectionFactory 对象。之后,我可以使用它来创建 PeerConnection 对象。我收到错误Could not find method android.media.MediaCodec.setParameters and Fatal Signal 11 (SIGSEGV) at 0x00000000 (code=1)当我尝试创建 PeerConnectionFactory 对象时。我还尝试了以下代码PeerConnectionFactory.initializeAndroidGlobals(this, false, false, false);这就是我正在尝试做的:

PeerConnectionFactory factory = new PeerConnectionFactory();

peer = new Peer();

这就是我的 Peer 对象的样子:

public class Peer implements SdpObserver, PeerConnection.Observer, DataChannel.Observer {

    private PeerConnection pc;
    private DataChannel dc;

    public Peer() {

      this.pc = factory.createPeerConnection(RTCConfig.getIceServer(), 
              RTCConfig.getMediaConstraints(), this);

      dc = this.pc.createDataChannel("sendDataChannel", new DataChannel.Init());

    }

    @Override
    public void onAddStream(MediaStream arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onDataChannel(DataChannel dataChannel) {
        this.dc = dataChannel;

    }

    @Override
    public void onIceCandidate(final IceCandidate candidate) {
        try {
            JSONObject payload = new JSONObject();
            payload.put("type", "candidate");
            payload.put("label", candidate.sdpMLineIndex);
            payload.put("id", candidate.sdpMid);
            payload.put("candidate", candidate.sdp);

            sendSocketMessageDataChannel(payload.toString());


          } catch (JSONException e) {
            e.printStackTrace();
          }

    }

    @Override
    public void onIceConnectionChange(IceConnectionState iceConnectionState) {

    }

    @Override
    public void onIceGatheringChange(IceGatheringState arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onRemoveStream(MediaStream arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onRenegotiationNeeded() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onSignalingChange(SignalingState arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onCreateFailure(String msg) {
        Toast.makeText(getApplicationContext(),
                msg, Toast.LENGTH_SHORT)
                .show();

    }

    @Override
    public void onCreateSuccess(SessionDescription sdp) {
        try {

            JSONObject payload = new JSONObject();
            payload.put("type", sdp.type.canonicalForm());
            payload.put("sdp", sdp.description);

            sendSocketMessageDataChannel(payload.toString());

            pc.setLocalDescription(FilePeer.this, sdp);

          } catch (JSONException e) {
            e.printStackTrace();
          }

    }

    @Override
    public void onSetFailure(String arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onSetSuccess() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onMessage(Buffer data) {
        Log.w("FILE", data.toString());

    }

    @Override
    public void onStateChange() {

        Toast.makeText(getApplicationContext(),
                "State Got Changed", Toast.LENGTH_SHORT)
                .show();

        /*
         byte[] bytes = new byte[10];

         bytes[0] = 0;
         bytes[1] = 1;
         bytes[2] = 2;
         bytes[3] = 3;
         bytes[4] = 4;
         bytes[5] = 5;
         bytes[6] = 6;
         bytes[7] = 7;
         bytes[8] = 8;
         bytes[9] = 9;

         ByteBuffer buf = ByteBuffer.wrap(bytes);



         Buffer b = new Buffer(buf, true);

         dc.send(b);
        */
    }

}

有人可以向我指出在 Android 上实现 DataChannel 的任何示例源代码吗?如果我没有以正确的方式做这件事,也请告诉我。我找不到 Android Native WebRTC 的文档来说明如何做到这一点。我正在尝试实现我从在网络上使用 WebRTC 中学到的一切。

如果我的问题不清楚,请告诉我。


PeerConnectionFactory 不再需要初始化音频和视频引擎即可启用。

PeerConnectionFactory.initializeAndroidGlobals(this, false, false, false);

现在您将能够禁用音频和视频并使用数据通道

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

new PeerConnectionFactory() 在 android 上出现错误 的相关文章

随机推荐

  • 通过 nginx 访问时,php 在 /tmp/systemd-private-nABCDE/tmp 中有自己的 /tmp

    我发现奇怪的行为php and tmp文件夹 Php 在使用时使用另一个文件夹 tmp PHP 5 6 7 nginx php fpm 我以两种方式执行相同的脚本 通过浏览器和通过 shell 但是当通过浏览器启动时 文件不是真实的 tmp
  • Swift 结构内存泄漏

    我们正在尝试尽可能使用 Swift 结构 我们还使用 RxSwift 它具有采用闭包的方法 当我们有一个结构体创建一个引用的闭包时self 这会创建一个强引用循环 https developer apple com library ios
  • 在TestNG中使用@BeforeMethod时有没有办法获取方法元数据?

    我正在使用 TestNG 并有一套测试 我想在每个需要有关该方法的信息的测试方法之前执行一个操作 举一个简单的例子 假设我想在执行之前打印方法的名称 我可以编写一个带有注释的方法 BeforeMethod 如何将参数注入该方法 看看依赖注入
  • XPath:通过纯文本查找 HTML 元素

    请注意 这个问题是一个更精致的版本上一个问题 https stackoverflow com q 18655765 1839209 我正在寻找一个 XPath 它可以让我在 HTML 文档中查找具有给定纯文本的元素 例如 假设我有以下 HT
  • Python 3+ 在函数调用中导入包?

    随着时间的推移 我已经为各种事情建立了一系列实用函数 我想将它们全部放在包中 其结构比仅包含所有功能的单个文件要多一些 其中一些函数是在假设已导入某些包的情况下编写的 例如我有一些numpy and pandas假设类似的效用函数impor
  • FPDF - 在放置之前确定 MultiCell 的高度?

    基本问题 在将 MultiCell 放入文档之前是否可以确定其高度 原因 我的任务是创建 PDF 版本的表单 这种形式允许文本输入 并且结果长度可变 一个人可以不输入任何内容 另一个人可以写几段 当权者 不希望这段文字在页面之间中断 目前
  • 何时在 django ORM 中使用或不使用 iterator()

    这是来自关于查询集的 django 文档iterator method https docs djangoproject com en dev ref models querysets django db models query Quer
  • java:Java 15 中包 jdk.incubator.foreign 不可见错误

    所以我下载了 JDK 15 OpenJDK 在Intellij中运行以下代码 import jdk incubator foreign MemorySegment The problem seems to occur here in thi
  • 将 std::multimap 转换为 std::priority_queue

    我有一个使用编写的函数std multimap正是因为std multimap 经过分析 我意识到我只使用了std multimap as a heap 所以我尝试用std priority queue它只允许堆操作 希望这种用法会更快 当
  • ASP.NET MVC - 如何让用户确认删除

    他 我有这个页面 其中表格中的每个项目旁边都有复选框 并且希望允许用户选择其中的一些项目并按我的删除按钮 我只是无法想出 jquery 来制作确认窗口并仅在按下 是 时才提交 这是我的页面 table width 100 cellpaddi
  • Fortran 77 中的字符串数组

    我有一个关于 Fortran 77 的问题 但找不到解决方案 我正在尝试存储定义如下的字符串数组 character matname 255 255 这是一个由 255 个字符串组成的数组 长度为 255 后来我从文件中读取名称列表 并像这
  • Rails 3 邮件程序不工作并且不记录任何错误

    我已经尝试了各种配置 但仍然无法在我的开发环境中从 Rails 发送电子邮件 我安装了 mailutils 以从命令行尝试此操作 它起作用了 我收到了电子邮件 当然是垃圾邮件 echo test 邮件 s 主题 电子邮件受保护 cdn cg
  • 通过 TFS 发布定义中的电子邮件批准进行持续集成

    我正在使用 Microsoft Visual Studio Team Foundation Server 版本 14 102 25423 0 作为贵公司持续集成部署的一部分 我想实现以下内容 我创建了一个发布定义 并在其下配置了两个环境 Q
  • Android意图系统背后的基本原理

    我一直在寻找对此的解释 但找不到 我在一次工作面试中被问到为什么 Android 不允许通过意图传递任何类型 我很清楚可能性 序列化 实现 Parcelable 接口 捆绑等 我想了解拒绝有意传递自定义类型 对象的决定背后的基本原理 我被引
  • 返回之前测试属性是否不为 Null

    我有以下财产 public MyType MyProperty get set 我想更改此属性 以便如果值为空 它将首先填充该值 然后返回它 但是without使用私有成员变量 例如 如果我这样做 public MyType MyPrope
  • Sympy:指数相乘而不是总和指数相乘

    我正在搜索如何告诉 SymPy 使用指数乘法而不是总和的指数 也就是说 它当前给我 exp a b 我想要得到 exp a exp b 一定有一个相当简单的方法 但我似乎找不到 你可以使用expand http docs sympy org
  • 具有可变单元格大小的 UICollectionView

    我在 UICollectionView 中单元格的大小方面遇到了一些困难 在android中 你可以轻松地 包裹 cell的大小 就像在 iOS 中一样 您有一个函数调用 GetCell 您可以决定它的大小 iOS 中的区别在于 在 UIC
  • 逐行检查列中是否存在值并逐行更新新列

    在 R 中 如何检查每行列表中的任何值 例如 2 3 或 4 是否出现在三列中的任何一列中 然后更改第四列中的该行 假设我有一个 df A B C D 1 1 1 2 1 1 3 1 1 我想写 没有for循环 如果第 n 行 A 列或 B
  • 查找给定纬度和经度坐标的州

    我有一组 900 个纬度和经度坐标 我需要一个相对简单的方法来查找这些坐标引用的 州 如果有帮助的话 数据是excel格式的 谷歌提供了一个地理编码 https developers google com maps documentatio
  • new PeerConnectionFactory() 在 android 上出现错误

    我正在尝试在 Android 上实现 WebRTC DataChannel 我想创建一个简单的对等连接对象 它将打开 DataChannel 以使用 WebRTC 通过网络发送数据 当我尝试创建 PeerConnection 对象时出现错误