首页 > 解决方案 > WebRTC Android 视频聊天应用,无法让一台设备响另一台设备

问题描述

这可能听起来很傻,但我一直在寻找如何做到这一点很长时间,而我得到的只是更加困惑:/我制作了一个 webRTC 视频聊天应用程序,它工作得很好,我现在需要的是如何在另一个想要呼叫第一个时从另一个Android设备响铃,我的意思是直到现在我必须在两个设备上输入相同的房间名称才能进行视频通话,这实际上并不实用生活其他对等方或设备用户如何知道有人想给他打电话,我已经阅读了关于 SIP 的信息,但似乎不是我想要的,请帮忙。

标签: androidwebrtc

解决方案


WebRTC负责PeerConnection不响设备和处理用户。它是您自己的数据,您需要自己处理。

那就是SignalingServer参加聚会的地方。一旦您createOffer()从 auserId(lets say id is 2)发送到带有目标 userSocketId 的 Singnalling 服务器(这里我将 userId 映射到 SocketId,您也可以映射其他一些字段)。

如果目标 Socket 已注册,它将立即获得带有呼叫者信息的来电请求,您在packet. 然后您可以响铃设备。
看到我不能在这里解释整个功能,但你应该明白一件事你将不得不利用Signalling server两个设备之间的文本数据共享。

基本上,您需要拥有ID要调用的对象,然后只有信令服务器才会在接收端发出特定数据。因此,您需要一个保存所有用户信息的云数据库。

您可以按照此处提到的示例进行操作。如果您熟悉 java,则本示例中的 使用很容易理解和 修改signalling serverNODE.JS

编辑:-如果您正在寻找应该开始的点RING。好吧,只要您收到一个Offer并打开您的呼叫 UI(活动),它就会响起。

记住一件事ICECandiates不应该丢失,所以在发送列表之前在双方之间使用适当的握手,ICECandiates因为这是设置的基础PeerConnection

 public void startCallNotification() {
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
    ringtone  = RingtoneManager.getRingtone(this, notification);
    ringtone.play();
    vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
    long[] vibrationCycle = {0, 1000, 1000};
    if (vibrator.hasVibrator()) {
        vibrator.vibrate(vibrationCycle, 1);
    }
}

每当您收到报价时,只需调用上述方法即可。显然,您需要处理其他一些情况,例如呼叫者端的互联网丢失和连接重置,等待 ICECandidates。

WebRTC如果您首先了解建筑,那么事情将是生死攸关的。所以我谦虚地建议先阅读结构。您可以从 ThisThis或 上的类似博客开始WEBRTC


推荐阅读