News

25 Nov 2025

[News] Bugfix release 3.9.1 out now

Bugfix 3.9.1 Release notes Hey everyone, bugfix release 3.9.1 is now available. We've found a few things we wanted changed, but not enough to consider as a full release. If you want to know more we recommend looking at the full...

Bugfix 3.9.1 Release notes

Hey everyone, bugfix release 3.9.1 is now available. We've found a few things we wanted changed, but not enough to consider as a full release. If you want to know more we recommend looking at the full changelog.

Downloads can be found here.

Noteworthy Changes

Logout API call

There's a new API call to log out, which forces a clear of the authentication state of an API connection. This is necessary for browsers that can re-use previous connections even after log out

Track-ID based track selector

You can now use the track id (or pid) of a track within a stream. This works for video, audio and metadata. It can be done by adding an i# as selection. For example selecting the video track 256 you can use ?video=i256 for more information see track selectors.

Improvement EFPS / EFPKS

The effective frames per second and effective frames per kilo second have been improved to be caucluated over time rather than a single measure. This makes them far more accurate, though it can take up to 10 seconds before it's done measuring.

Metadata improvement

Stream health information now includes the track index and the (effective) frames per second.

Shared memory statistics in capabilities API call

Shared memory statistics are now available in the capabilities API call. Visible on the server stats page

Simulate live option is removed from the interface

This was an option that was never meant to be user-facing rather set automatically depending on the input used. Most notable playlist inputs, the option has been removed as it can cause unexpected/wrong behaviour if set wrongly.

Bugfix: JWK memory leak

There was a memory leak if JWKs were loaded from an URL. This has been patched.

Bugfix: DTSC memory leak

DTSC output could cause a minor memory leak when connections did not have enough bandwidth.

Bugfix: UDP API no longer respons to requests coming from its own listening port. This could sometimes happen and caused 100% CPU usage due to a loop.

Push statistics no longer accidentally pick up non-push SRT connections

Several other bugfixes and improvements.

read moreless
31 Oct 2025

[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...

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.

Downloads can be found here.

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!

read moreless
12 Aug 2025

[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...

Hey everyone!

Picture of IBC2025 banner

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!

read moreless
6 Aug 2025

[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...

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.

read moreless
14 Jul 2025

[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...

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&copy=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.

read moreless
Latest 2025 2024 2023 2022 2021 2020 2019 2018 2017 2016 2015 2014 2013 2012