【发布时间】:2022-01-20 11:25:27
【问题描述】:
我正在开发一个原生 android 应用程序,它使用 webrtc,更具体地说是 DataChannel,将数据发送给另一个人。它在两部安卓手机之间工作,在这种情况下使用 ICE 滴流。
但现在我正在尝试在 Android 手机和浏览器(在本例中为我计算机中的 Chrome 实例)之间建立连接。
问题是我在 js 中使用了一个库,它不处理通过 websocket 接收到的候选人的消息,它只适用于 offer/answer 的 sdp 中已经存在的候选人,如果它们出现在另一条消息中,它们将被丢弃(我知道执行不力)。我希望能够在不摆脱这个库的情况下处理这个问题,现在浏览器到浏览器它工作得很好。
所以这是我的问题:在 android 中,当我在onIceCandidate( IceCandidate iceCandidate ) 中获得候选人后,我就通过 websocket 发送候选人。我更改了它,我没有发送它们(注释了该代码)并且我延迟通过 websocket 发送报价,仅在onIceGatheringChange( PeerConnection.IceGatheringState iceGatheringState ) 返回COMPLETE 之后发生。但即使有这样的等待,sdp 描述不包含任何有关冰候选人的内容,这与还没有候选人完全一样......还有a=ice-options:trickle renomination,我没有'不知道是谁在设置此选项或是否可以更改。
sdp 描述在创建后是否应该更改?我发现不管onCreateSuccess( SessionDescription sdp )中设置了什么,它都保持不变。
我还尝试了另一件事,将 iceCandidatePoolSize 设置为 1 以便在创建报价之前获得候选人,但这并没有改变任何事情。
我错过了什么吗? sdp真的只有等待候选人才能改变吗?还是我需要以某种方式禁用涓流?我找不到此信息。
谢谢!!
【问题讨论】: