onIceCandidate 在 setRemoteDescription 之后永远不会调用 - webrtc - Android

2023-12-05

我按照一些流程解释了如何在 webrtc 中进行连接。但我被阻止了: 获得 sdpOffer 后,我想调用 setRemoteDescription() 并且有一个 onIceCandidate 回调。但我没有这个回调。 如果您需要,我可以展示我的代码片段。

感谢您的帮助


首先,我对 Android 上的 WebRTC 不太了解,但我想它会与 Web API 非常相似。我在下面的流程中使用了标准 js。

关于 onicecandidate-trigger:

调用 onicecandidate 处理程序,当您设置本地描述时, 请参阅 MDN onicecandidate 事件。 您需要设置本地描述才能开始冰收集过程。原因之一是,收集到的冰候选者将添加到您的本地描述中,如果您没有本地描述可添加它们,则它将无法工作。

关于您的流程(也许要检查):

至于处理提供-答案-交换的过程,尝试这样做(将 A 和 B 作为具有单独 RTCPeerConnection-Objects pcA 和 pcB 的对等体),检查您的流程是否在某处不同:

  1. 首先,您应该为 A 和 B 的传入ice候选设置一个处理程序,例如signaller.on('ice', candidate => pc.addIceCandidate(candidate))
  2. 然后你应该为 A 和 B 注册你的轨道处理程序,例如pcA.ontrack = track => ... (put it as src of your video or whatever)
  3. 将您的 MediaStreamTracks 添加到连接中pcA.addTrack(aTrack)

(从A面开始...)

  1. A 通过调用生成报价offer = await pcA.createOffer()
  2. A 将生成的报价设置为本地描述await pcA.setLocalDescription(offer)
  3. A 通过信令通道发送生成的报价signaller.sendTo('B','offer', offer),现在你的冰收集过程开始了
  4. A 接收由onicecandidate-处理程序。pcA.onicecandidate = e => signaller.sendTo('B','ice', e.candidate)

(现在我们跳到B对事物的看法)

  1. B 收到报价并设置signaller.on('offer', async offer => { await pcB.setRemoteDescription(offer); // and the following steps 8 to 12 follow here })
  2. B 创建一个 sdp 答案answer = await pcB.createAnswer()
  3. B 将答案设置为本地描述await pcB.setLocalDescription(answer)
  4. 现在,B 的冰收集过程并行开始,并且应该像 7 中那样处理。
  5. B将答案发送给Asignaller.sendTo('A','answer', answer)

(回到A)

  1. A收到答复signaller.on('answer', async answer => await pcA.setRemoteDescription(answer); });
  2. 现在,呼叫应该完成,冰候选人交换并且冰状态的信号应该是stable or connected

如果这有效,请查看处理眩光,这是一个很好的来源.

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

onIceCandidate 在 setRemoteDescription 之后永远不会调用 - webrtc - Android 的相关文章

  • 导航组件重复 NavArgs 的问题

    我有一个片段 class SomeFragment private val args by navArgs
  • 与 Admob 广告单元 ID 混淆

    我跟着tutorial https developers google com admob android quick start在我的应用程序中创建广告横幅 到目前为止 这有效 我可以看到测试广告 但是 本教程指示我在两个不同的位置使用两
  • Android SoundPool 堆限制

    我正在使用 SoundPool 加载多个声音剪辑并播放它们 据我所知 它的功能 100 正确 但在 load 调用期间 我的日志中充斥着以下内容 06 09 11 30 26 110 ERROR AudioCache 23363 Heap
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • Phonegap - 如何将.txt文件保存在Android手机的根目录中

    我正在尝试使用phonegap 将 txt 文件保存在Android 手机的根目录中 我已经安装了这些插件 cordova plugin file 和 cordova plugin file transfer 在 config xml 文件
  • KitKat(及更低版本)设备上的 Android Material Design

    我将在我们学校开发一个 Android 应用程序作为一个项目 我想使用 Google 的新 Material Design 但我知道它仅适用于 Android L 设备 Jack Underwood 最近发布了名为 Today Calend
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • 已经使用 AsyncTask doInBackground 但新数据未显示

    我使用 AsyncTask 创建一个聊天室来接收消息 因此它总是检查即将到来的消息并将其显示给客户端 但代码似乎无法按我希望的方式工作 在客户端只显示所有旧数据 新数据不显示 因为当我尝试从服务器发送消息时 新数据没有显示在客户端中 我对这
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • 从 Firebase 数据库填充微调器

    public class MainActivity extends AppCompatActivity DatabaseReference reference Spinner areaSpinner ArrayList
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 应用程序未安装在 Android 模拟器上

    我正在 android Geocoder 中开发一个应用程序 当我运行该应用程序时 它会显示 2011 01 11 11 08 13 GeoTourProject 自动目标模式 使用现有模拟器 emulator 5554 运行兼容的 AVD
  • MediaCodec 创建输入表面

    我想使用 MediaCodec 将 Surface 编码为 H 264 使用 API 18 有一种方法可以通过调用 createInputSurface 然后在该表面上绘图来对表面中的内容进行编码 我在 createInputSurface
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • Android Webview 图像未加载

    我制作了一个简单的应用程序WebView 但有些图片无法加载 正确 在我的电脑上 错误 在模拟器中 Correct 错误 没有横幅 于是我用Chrome debug进行调试 发现我的代码被改变了 我不添加像noscript or style
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • SharedFlow 和 StateFlow 的主要区别

    两者有什么区别共享流 and 状态流 以及如何使用这些MVI建筑学 使用简单更好吗Flow或者这些作为状态和事件 Flow 是冷的 意味着它仅在收集数据时才发出数据 另外Flow不能保存数据 可以把它看成是水在里面流动的管道 Flow中的数

随机推荐