Skip to content

Use Ring Ice Servers #1282

@dgreif

Description

@dgreif

Description

While looking at the new webrtc api, I noticed that the Ring web app seems to be fetching a set of ice servers when you first load the page. These values are then stored in localStorage under wrtc-isc (base64 encoded) and not fetched again.

The request is something like this:

GET https://account.ring.com/api/cmds/iceConfig

With a response like this: (note i've redacted the creds in case they are personal)

[
    {
        "IceConfiguration": [
            {
                "credential": "GTehw7**",
                "url": "turn:mrs-f63a5c68-1.p.us-west-2.cmds-tachyon.com:4172?transport=udp",
                "username": "16912**"
            },
            {
                "credential": "GTehw**",
                "url": "turns:mrs-f63a5c68-1.p.us-west-2.cmds-tachyon.com:443?transport=tcp",
                "username": "16912**"
            },
            {
                "url": "stun:mrs-f63a5c68-1.p.us-west-2.cmds-tachyon.com:4172"
            }
        ]
    }
]

We currently use a set of hard-coded STUN servers to gather ice candidates, but it would be much preferred to use these servers provided by Ring. The fact that there are turn servers in here means we may get some much better connection options for complex network scenarios (eg users on VPNs).

The biggest challenge is that the url from the web app (https://account.ring.com/api/cmds/iceConfig) does not directly translate to the url we need to use from Node.js. We need to figure out the right URL, and then it should be easy to start using the provided servers.

@tsightler maybe you have some insight here? Are the android/ios apps making similar calls to a different endpoint by chance?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions