# Media streams produced by FFmpeg or GStreamer are not received via some ISPs

**URL:** <https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414>\
**Category:** Integration\
**Created:** [November 19, 2019, 5:21am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414 "2019-11-19T05:21:43Z")\
**Posts on this page:** 12\
**Page:** 2

<div class="post-metadata">

**Author:** ![mkh](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/mkh/32/145_2.png) [@mkh](https://mediasoup.discourse.group/u/mkh)\
**Post date:** [November 26, 2019, 6:34am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/21 "2019-11-26T06:34:44Z")

</div>

It seems GStreamer is sending keyframes but FFmpeg does not. Here’s the GStreamer keyframe trace:

```auto
{ 
  direction: 'in',
  info: {
    isKeyFrame: true,
    marker: 'false',
    payloadSize: 26,
    payloadType: 102,
    sequenceNumber: 26592,
    size: 38,
    spatialLayer: 0,
    ssrc: 22222222,
    temporalLayer: 0,
    timestamp: 2958783210,
  },
  timestamp: 5879089198,
  type: 'keyframe',
}
{ 
  direction: 'in',
  info: {
    isKeyFrame: true,
    marker: 'false',
    payloadSize: 26,
    payloadType: 102,
    sequenceNumber: 28896,
    size: 38,
    spatialLayer: 0,
    ssrc: 22222222,
    temporalLayer: 0,
    timestamp: 2959683210,
  },
  timestamp: 5879097728,
  type: 'keyframe',
}
{ 
  direction: 'in',
  info: {
    isKeyFrame: true,
    marker: 'false',
    payloadSize: 26,
    payloadType: 102,
    sequenceNumber: 29952,
    size: 38,
    spatialLayer: 0,
    ssrc: 22222222,
    temporalLayer: 0,
    timestamp: 2960093610,
  },
  timestamp: 5879102289,
  type: 'keyframe',
}

```

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [November 26, 2019, 9:17am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/22 "2019-11-26T09:17:17Z")

</div>

You should also enable “pli” type in producer.setTraceEvent() to see if those keyframes are triggered by PLIs. Otherwise they are mostly useless.

---

<div class="post-metadata">

**Author:** ![mkh](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/mkh/32/145_2.png) [@mkh](https://mediasoup.discourse.group/u/mkh)\
**Post date:** [November 27, 2019, 5:32am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/23 "2019-11-27T05:32:35Z")

</div>

Here’s the log output for keyframe+pli:

```auto
{
  direction: 'in',
  info: {
    isKeyFrame: true,
    marker: 'false',
    payloadSize: 26,
    payloadType: 102,
    sequenceNumber: 26266,
    size: 38,
    spatialLayer: 0,
    ssrc: 22222222,
    temporalLayer: 0,
    timestamp: 1437098549
  },
  timestamp: 5961255102,
  type: 'keyframe'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961255179,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961256177,
  type: 'pli'
}

{
  direction: 'in',
  info: {
    isKeyFrame: true,
    marker: 'false',
    payloadSize: 26,
    payloadType: 102,
    sequenceNumber: 28577,
    size: 38,
    spatialLayer: 0,
    ssrc: 22222222,
    temporalLayer: 0,
    timestamp: 1437998549
  },
  timestamp: 5961265018,
  type: 'keyframe'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961265404,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961266404,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961267404,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961268405,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961269404,
  type: 'pli'
}

{
  direction: 'in',
  info: {
    isKeyFrame: true,
    marker: 'false',
    payloadSize: 26,
    payloadType: 102,
    sequenceNumber: 29632,
    size: 38,
    spatialLayer: 0,
    ssrc: 22222222,
    temporalLayer: 0,
    timestamp: 1438408949
  },
  timestamp: 5961269578,
  type: 'keyframe'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961269836,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  }
  ,
  timestamp: 5961270836,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961271836,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961272836,
  type: 'pli'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961273836,
  type: 'pli'
}

{
  direction: 'in',
  info: {
    isKeyFrame: true,
    marker: 'false',
    payloadSize: 26,
    payloadType: 102,
    sequenceNumber: 30866,
    size: 38,
    spatialLayer: 0,
    ssrc: 22222222,
    temporalLayer: 0,
    timestamp: 1438873349
  },
  timestamp: 5961274738,
  type: 'keyframe'
}

{
  direction: 'out',
  info: {
    ssrc: 22222222
  },
  timestamp: 5961275076,
  type: 'pli'
}

```

What now?

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [November 27, 2019, 8:06am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/24 "2019-11-27T08:06:38Z")

</div>

As a reminder, I’m not asking for info (there is no bug in mediasoup here) but telling you how to get info.

---

<div class="post-metadata">

**Author:** ![mkh](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/mkh/32/145_2.png) [@mkh](https://mediasoup.discourse.group/u/mkh)\
**Post date:** [November 27, 2019, 9:33am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/25 "2019-11-27T09:33:35Z")

</div>

Okay 😁

Any idea to go further?

---

<div class="post-metadata">

**Author:** ![mkh](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/mkh/32/145_2.png) [@mkh](https://mediasoup.discourse.group/u/mkh)\
**Post date:** [November 30, 2019, 6:12am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/26 "2019-11-30T06:12:16Z")

</div>

@ibc  
One question. How to force **TCP** when creating `PlainRtpTransport` just like `WebRtcTransport.enableTcp` option?

---

<div class="post-metadata">

**Author:** ![jmillan](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/jmillan/32/9_2.png) [@jmillan](https://mediasoup.discourse.group/u/jmillan)\
**Post date:** [November 30, 2019, 9:24am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/27 "2019-11-30T09:24:08Z")

</div>

Hi,

PlainRtpTransport uses UDP as the only underlaying transport protocol.

---

<div class="post-metadata">

**Author:** ![mkh](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/mkh/32/145_2.png) [@mkh](https://mediasoup.discourse.group/u/mkh)\
**Post date:** [November 30, 2019, 3:15pm UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/28 "2019-11-30T15:15:41Z")

</div>

Oops!

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [November 30, 2019, 7:52pm UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/29 "2019-11-30T19:52:43Z")

</div>

Which spec defines plain RTP over TCP transport?

---

<div class="post-metadata">

**Author:** ![mkh](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/mkh/32/145_2.png) [@mkh](https://mediasoup.discourse.group/u/mkh)\
**Post date:** [December 1, 2019, 5:17am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/30 "2019-12-01T05:17:00Z")

</div>

> [@ibc](#):
>
> Which spec defines plain RTP over TCP transport?

I don’t know 🤷‍♂️. I’m just asking.

BTW @ibc I really really don’t want to bother you with my noob or irrelevant questions. So please feel comfortable to completely ignore them.

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [December 1, 2019, 8:21pm UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/31 "2019-12-01T20:21:29Z")

</div>

Actually it was a real question. AFAIK the only way to send RTP and RTCP over TCP is defined in [RFC 4571](https://tools.ietf.org/html/rfc4571), but just WebRTC endpoints implement it.

---

<div class="post-metadata">

**Author:** ![whatisor](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/whatisor/32/243_2.png) [@whatisor](https://mediasoup.discourse.group/u/whatisor)\
**Post date:** [January 25, 2021, 4:33am UTC](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414/32 "2021-01-25T04:33:36Z")

</div>

I think I has totally same issue at specific isp  
Client keeps requesting Keyframe but it never comes. ( Client is Chromium, TURN relay is enabled) to restore video stream after a slow connection.

[Previous page](https://mediasoup.discourse.group/t/media-streams-produced-by-ffmpeg-or-gstreamer-are-not-received-via-some-isps/414.md?page=1)
