Releases: DDVTECH/mistserver
Stable release 3.8
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.
3.7
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.
3.6.1
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.
3.4 stable release
Downloads can be found here and the full changelog can be found here.
Noteworthy changes
Windows builds!
We finally have releases of Windows builds for 3.X, starting with this version. The MistTray taskbar icon application has not yet been updated, so this release does not include it.
MistServer should now be ran using the MistServer Shell
shortcut. This boots MistController in a shell window (which you can minimize to get it out of your way, or keep in view to see the logs in it).
There will still be a few differences in the Windows builds compared to Linux (most notably: WebRTC is not functional in the Windows build right now), but future updates will incrementally get Windows and Linux builds to parity again.
Web interface: New stream status page
The stream status page is a new tool in the web admin interface to more effectively analyse the current state of a stream. It also allows the following actions:
- Add tags
- Stopping viewers
- Stopping sessions
- Nuking stream (forceful reset of the stream)
- Look at the meta-data of the stream
- Easily identify the live point for each track and their respective sync/delay
- Creating/removing triggers
- Starting/stopping pushes
- Starting/stopping recordings
Raw pixel support
Usually you don't want to handle raw pixels in a modern media server, but in some cases it is unavoidable. MistServer now supports a new custom data structure optimized for raw video streams, and WebM/MKV-based inputs/outputs/processes have been updated to support raw pixels.
V4L2 Support (Linux only)
You can now use V4L2 to directly access webcams and other compatible devices with MistServer. Both raw pixel mode and (M)JPEG mode are supported.
RTMPS push input and pull output support
You can now set up RTMP with an SSL certificate to support incoming RTMPS connections. (Outgoing RTMPS connections have been supported for several versions already.)
WebRTC datatrack support
WebRTC (both WebSocket-based signalling and WHEP signalling) now have support for datatracks to receive JSON-based data track messages in sync with playback. Ingest support and trick play signalling over datatracks will follow at a later date.
New settings for processes
The restart behaviour can now be configured, allowing you to set how processes should respond to failure conditions. Stream processes can now be marked as inconsequential (meaning they will not impact when a stream is considered available).
Goodbye Cmake
Support for building MistServer using Cmake is now officially dropped. MistServer can only be build using Meson starting with this release.
MistServer 3.3 stable release
Stable release 3.3 is now available! Downloads can be found here and the full changelog can be found here.
Noteworthy changes
Improved (live) metadata track support
Metadata tracks (subtitles, JSON side band data, etc) are now properly supported end-to-end. There are new player APIs to request metadata tracks be given to a JavaScript function in-sync with playback. Metadata tracks can now be muxed to and demuxed from private data tracks in TS streams (including SRT and RIST) for effortless replication across systems.
A new "protocol" allows easy ingest of subtitles and JSON sideband data tracks over standard input or TCP socket.
Lower live streaming latency
We reworked the internals of our live streaming core code, lowering the minimum end-to-end latency between input and output from at least 1 frame on each track, to at least 1 frame on any track. Especially considering metadata tracks tend to be pretty sparse, this can make a massive difference in terms of latency - making it possible to achieve sub-second latency with less effort than ever before.
Clipping support
It is now possible to create short VoD clips on-demand from both VoD and live streams, in any/all supported output formats (including MP4, MKV, WebM, TS, FLV, etcetera).
Chromecast and video pop-out support
The built-in meta-player now supports playing back to and remote controlling Chromecast devices, as long as the player was loaded over HTTPS.
It is now also possible to use the video pop-out feature some browsers offer.
HLS DVR input now full-featured
It is now possible to use an ongoing HLS-format recording as source for a stream that then will support both live playback and seeking into the full DVR window of the recording. This also works with remote HLS streams, both VoD and live. For now, the HLS streams must use TS segments (fMP4/CMAF segment support will come in a future version).
Exit reasons
There is a set of new triggers and log messages that track why a process shut down / stopped, which greatly eases debugging and allows for more reliable tracking if an operation succeeded or failed.
3.2.2 bugfix release
Bugfix release 3.2.2 is now available! We've made several minor improvements that we deemed important enough to release, but did not warrant a full stable release. Downloads can be found here and the full changelog can be found here.
Changes
- Feature: Support for AV1 codec in MP4 input and output
- Bugfix: RTMP push output sent initial data with wrong timestamps, fixed
- Bugfix: The new UDP packet pacing code accidentally broke WebRTC ingest, fixed
- Bugfix: A rolling restart will no longer shut down a large percentage of segmented-protocol (e.g. HLS) viewers
- Bugfix: Fix local file path DTSH writing (no longer written to a folder called "file:")
- Bugfix: HTTP parser no longer chokes on reading an empty response body in non-chunked transfer modes
- Bugfix: Incoming TS-SRT pushes set their UTC offset correctly now
- Bugfix: Fixed track masking feature in MistProcMKVExec
- Bugfix: If an TS-SRT push comes in and does not immediately send media data, no longer fails to receive the push
- Bugfix: Packet jitter calculator no longer shared between inputs of single-process inputs (e.g. TS-SRT, TS-RIST)
- Bugfix: Fixed output session shutting down while waiting for a
pushdelay
setting to be applied - Bugfix: SRT and RIST listening sockets no longer kill all connections when there is a viewer for a mid-shutdown stream connected over these protocols
- Bugfix: Removed dead code in Meta-Player RAW WebSocket wrapper
3.1 release
The 3.1 release is upon us! Downloads can be found here.
First of all: apologies, this build is still Linux-only for now. While a lot of progress has been made on fixing MacOS and Windows compatibility in the past few months, it's not quite ready yet and we felt it prudent to release some of the fixes and features this release brings earlier rather than later.
This release also marks a new style of release post. We now mention noteworthy features with some text explaining what the feature is and why you'd want to use it, and of course the full changelog is still available as per usual.
Noteworthy features
TS-Based LLHLS
What: Support for Apple's LLHLS (Low Latency HTTP Live Streaming) protocol was already included in 3.0. However, that support is CMAF-based (the latest industry standard). HLS also supports an older TS-based segmenting method - this feature adds support for LLHLS in that format as well.
Why: This feature is useful for those that want/need to support LLHLS but are bound to using MPEG2-TS-based playback for some arbitrary reason (e.g. legacy device support, weird TVs they are using, etc).
Forward Error Correction
What: This adds support for ProMPEG Forward Error Correction to our MPEG2-TS-based output over UDP. FEC adds an additional layer of error correction packets on top of the normal packets, to allow for recovering from packet loss using parity data.
Why: Sometimes a connection can only be made over UDP, but there is a small amount of packet loss you want to correct for. This makes that possible. If you're not stuck using UDP, there are likely better solutions than this one.
Input SDP from file / Push output SDP to file
What: RTSP, WebRTC and SIP (VoIP) all use RTP-based transport for their media data. Some users want to bypass those signalling protocols and instead work with raw RTP over the network. The SDP input and output allows you to preconfigure the "handshake" normally done over the signalling protocol, so you can directly send or receive media without needing to do that handshake.
Why: This is especially useful when broadcasting multicast over, say, a company intranet - since the "handshake" should only be done once but there may be potentially infinite receivers in the network. They can all open the SDP file to receive the data needed to connect. Until this feature became available, multicast over the local network was not possible using RTP and only using raw UDP (in an MPEG2-TS transport). The support for SDP is not only multicast usecases, though - that is just the most noteworthy one.
AAC file input support
What: The AAC codec is already supported in Mist, but separate .aac
files are not (they need to be inside some other container, instead). This update adds support for plain .aac
files as a VoD input format.
Why: Because this is the most efficient/best format to store separate AAC files, and it wasn't supported yet. In addition, reading AAC files is needed to be able to replace AAC audio tracks with custom audio when pushing RTMP out, a feature that is also part of this release.
Support for overriding AAC audio in RTMP push output
What: If a stream contains AAC audio, this feature lets you replace the audio in a stream with a looped version of an external AAC audio file. The original audio is not transmitted.
Why: This was built to support the use case that the stream may contain audio material that causes e.g. Youtube or Twitch to block the stream (e.g. copyrighted songs etc), and you want to replace the audio track with a placeholder for sending a "lite" version of the stream to these platforms.
Split config support
What: The ability to split up the config file by section, so that each section can be loaded from a different file on the system.
Why: This makes it easier to set up a generic config that can be re-used and synced across multiple installs, while keeping some of the config stored separately for each install that won't be overwritten. It's also possible to make part of the config read-only and other parts read-write by setting file permissions of their respective files accordingly.
RIST support
What: RIST is a semi-reliable transport, similar to Haivision SRT, Zixi and BRT. This means that it makes a connection that cannot be controlled (e.g. over the public internet instead of private networks) fairly predictable in behaviour. This adds support for RIST push output and RIST pull input, both in both caller and callee modes. Unfortunately our build system does not yet support building the RIST library itself, so this feature is currently only available if you compile MistServer yourself.
Why: RIST is rapidly gaining popularity, and there is still no clear "winner" in the reliable transport protocols segment today. Mist aspires to connect anything to anything, so we try to support as many relevant protocols as possible.
HEVC/H265 support in browsers
What: Most browsers don't support decoding of H265/HEVC video streams through any method (with or without hardware acceleration). A notable exception is recent versions of iOS, but for the rest mobile and desktop browsers alike generally won't support this codec. It is, however, possible to transpile libde265
(a software-only decoding library for H265/HEVC) to javascript and "force" software-based decoding of the codec in-browser anyway. This adds support for playing back H265/HEVC feeds through this method.
Why: H265/HEVC has a much better compression ratio than H264/AVC does, which can be critical in ultra low bandwidth situations. Unfortunately, software decoding of H265/HEVC is fairly slow - so this works best for low framerate or low resolution streams. The player does automatically skip frames to stay roughly at real time speed if/as needed, though - so even full resolution playback should be acceptable quality. There is another downside: the player currently only supports video, no audio.
3.0 stable release
Hey everyone,
After years of work on what would’ve been an “easy” 3 month project that went slightly out of scope we’re proud to announce the release of MistServer 3.0!
So, why 3.0? Basically we have redone the entire code base of MistServer making it impossible to do a rolling update from 2.X versions. This means upgrading will require dropping all current connections, as it needs to happen while MistServer is turned off. Your configuration, usage of MistServer and integration with other applications through triggers and the API will all stay the same. And of course once rebooted MistServer should behave just as you were used to, but with much lower latency.
All in all you should see improved performance and newly added features in the same old trusted interface. We have plans to upgrade the interface to something more modern as well, but we did not want to delay the 3.0 release any longer either. Perhaps more importantly we have made the decision to make all of the MistServer project fully open source without any restrictions! If you want to read more on why we did this, you can read more about it on our blog
Do note: the 3.0 release is only available for Linux-based systems at the moment. We will follow up with a 3.1 release soon that will also update the Windows and MacOS versions.
Do expect our next few updates to come faster!
Release highlights:
- Everything, including previously Pro-only features, is now Public Domain software.
- New protocols:
- WebRTC (input and output)
- WS/MP4 (output)
- SRT (native support; input and output)
- CMAF push (output)
- LLHLS (output)
- New live stream processing system feature, with:
- Livepeer process
- ffmpeg integration
- generic MKV-based process for easy integration with practically any other software
- Core buffer rewrite
- Massive latency reduction (previously 1-2 sec, now 2-3 frames end-to-end)
- A very long list of bug fixes and other improvements. See the full changelog for details!
2.18.1
2.14.2
Hello everyone! Bugfix release 2.14.2 of MistServer is now available!
The full change log is available here and downloads are here.
Our Pro-edition customers with active licenses will receive a new build notification in their e-mail automatically.
Here are some highlights:
- Lock-free server configuration implementation, fixing several recurring CPU usage and locking issues that happened in the earlier 2.14 releases.
- HTTP handler no longer uses unreliable peek() system call, also solving a potential trickle attack vulnerability.
- Logging is more human-friendly
- Statistics and viewer counter fixes
- ARMv7 builds compile correctly again (sorry for breaking these!)
- Many other small fixes/improvements/etc. See changelog for full list!