News
[Release] Stable 3.9 Release out now
Stable 3.9 Release notes
Hey everyone, we've just released our 3.9 update! It brings some exciting new features such as Enhanced RTMP (E-RTMP), native JWT support, and some very basic SCTE35 support for TS-based outputs. All in all there's quite a few changes, so you might want to go through the full changelog.
Noteworthy Changes
Enhanced RTMP (E-RTMP) following 2.0 Specification
The full Enhanced RTMP V2 specification is now supported by MistServer allowing all features to be used. The upgrade happens automatically when needed and connections will automatically upgrade should the other side be capable of it as well. Both input and output support all aspects of the specification.
JWT support (JSON Web Tokens)
JWT support is now included in MistServer, which is a great method to bind multiple applications/platforms together with a unified authorization method. Currently you can only use JWTs to stream into MistServer or pull streams from MistServer. There are plans to add support for accessing the MistServer API (and web interface) as well. You can find the JWT developer documentation in our online documentation. A basic integration example can be found here.
WHEP player now included in meta-player
WHEP WebRTC output can now be played directly in the MistServer Meta-player. Of course this is in addition to WebRTC using Websockets for signaling: both methods will be supported going forward.
Meta-player keyboard controls
We've added keyboard controls to the meta-player. Various playback features such as pause, play, speed up, speed down can be done through the keyboard. Controls will be enabled by default unless "keyControls":false is set.
Stream processes automatically masked from other processes
Tracks created by stream processes will now default to being masked for other processes. This was changed since most users do not expect to re-use the result of, say, a transcode for other processes. Keep this in mind should you create a track that is meant as a source for another process, as you will have to change your configuration to oppose the new default.
RTMP improvements
RTMP push outputs can now gracefully or gracelessly disconnect. A graceless disconnect is not informing the other side that the stream is about to end, which can trigger recovery logic on the other side. Graceful disconnect means informing the other side of the stream end as before.
When pushing RTMP out you can now override all aspects of the target URL by the host, application and stream URL parameters. This allows the usage of non-default URLs that might not be parsed correctly otherwise.
You can also use the keepts parameter to keep the stream's internal timestamps unchanged instead of normalizing them to start from 0 when pushing out.
Jitter / Latency improvements
We've made our jitter/latency handler more aggressive in trying to lower the latency as much as possible if the connection stability allows for it.
Very basic SCTE-35 support for TS-based outputs
Basic support for creating SCTE-35 markers in TS-based outputs from JSON instructions. Sending in a simple JSON post towards MistServers meta channels will create a SCTE-35 marker which will be inserted in TS based outputs.
You can add SCTE-35 markers by sending in a JSON post towards:
http://mistserver:httpport/streamname.json?meta=SCTE35
With Content-Type set to application/json and a POST body of {"splice_out":DURATION} where duration is in milliseconds. The splice-out point will be inserted immediately.
PLAY_REWRITE trigger
A new trigger that lets you change which stream is loaded for any request, letting you overwrite the URL format arbitrarily in the same way that PUSH_REWRITE already lets you do for incoming pushes.
You can now use ! as negated track selector
Using ! at the start of a track selector is now shorthand for all,!: selecting all tracks that do not match with the given selector. For example video=!h264 would match every video track except for h264-encoded tracks.
MistUtilHealth utility intended for automated Docker container health checks
A new MistUtil has been added: MistUtilHealth. It behaves in a way compatible with Docker container health checks, and will soon be automatically used for our standard Docker containers.
Effective frames per second track property
Effective frames per second property has been added that contains the measured FPS rather than the one signaled in the track metadata. The new property can be found in all places the "regular" frames per second property can also be found.
Pushing improvements
Live push outputs now have a latency measurement, which is how close to the theoretically perfect live point the push is currently sending data from. (This makes it effectively an "internal" latency measurement, rather than "end to end" latency measurement.)
A waitkey URL parameter can now be used to wait for the next keyframe before starting a push output, to minimize latency even further.
Live input improvements
Live streams can now configure a "max track idle time", which is how long a track can be idle before it is dropped. Before, this time was synchronized to the "DVR window" setting. They can be independently configured now.
Updated to mbedtls 3.6.5
We've upgraded our own builds and the meson subproject (for compiling yourself) to the latest mbedtls 3.6.5 stable release.
Fixed support for multiple SSL certificates/keys
You can set multiple certificates/keys for a single MistOutHTTPS and/or MistOutRTMPS listening port now. This allows you to serve multiple domains from a single port, even if you need to use more than one certificate to serve them (automatic TLS SNI support).
Various other improvements and bugfixes
We've massively improved the RTMP input and output protocols and done various other changes that improve compatibility with other platforms as well as bugfixes. Full details in the changelog!
[News] Exhibiting at IBC2025
Hey everyone!

