bugtracker icon indicating copy to clipboard operation
bugtracker copied to clipboard

Resolve mDNS timeout(5s).

Open sshsun1990 opened this issue 5 years ago • 1 comments

Issue description

g_resolver_lookup_by_name will sync resolve mDNS. But it will timeout when chrome local and kms in internet. It will cost 5s per resolve .local. So chrome show first screen of video stream will very slow.

I have a simple resolution:

/* Based on http://www.w3.org/TR/webrtc/#rtcicecandidate-type */
struct _KmsIceCandidatePrivate
{
  ...

  gchar *stream_id;
  gboolean is_valid;
  GCancellable *cancel_handle;
};

static gpointer 
kms_ice_candidate_mdns_resolved (gpointer data)
{
  KmsIceCandidate *self = KMS_ICE_CANDIDATE (data);

  if (self == NULL) {
    return NULL;
  }

  usleep(100*1000); // 100 ms
  g_cancellable_cancel(self->priv->cancel_handle);
  return NULL;
}

static gboolean
kms_ice_candidate_update_values (KmsIceCandidate * self)
{
...
    GCancellable *cancel_handle = g_cancellable_new();
    self->priv->cancel_handle = cancel_handle;
    g_thread_new ("KmsCand", kms_ice_candidate_mdns_resolved, self);
    
    GError *err = NULL;
    GResolver *resolver = g_resolver_get_default ();
    GList *addresses = g_resolver_lookup_by_name (resolver, self->priv->ip,
           self->priv->cancel_handle, &err);

    g_object_unref (resolver);
    g_object_unref (self->priv->cancel_handle);
...
}

@jcaden

sshsun1990 avatar Sep 10 '20 03:09 sshsun1990

hello? Anybody? @j1elo

sshsun1990 avatar Sep 21 '20 06:09 sshsun1990