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!