Like every year, the MistServer team will be exhibiting at IBC2025!
If you're planning on attending, be sure to drop by and say hi.
We’ll be happy to share our latest updates, upcoming plans or even steal a few great ideas from you if you've got them.
Our booth can be found at 5.F43
Note: IBC will charge for tickets unless you use a customer code.
Feel free to use ours: IBC6310. You’ll need this near the end of the signup process.
Using the code will make entry free, but also forward the information you enter during signup to us. We will send you a single "thank you" email and then throw that data away.
Here are just a few of the things we’ll be showcasing:
Presentation: Building your own media pipeline powered by Open Source software
Speaker: Jaron Viëtor
Day: Sunday 14 Sep
Time: 12:45-13:00
Location: Hall 5 (5.A28)
Modular streaming platform powered by MistServer
Most streaming platforms lock you into their ecosystem. We do things differently and give you the keys.
MistServer is fully open source, and not only can you self-host your own platform, we actually recommend it.
Run and own everything yourself, yet be able to count on our team for support, advice and custom development.
Broadcast quality & encoding
MistServer has always focused on stream repackaging and internet distribution,
resulting in a robust server that supports nearly every streaming protocol.
However, one area we've been limited in is raw video signals and encoding.
That’s about to change. This year, we're introducing support for raw video signals such as SDI, NDI and (USB) webcams, along with encoding and decoding capabilities.
This means you can now build a complete studio-to-studio or studio-to-server contribution setup using just MistServer.
Updates & improvements
One of our most common questions: What’s new? Fortunately, our changelog has the details, but feel free to ask us in person anyway. We’re always happy to talk shop!
[Release] Stable release 3.8 out now!
Hey everyone, we've just released our 3.8 update! A long standing bug where ?stream=STREAMNAME got added to any HTTP output has been resolved. We've improved support for VP8/VP9/Opus and AV1 and made our UI much faster by making it eventbased rather than threaded.
We've also added methods to use tags and streamname(+wildcard) to make selections.
Downloads can be found here, and the full changelog can be found here.
Noteworthy Changes
HTTP-based URLs in triggers no longer contain ?stream=STREAMNAME
If one of your trigger handles expects this value to be in the URL you will need to update it accordingly. You can still parse the the unprocessed stream name from the URL yourself, or take the processed stream name from the rest of the trigger payload.
Auto-pushes can now be disabled based on specific tags or stream names used as inhibitor.
You can now specifically use #tags or streamname(+wildcard) to not activate the pushing logic
"inhibit":["live+example","#replicated"]
This would invalidate the live+example specifically and any live+wildcard stream with the #replicated tag for this push.
Live stream processes can be disabled through tags and triggers
Similar to the auto-push function you can also select specific streams/tags to not start processes on.
Triggers can now be disabled based on specific tags or stream names.
This one is slightly different compared to processes and pushes. This functionality is in the Applies to field, which is why we've also added a method to unselect a specific #tag or streamname by adding ! in front of it: !#tag and !streamname(+wildcard). This selection will be ran from left to right and can re-activate certain streams to work again. For example first removing all live+wildcard through !live+ then specifically adding live+example to only work for live+example.
DTSC-pulled streams are now automatically tagged with the #replicated tag
This makes it easier to both see which streams are coming from another Mistserver as source, but also to use them for process/pushing/recording logic.
VP8/VP9/Opus support in MP4 input/output
For VoDs that contained any of these codecs you will need to delete the matching DTSH file in order to see the tracks with these new codecs. The old DTSH files are usable, however only the "old" tracks will be used.
AV1 support in RTP (WebRTC, RTSP, SDP) and TS-based protocols (where available).
Note that the AV1 in TS specification is not finalized yet and our output implementation is technically incompatible (though the input implementation is fully compatible with both spec-compliant and our own output). Problems and incompatibilities might occur accordingly, but we do plan to be fully specification compliant in the near future.
[Release] Stable release 3.7 out now!
Hey everyone, we've just released our 3.7 update! Some good improvements all around, new feature "stream keys" and WHIP push to other servers!
Downloads can be found here, and the full changelog can be found here.
Noteworthy Changes
New feature: Stream keys
Stream keys adds native support for the most common method of pushing live streams into MistServer. It allows you to set or generate a token for stream names and thus prevent the need for further customization or integration if this is your intended usage.
For more information please look at the documentation. Specifically the stream key documentation.
New feature: WHIP push to other servers
You can now use WebRTC WHIP as a push option. You can do so through the following targets:
- http:
whip://example.com/publish - https:
whips://example.com/publish
Should an authentication bearer token be needed you can add this through a parameter: ?auth=TOKEN
- http:
whip://example.com/publish?auth=TOKEN - https:
whips://example.com/publish?auth=TOKEN
We have verified this implementation is cross-compatible with Cloudflare, Twitch and Pion (among others).
New feature: HLS push to Youtube
MistServer now supports HLS push to Youtube specifically. When MistServer recognizes a Youtube puhs url it'll automatically adapt the push output to work. Links such as https://a.upload.youtube.com/http_upload_hls?cid=TOKEN©=0&file= that come from Youtube Studio can now be used directly as a push target without further configuration needed.
New feature: Shell-style string quoting and escaping
This has been a limitation for quite a while. MistServer has various places where it would run commands that you specify. However it did not implement shell-style string quoting and escaping. This made it impossible (for example) to put spaces in arguments. You should now be able to copy most commands directly into the MistServer fields that run commands, without having to worry about changing the format to something non-standard.
Pull-styled streams function better
Sometimes pull styled streams (dtsc or srt pull) would run stuttery, several improvements have been made.
Local-only UDP API auto-retries connection
In some environments MistServer would lose contact to its UDP API. This is now able to reconnect properly.
[Release] Stable release 3.6 out now
Edit: 21st of April 2025, Fixed an issue with the download links/scripts for Linux/ARM builds. Sorry about that!
Hey everyone, we've just released our 3.6 update! Most excitingly, we're finally back to having a unified version of MistServer across all platforms! It took quite a while, but we're finally there. A few final steps are still needed to bring them all to the same level of quality, but the biggest hurdle has been cleared.
Downloads can be found here, and the full changelog can be found here.
Noteworthy Changes
MistServer MacOS builds are available again
We've resumed our support for MacOS builds, and they are now available once more. They're full-featured and should be nearly identical to the Linux version, except they do not rely on shared memory. This results in only a slight performance hit.
MacOS builds may still complain on boot about having no available RAM, but that message can be safely ignored on that platform.
SRT working on Windows again
SRT should now work for both input and output once more. We managed to work around an issue caused by how Windows handles socket binding. The Windows builds use significantly more CPU time to serve SRT compared to the other platforms, but latency and the SRT protocol functionality itself are otherwise normal.
WebRTC on Windows
WebRTC on Windows is almost fully functional. Currently, it supports a single viewer simultaneously only due to a bug. We didn't want to delay the release for this, so it will be fixed in an upcoming patch.
WebRTC now has multi-path & single socket support
WebRTC now supports migrating connections between mobile and Wi-Fi networks and can operate from a single listening socket. This means you only need to expose one port for WebRTC instead of the entire ephemeral range. It's especially helpful when running MistServer in virtualized environments like Docker/Kubernetes, where forwarding large port ranges is tricky. The setup required to get WebRTC to work has also been made much more simple, and the default configuration should work out of the box for most people.
Tag support improved
The active_streams call now returns stream tags, and you can now start pushes using tags by specifying #some_tag instead of a stream name. Automatic pushes will not start inactive streams, but a single push command will.
Push outputs will now report their current file target in the push status API
Previously, if dynamic variables were used, the API would only show the variable name instead of the final file target. You had to wait until the RECORDING_END trigger to know the result. Now, the push status API displays the final file target, and updates in real-time for segmented pushes.
The autopush API now supports JSON objects
The automatic push commands push_auto_add, push_auto_remove, and push_auto_list have been updated to use JSON objects. The old format remains available for backward compatibility. We'll be updating our documentation to reflect this change.
Push interface improvements
The push interface now allows you to enable/disable automatic pushes. When disabled, they won't trigger a new push under any condition, although existing pushes remain active. This makes managing pushes easier and gives more control.
Additional improvements include: - Quick filtering for showing & stopping pushes - Right-click options to edit, change, or stop pushes - Clicking stream names to visit their preview pages - Categorized push parameters and stream process options for a cleaner interface
Several other bugfixes and improvements
We've made various other minor changes to improve performance and user experience. We recommend checking the full changelog for the complete list.