# Need api for config different annoucedIp for H5 producer/consumer

**URL:** <https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044>\
**Category:** mediasoup libraries\
**Created:** [March 25, 2022, 3:52am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044 "2022-03-25T03:52:44Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [March 25, 2022, 3:52am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/1 "2022-03-25T03:52:44Z")

</div>

Here is the code fragment i use for webrtc server:

```auto
const ip = require('ip');
const local_ip_address = ip.address() 
...
          webRtcTransport: {
            listenIps: [
              {
                ip: local_ip_address,
                announcedIp: configOptions.announcedIp || local_ip_address //process.env.ENV_HOST_IP
              }
            ],

```

However i find a problem:  
I’m building a demo for streaming WebGL rendered web page content to WebRTC via Electron.

The electron instance(H5 producer) and webrtc server are running in a internal host behind gateway, (gateway opens port mapping)  
The H5 page consumer is outside of gateway,  
However, it seems outside H5 page consumer can connect to webrtc server, but The electron instance as H5 producer cannot.

I doubt if it’s due to the single annoucedIp config? The localhost electron H5 producer should directly use “127.0.0.1”, while outside H5 consumer uses mapped public ip?

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [March 25, 2022, 3:57am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/2 "2022-03-25T03:57:24Z")

</div>

From webrtcserver’s log, i can see locahost Electron as H5 producer can connect to webrtcserver via WebSocket, but no further SDP or RTP packet log.

I’m starting to think if it’s Electron’s bug(running on a server side centos machine with GPU)…

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [March 25, 2022, 4:01am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/3 "2022-03-25T04:01:46Z")

</div>

Previously i use a PlainTransport RTP producer（just a nodejs wrapper with ffmpeg/gstreamer） in the internal same host, there is no problem.

But PlainTransport has no full-functional WebRTC//RTCP feedback support…

---

<div class="post-metadata">

**Author:** ![Alby](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/alby/32/480_2.png) [@Alby](https://mediasoup.discourse.group/u/Alby)\
**Post date:** [March 25, 2022, 2:33pm UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/4 "2022-03-25T14:33:16Z")

</div>

You need to ignore loopback IP.

```javascript
  const os = require('os')
  const ifaces = os.networkInterfaces()
  for (let dev in ifaces) {
    ifaces[dev].forEach((details, alias) => {
      if (details.family === 'IPv4' && details.address !== '127.0.0.1' && !details.internal) {
        console.error(details.address)
      }
    })
  }

```

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [March 25, 2022, 3:28pm UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/5 "2022-03-25T15:28:25Z")

</div>

What does this code mean? It doesn’t apply anything special to mediasoup settings.

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [April 26, 2022, 8:40am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/6 "2022-04-26T08:40:26Z")

</div>

I’m expecting mediasoup to support 2 anouncedIps per single instance:

One is for electron producer on the same node behind NAT gateway with mediasoup, “127.0.0.1” is OK;  
The other is NAT gateway’s public ip for outside chrome browser page consumer to access.

[Server behind NAT and the announcedIp - #9 by ibc](https://mediasoup.discourse.group/t/server-behind-nat-and-the-announcedip/99/9) is related.

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [April 26, 2022, 8:41am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/7 "2022-04-26T08:41:49Z")

</div>

Perhaps i need to tweak into mediasoup’s internal ICE-lite implementations to solve this, any suggestion would be appreciated!

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [April 26, 2022, 8:44am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/8 "2022-04-26T08:44:43Z")

</div>

Due to [Cannot setup WebRTCTransport to mediasoup server inside of Docker instance, using ip 127.0.0.1(gstreamer pipeline cmd publisher in docker) - #19 by ibc](https://mediasoup.discourse.group/t/cannot-setup-webrtctransport-to-mediasoup-server-inside-of-docker-instance-using-ip-127-0-0-1-gstreamer-pipeline-cmd-publisher-in-docker/3439/19)

I mean, to let mediasoup to use node’s internal LAN ip(in fact it’s localhost) for the same-host electron producer.

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [April 26, 2022, 8:51am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/9 "2022-04-26T08:51:29Z")

</div>

Hi, i thought maybe i could create 2 routes: one is for the same-host electron producer instance, using local lan ip(not 127.0.0.1, since chrome doesn’t support it), the other for outside chrome page clients, using gateway’s public ip,

Then use pipeTransport to combine the 2 route…

Seems possible, and a little complex. I’ll try.

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [April 26, 2022, 9:01am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/10 "2022-04-26T09:01:11Z")

</div>

After re-looking at the API document, and the code which i modified from sample, I realize that, as to mediasoup, there is 3 hierarchies:

worker → router → transport

listenIp/anounceIp is transport-level config, so i can created 2 different WebRtcTransport using different listenIp/anounceIp config for internal electron producer and outside chrome consumers, they’re in the same router!

---

<div class="post-metadata">

**Author:** ![chenzx](https://avatars.discourse-cdn.com/v4/letter/c/ee59a6/32.png) [@chenzx](https://mediasoup.discourse.group/u/chenzx)\
**Post date:** [April 27, 2022, 5:33am UTC](https://mediasoup.discourse.group/t/need-api-for-config-different-annoucedip-for-h5-producer-consumer/4044/11 "2022-04-27T05:33:59Z")

</div>

```auto
webRtcTransport: { //this is for outside chrome page consumer clients;
    listenIps: [
      {
        ip: local_ip_address,
        announcedIp: configOptions.announcedIp
      }
    ],
    maxIncomingBitrate: 15000000,
    initialAvailableOutgoingBitrate: 1000000,
  },
  webRtcTransportForSameHost: {//for electron producer instance on same node;
    listenIps: [
      {
        ip: local_ip_address,
        announcedIp: local_ip_address //<-- here;
      }
    ],
    maxIncomingBitrate: 15000000,
    initialAvailableOutgoingBitrate: 1000000,
  }

```

seems working
