Discussions

Ask a Question
Back to All

Serious Customer hoping for actual support - 429 Too Many Requests (from /ice -- ICE Candidates)

From what I can see, the support for this product isn't strong and the Discussion forms here are pretty dead.

I'm hoping to see otherwise on this post so my company can continue pursuing the (potential) solution D-ID offers.

Hello,

Based on the example Repo here:

https://github.com/de-id/live-streaming-demo/blob/main/streaming-client-api.js

I don't see anywhere that the response from the "/ice" Endpoint is being used. It shows:

fetch(${DID_API.url}/talks/streams/${streamId}/ice .... )

The return value (looking like the below) is never used:

{  
    "status": "created",  
    "session_id": "AWSALB=I0uyejtkytYKBWgi3ONVyv2D+fz934HfrMYx2W7dsjg55kUz+b310V..vuuPd; Expires=Sun, 01 Oct 2023 21:47:55 GMT; Path=/; AWSALBCORS=I0uyejtk...yv2D+fz934HfrMYx2W7dsjg55kUz+b310V...4TVCjhUbpet3pXh9fIAy...wEvuuPd; Expires=Sun, 01 Oct 2023 21:47:55 GMT; Path=/; SameSite=None; Secure"  
}
  1. Does the Browser use this automatically? How? If not, then what exactly does this fetch code do?

From WebRTC documentation online, I see the use of "addIceCandidate", but I don't see this anywhere here.

Anyways, beyond this, the code ends up making a dozen or more Requests for this (i.e. onIceCandidate is executed a dozen or more times). This causes a 429 Too Many Requests error from you D-ID Server.

I'm not sure why this is, maybe because the Candidates that come through aren't being used appropriately?

  1. Why are so many ICE Candidates being received? I even slice the iceServers so that there is always only 1 Ice Server in consideration (to see if that'd reduce the number of Requests, it didn't).
  2. Any other thoughts or suggestions to get this to work and avoid the 429 error?

Thank you!

NOTE, I have also modified the code (to bypass "CORS" Errors during Development, to Proxy via my local NodeJS Server, Response I show above is still the Response I send back to mimic exactly what the raw "fetch" to your Server would of done.

function onIceCandidate(event) {
  console.log('onIceCandidate', event);
  if( event.candidate ) {
    const { candidate, sdpMid, sdpMLineIndex } = event.candidate;


    const payload = {
      candidate,
      sdpMid,
      sdpMLineIndex,
      sessionId,
    };
    console.log("STREAMS ICE (Client) PAYLOAD", JSON.stringify(payload));


    const sendIceCandidate = async () => {
    const requestOptions = { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) };
    const response = await fetch( `${SERVER_ORIGIN}/api/synthetics/face/streams/${streamId}/ice`, requestOptions );
    ...