<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/high-bitrate-video-streaming-with-gstreamer-s-rtp-elements-nw6xru8bg" -->

---
title: High bitrate video streaming with GStreamer's RTP elements
description: GStreamer 1.18 introduces buffer list support in the receive path of the rtpsession element, significantly boosting throughput for high bitrate video...
canonical: https://daily.dev/posts/high-bitrate-video-streaming-with-gstreamer-s-rtp-elements-nw6xru8bg
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: High bitrate video streaming with GStreamer's RTP elements | daily.dev
og:description: GStreamer 1.18 introduces buffer list support in the receive path of the rtpsession element, significantly boosting throughput for high bitrate video...
og:url: https://daily.dev/posts/high-bitrate-video-streaming-with-gstreamer-s-rtp-elements-nw6xru8bg
og:image: https://api.daily.dev/og/posts/nw6XrU8BG.png
og:image:alt: High bitrate video streaming with GStreamer's RTP elements
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# High bitrate video streaming with GStreamer's RTP elements

**[Collabora Blog](https://daily.dev/sources/collabora)** · 6 min read · 0 upvotes · 0 comments

## Summary

GStreamer 1.18 introduces buffer list support in the receive path of the rtpsession element, significantly boosting throughput for high bitrate video streaming. The post explains how GStreamer's buffer push mechanism works at a low level (gst_pad_push vs gst_pad_push_list), why individual buffer pushes are costly due to mutex locks and atomic operations, and how grouping buffers into lists reduces this overhead. Flamegraph comparisons show dramatic improvements in controlled scenarios, with more modest but real gains in realistic pipelines using udpsrc and rtpbin. Further work (e.g., enabling buffer lists on udpsrc) is needed to fully realize the gains in production use cases.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.collabora.com/news-and-blog/blog/2020/08/20/paving-the-way-high-bitrate-video-streaming-gstreamer-rtp-elements>

## Questions this post answers

### How does GStreamer's buffer list (gst_pad_push_list) improve pipeline throughput compared to pushing individual buffers?

Buffer lists group multiple buffers so the full sequence of mutex locks and atomic operations that accompany each pad push happens once per list rather than once per buffer. In a controlled pipeline where rtpsession, the upstream rtpvrawpay, and downstream fakesink all support buffer lists natively, enabling buffer list support in rtpsession's receive path produced a dramatic throughput improvement. In realistic pipelines with udpsrc and rtpbin the gain is real but smaller, because not all elements support buffer lists natively.

_Engineers tuning GStreamer pipelines for low-latency video transport track element-level optimizations like these on daily.dev._

### Which GStreamer version added buffer list support to the rtpsession receive path?

Buffer list support in the rtpsession receive path landed in GStreamer 1.18. The rtpsession element already had buffer list support on its send path before this release; the receive path was the missing piece. For full end-to-end gains, additional elements such as udpsrc would also need native buffer list support.

_Developers shipping GStreamer-based streaming products keep up with release-level changes like this on daily.dev._

## Similar posts on daily.dev

- [Introducing GstPipelineStudio 0.6.0](https://daily.dev/posts/introducing-gstpipelinestudio-0-6-0-ofhghxgo9) · Planet Igalia · 0 upvotes · 0 comments
- [GStreamer 1.28 Released With More Rust Code](https://daily.dev/posts/gstreamer-1-28-released-with-more-rust-code-ukhdu9ibb) · Phoronix · 0 upvotes · 0 comments
- [GStreamer 1.28.1 Adds Whisper-Based Speech-To-Text, AV1 Stateful V4L2 Decoder Support](https://daily.dev/posts/gstreamer-1-28-1-adds-whisper-based-speech-to-text-av1-stateful-v4l2-decoder-support-njs5v7ce9) · Phoronix · 0 upvotes · 0 comments

---

[View this post on daily.dev](https://daily.dev/posts/high-bitrate-video-streaming-with-gstreamer-s-rtp-elements-nw6xru8bg)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"High bitrate video streaming with GStreamer's RTP elements","url":"https://daily.dev/posts/high-bitrate-video-streaming-with-gstreamer-s-rtp-elements-nw6xru8bg","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/high-bitrate-video-streaming-with-gstreamer-s-rtp-elements-nw6xru8bg"},"datePublished":"2026-08-11T08:56:10.627Z","dateModified":"2026-08-11T09:34:32.730Z","description":"GStreamer 1.18 introduces buffer list support in the receive path of the rtpsession element, significantly boosting throughput for high bitrate video...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/7d33b7c0320565eeb0ed749f931a99ea?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/7d33b7c0320565eeb0ed749f931a99ea?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Collabora Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collabora Blog","logo":"https://media.daily.dev/image/upload/s--ZGZ0FjqS--/f_auto,q_auto/v1786438306/logos/collabora?_a=BAMAMicg0","url":"https://daily.dev/sources/collabora"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/high-bitrate-video-streaming-with-gstreamer-s-rtp-elements-nw6xru8bg","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collabora Blog","item":"https://daily.dev/sources/collabora"},{"@type":"ListItem","position":3,"name":"High bitrate video streaming with GStreamer's RTP elements"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/high-bitrate-video-streaming-with-gstreamer-s-rtp-elements-nw6xru8bg#faq","mainEntity":[{"@type":"Question","name":"How does GStreamer's buffer list (gst_pad_push_list) improve pipeline throughput compared to pushing individual buffers?","acceptedAnswer":{"@type":"Answer","text":"Buffer lists group multiple buffers so the full sequence of mutex locks and atomic operations that accompany each pad push happens once per list rather than once per buffer. In a controlled pipeline where rtpsession, the upstream rtpvrawpay, and downstream fakesink all support buffer lists natively, enabling buffer list support in rtpsession's receive path produced a dramatic throughput improvement. In realistic pipelines with udpsrc and rtpbin the gain is real but smaller, because not all elements support buffer lists natively. Engineers tuning GStreamer pipelines for low-latency video transport track element-level optimizations like these on daily.dev."}},{"@type":"Question","name":"Which GStreamer version added buffer list support to the rtpsession receive path?","acceptedAnswer":{"@type":"Answer","text":"Buffer list support in the rtpsession receive path landed in GStreamer 1.18. The rtpsession element already had buffer list support on its send path before this release; the receive path was the missing piece. For full end-to-end gains, additional elements such as udpsrc would also need native buffer list support. Developers shipping GStreamer-based streaming products keep up with release-level changes like this on daily.dev."}}]}
```

