It’s time to hit the road! Today, we’re excited to share a gameplay preview from the upcoming Coaches DLC for Euro Truck Simulator 2, showcasing the Scania Touring as we take a journey through the stunning landscapes of northern Norway.
In this gameplay video, we’ll be driving from Narvik to Andenes, giving you a closer look at what it’s like to be behind the wheel of a coach. But there’s more to a successful journey than simply reaching your destination. With passengers on board, how you drive can make a real difference!
So sit back and join us for a journey in the Scania Touring and get a taste of what awaits in the upcoming Coaches DLC!
One of the features we’re showcasing is the G-force indicator, which helps translate your driving style into passenger satisfaction. Sharp turns and hard braking can create higher G-forces, and your passengers won’t hesitate to let you know when you’ve pushed things too far. If you exceed their comfort limits, you may hear some rather loud reactions from the back of the coach!
Passenger satisfaction will contribute to your overall results at the end of your journey, giving you another reason to keep your driving smooth and comfortable. You’ll also hear passengers talking and making noise throughout the trip, helping bring the coach experience to life as you travel along the roads.
Another feature we’re showcasing is the adjustable sun visor, giving you greater control over the amount of sunlight coming into the cabin and providing a more comfortable driving experience behind the wheel of any coach.
Takes the v2 tree, with packages/console, packages/web, packages/stats, packages/function, infra and sst.config.ts merged up to latest dev, and retargets V2 publishing and deploys from the v2 branch to dev.
The DistroWatch news feed is brought to you by TUXEDO COMPUTERS. Robert Spiteri has announced the release of ZEPHIX 9, the latest stable version of the project's desktop Linux distribution based on Debian's "Stable" branch. Unlike ZEPHIX's ultra lightweight releases of the past, the new version, which features the LXDE desktop, is a 9.4 GB live ISO image containing....
Added optional Cloudflare proxy mode for new DNS records.
Added support for public IPv4 and IPv6 addresses in Git repository URLs.
Fixes
Fixed IPv6 server addresses across connections, URLs, routing, and Hetzner provisioning.
Fixed IPv6 connections to public database TCP proxies on IPv6-enabled networks (#12133).
Fixed database proxy connections after database IP addresses changed.
Prevented duplicate database environment variables and preserved source values when cloning applications. Removed existing duplicate Redis username and Nixpacks Node version entries.
Fixed database startup so configuration files were written before containers started.
Preserved application, database, service, and proxy containers during Docker cleanup.
Fixed detection of legacy Compose containers for custom start commands and status updates.
Restored valid Compose network names with required and alternative variable expressions (#12126).
Fixed Infisical secret references that reached containers without expansion (#12128).
Fixed S3 database and volume backup uploads on hosts with split DNS (#12129).
Fixed custom DNS queries by retrying truncated UDP responses over TCP (#12076).
Fixed GitHub App installation after switching teams and showed clear verification errors (#12122).
Prevented duplicate upgrades and fixed stalled upgrade progress.
Prevented configuration and route cache corruption during startup (#12120).
Matched the Railpack build frontend version to the helper's installed CLI.
Removed forced HTTP/1.1 for Git repository imports (PR #12080, #11579).
Fixed resource name alignment when descriptions were empty (#12127).
Improvements
Added a 5 GB free-space check before upgrades, with cleanup controls and a manual override. Automatic upgrades were skipped with a notification when space was low.
Updated the sidebar user menu and toggle icon.
What's Changed
revert(git): stop forcing HTTP/1.1 for repository imports by @peaklabs-dev in #12080
The Improved Material System continues to make its way across our truck line-up! With the upcoming 1.62 update for Euro Truck Simulator 2 & American Truck Simulator, two more trucks will benefit from this upgrade, bringing further visual refinements to their interiors.
We hope you've been enjoying the Improved Material System and the refreshed look it brings to the interiors of our trucks! It has been great to see your reactions to these visual upgrades, and we would like to thank you for all of the comments, feedback & screenshots you have shared with us so far.
In the upcoming 1.62 update, our vehicle teams have expanded this visual improvement to the cabins of the Iveco S-Way in Euro Truck Simulator 2, and the All-New Volvo VNL in American Truck Simulator!
The improved material system significantly enhances the lighting and visual quality of vehicle interiors, with a particular focus on how different interior materials react to light. This results in a more detailed, readable, and visually pleasing cabin environment. It also makes the differences between materials such as leather, fabric, plastic, and metal much more apparent, even in low-light conditions.
As promised, we are gradually bringing this feature to more trucks, allowing you to enjoy beautiful cabin interiors across a wider range of vehicles. If you would like to learn more about what the process of implementing this feature on new vehicles looks like, make sure to check out our Under the Hood blog, where we spoke with colleagues working on the improved material system.
We hope you will be happy to see the improved cabin interiors in more trucks with this upcoming update! Remember to stay tuned for more news from our games by following us on our X, Facebook, Instagram, Bluesky, and YouTube. We would also appreciate it if you could sign up for our newsletter, so you can be informed. Until next time, keep on trucking!
Below are development builds with the latest fixes and improvements. Please test them thoroughly and report problems immediately, so that any regressions can be fixed in time for next stable release.
Latest development build: 2.8.3.25 (October 15th 2026)
Wana boot and install OS through network (PXE/HTTPBoot)? Welcome to my new project iVentoy.
About iVentoy https://www.iventoy.com/
iVentoy is an enhanced version of the PXE/HTTPBoot server with .
Extremely easy to use, Many advanced features.
x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI (Secure Boot), ARM64 UEFI and LoongArch64 UEFI mode supported
110+ common types of OS supported (Windows/WinPE/Linux/Unix/VMware)
Turn any PC, laptop, server, NAS, or Raspberry Pi into a PXE/HTTPBoot server instantly!
......
fix dropping UDP packets during connection close (#6278) UDP packets were dropped in case of errors regardless of their size. Now they are dropped only if they are empty and there's an error.
docs: fix youtube rtmps URL (#6286) The rtmps URL for Youtube was wrong. The fingerprint is not required anymore.
prevent free access to playback server in case of legacy credentials (#6311) When legacy credentials are in use (readUser, readPass, publishUser, publishPass), access to the playback server is granted to anyone. Prevent this by granting access only to users using readUser, readPass.
auth: skip JWKS fetch when no JWT is provided (#6274) authenticateJWT fetched the JWKS before checking whether the request carried a token at all. Every anonymous request, such as the first unauthenticatedRTSP DESCRIBE or HLS request that precedes a 401, caused an outbound request to the JWKS server while holding the manager's write lock. An unauthenticated client could therefore make the server contact the identity provider at will and, while that endpoint was slow or unreachable, stall JWT authentication for everybody. Return "JWT not provided" before touching the JWKS. Also check the JWKS response status code. A non-2xx reply was fed straight to the JSON decoder, so an error page surfaced as a confusing parse error,and an error reply that happened to hold valid JSON was cached as the key set for an hour. Reject it with the status code, as authenticateHTTP already does. Behavior for requests that carry a token against a healthy JWKS server is unchanged.
rewindablereader: fix possible OOM (bluenviron/mediacommon#383) empty datagram packets might cause the allocation of unnecessary entries. Fix that.
h264: revert bluenviron/mediacommon#142 (bluenviron/mediacommon#384) supporting standalone SEI units should not be necessary anymore since these are filtered out at the root (bluenviron/gortsplib#1184). In case of any issue that should arise after this change, open a bug report and we'll adjust things accordingly.
h264: support SEI recovery point in DTS extractor (bluenviron/mediacommon#341) Treat a SEI recovery point message (payload type 6) as a random access point, similarly to a CRA in H265, so the DTS extractor can (re)initialize its state from the first coded frame that follows the recovery point.
API
fix race condition when kicking RTSP sessions (#6260) (#6275)
do not change passwords when their value is "" (#6141) (https://github.com/bluenviron/mediamtx/issues/6287) (#6292) some users call /config/global/get and passits content to /config/global/patch. Since the former now redacts passwords and replaces their value with "", this string is used as an effective password, breaking authentication. Now password values equal to "" are ignored by /config/global/patch, and the original password value is kept unchanged.
fix deadlock when reloading the API (#6280) (#6279) (#6310) When the API is closing, a /config endpoint might be waiting on the server to reply, but the server is busy waiting on all API endpoints to return, causing a deadlock. Fix this by canceling requests from API endpoints to the server when the API is closing.
Media-Over-QUIC
use "catalog" as catalog track name (#6268) Previously, the catalog track name was ".catalog" which is non-standard.
apply path-level rtspUDPReadBufferSize to the first connection (#6291) The RTSP static source built its client before reading the path-level rtspUDPReadBufferSize, so the value only reached the client after a reconnection. Compute it before creating the client, as the MPEG-TS and RTP sources do and as this source did before #5488.
drop standalone H264/H265 trailing SEIs (bluenviron/gortsplib#1184) #3614bluenviron/mediacommon#142#6257bluenviron/mediacommon#382 H264/H265 access units containing a single SEI only, trailing other units, generated by someTP-Link/Tapo cameras, are non-standard and cause several issues in downstream components, including the DTS extractor and the recorder. Previously, the H265 DTS extractor was adjusted to support such units (bluenviron/gortsplib#142) but the problem represented itself with H265. Filter these units out at the root.
complete RTP/JPEG implementation (bluenviron/gortsplib#1187) add support for restart headers, limit support to JPEG types 0 and 1.
RTMP
detect read errors even when the server is writing (#6267) Until now we relied exclusively on write errors to detect broken RTMP connections. Now read errors are checked too.
writer: drain inbound messages (#5776) (bluenviron/gortmplib#132) Some servers periodically send messages even when we're publishing. If they are not read, they fill an internal connectionbuffer and cause periodic disconnections. Now the Writer also drains inbound messages.
reader: support FLV video command frames and skip empty audio messages (bluenviron/gortmplib#128) Someservers (e.g. Wowza Streaming Engine) send a video info/command frame before the first frame: a 2-byte message with frame type 5 and a single command byte (start of seek / end of seek). Video.unmarshal rejected it on length, aborting the whole connection. Add Video.FrameType (key frame, inter frame, command) and Video.Command, deprecate Video.IsKeyFrame in favour of FrameType, and skip command frames in Reader since they carry no data. Some servers (e.g. Wowza Streaming Engine) send an audio message with an empty bodybefore the first frame. allocateMessage rejected it with "not enough bytes", aborting the whole connection. Parse an empty body into an Audio with Codec = 0 and no other field, marshal it back to an empty body, and skip such messages in Reader since they carry no data, like FFmpeg does.
rename message.Video.Type into message.Video.PacketType (bluenviron/gortmplib#138) This is to avoid confusion with the new message.Video.FrameType field.
HLS
muxer: keep EXT-X-MAP in delta updates (bluenviron/gohlslib#397) Delta updates were generated without EXT-X-MAP, although all tags that are not skipped must remain in them. Apple clients stop playback (MoofManifold -16046) at the first delta update that skips a segment after delta updates without skipped segments.
WebRTC
fix panic with specially-crafted WHEP requests (#6301) (#6309) this happened in case of WHEP requests with no media descriptions in the SDP.
Dependencies
Go updated from 1.26 to 1.27
code.cloudfoundry.org/bytefmt updated from v0.90.0 to v0.92.0
github.com/bluenviron/gohlslib/v2 updated from v2.4.5 to v2.4.6
github.com/bluenviron/gortmplib updated from v1.0.3 to v1.0.4
github.com/bluenviron/gortsplib/v5 updated from v5.6.6 to v5.6.7
github.com/bluenviron/mediacommon/v2 updated from v2.9.5 to v2.9.6
github.com/datarhei/gosrt updated from v0.11.1-0.20260812091715-a77b40bb4b76 to v0.12.0
github.com/gin-contrib/pprof updated from v1.5.5 to v1.5.6
github.com/go-git/go-billy/v5 updated from v5.9.1 to v5.9.2
github.com/go-git/go-git/v5 updated from v5.19.2 to v5.19.3
github.com/pion/ice/v4 updated from v4.4.2 to v4.4.5
github.com/pion/interceptor updated from v0.1.48 to v0.1.49
github.com/pion/rtcp updated from v1.2.17 to v1.2.19
github.com/pion/transport/v4 removed
github.com/pion/webrtc/v4 updated from v4.2.20 to v4.2.22
github.com/quic-go/quic-go updated from v0.62.0 to v0.63.0
github.com/pion/datachannel updated from v1.6.2 to v1.6.3
github.com/pion/dtls/v3 updated from v3.1.8 to v3.1.9
github.com/pion/mdns/v2 updated from v2.2.0 to v2.2.2
github.com/pion/sctp updated from v1.11.1 to v1.11.3
github.com/pion/srtp/v3 updated from v3.0.15 to v3.1.3
github.com/pion/stun/v4 updated from v4.0.0 to v4.0.1
github.com/pion/turn/v5 updated from v5.1.0 to v5.1.2
github.com/pjbgf/sha1cd updated from v0.6.0 to v0.7.0
github.com/pion/transport/v5 v5.1.1 added
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtx
You can verify checksums of binaries by downloading checksums.sha256 and running:
Fixed audio monitoring on browser sources briefly being enabled every time in Beta 1-6 [prgmitchell] (#14003)
Fixed browser sources appearing blank on refresh in Beta 1-6 [WizardCM] (#14003)
Fixed local network requests failing in browser sources in Beta 1-6 [WizardCM] (#14009)
Fixed Plugin Manager showing third-party plugins as missing when OBS is launched in Safe Mode in Beta 1-6 [Warchamp7] (#14001)
Fixed Plugin Manager removal button sometimes not removing missing plugins from the Plugin Manager in Beta 1-6 [Warchamp7] (#14008)
Fixed the Missing Encoders popup not showing in taskbar [Warchamp7] (#14010)
Fixed profile import failing on paths with a trailing slash [Ushkalovk] (#13863)
Developer Info: Added obs_canvas_video_active() to check if the video of a canvas is active [exeldro] (#13110)
Developer Info: Changed obs_canvas_reset_video() to allow resetting a canvas's video when any other canvas's video is active, but not its own video [exeldro] (#13110)
Beta 6 Changes
Fixed a crash during certain actions involving groups in Beta 1-5 [prgmitchell] (#13978)
Fixed scripting not working on macOS in Beta 1-5 [PatTheMav] (#13976)
Fixed game capture hooks not updating in Beta 1-5 [Warchamp7] (#13968)
Fixed clock Lua script not working in Beta 1-5 [RytoEX] (#13974)
Changed Safe Mode to not start WebSocket Server [FiniteSingularity/RytoEX] (#13984)
Removed support for FFmpeg 6.x and 7.x [RytoEX] (#13964)
Fixed duplicate "Save Replay" hotkey entries when switching profiles in Beta 1-4 [xtfo] (#13943)
Fixed warning dialogs on macOS not rendering rich text in Beta 1-4 [Warchamp7] (#13949)
Fixed source icon state appearing inverted in Beta 1-4 [Warchamp7] (#13953)
Fixed audio monitoring settings not saving in Beta 1-4 [Warchamp7] (#13951)
Fixed missing encoder check showing missing encoders in an output mode that is not currently selected in Beta 1-4 [Warchamp7] (#13950)
Fixed Windows updater not updating game capture and virtual camera in some cases in Beta 1-4 [Warchamp7] (#13939)
Beta 4 Changes
Fixed a CI and packaging issue. There are no application changes since Beta 1.
Beta 3 Changes
Fixed a CI issue. There are no application changes since Beta 1.
Beta 2 Changes
Fixed a versioning issue. There are no application changes since Beta 1.
33.0 New Features
Updated CEF from 127/6533 to 150/7871 [WizardCM] (#13900)
This is a massive update to the underlying framework used for browser sources and docks from the July 2024 release to September 2026
All of this work is on the backend and should be invisible to users. Please be sure to report any new weirdness or problems you run into with browser sources!
Complete overhaul to plugin loading [FiniteSingularity/PatTheMav] (#13594)
First-party plugins are now in a new folder named core
Third-party plugins have an updated installation location and folder structure
Existing third-party plugins will continue to load from the legacy locations until OBS Studio 34.0
Added a startup error if obs-transitions failed to load [notr1ch] (#13321)
Improved file splitting for Hybrid MP4/MOV [derrod] (#13386)
Fixed outputs getting stuck running when a bad rescale output resolution is set [suogesi] (#13375)
Fixed monitoring icon state getting desynced when using third-party tools or websockets [prgmitchell] (#13822)
Fixed potential crash when shader cache file is invalid [notr1ch] (#13538)
Fixed a potential crash on Linux when USB mic is removed [R0te/RytoEX] (#13922)
Fixed a potential crash when renaming a source with the Add Source window open [Warchamp7] (#13800)
Fixed a potential deadlock during video/audio tasks [exeldro] (#13579)
Fixed an issue with B-frame offset calculation in AMF that could cause streams to disconnect [lexano-ivs] (#13762)
Fixed PipeWire screencast sources being duplicated in studio mode [tytan652] (#13673)
Fixed a potential crash when switching off a newly created profile [Warchamp7] (#13182)
Fixed a source toolbar crash when source type is missing [Penwy] (#13539)
33.0 Developer Information
Added frontend event and output signal for replay buffer saving [Penwy] (#8955)
Added guidance regarding the theme system to the top of all theme files [Warchamp7] (#13733)
Added ability to set a file extension filter for OBS_PATH_FILE_SAVE path types [FiniteSingularity] (#10190)
Added obs_frontend_is_safe_mode for first-party plugins
Third-party plugins are not loaded at all in Safe Mode
Added versions to Flatpak plugin extension point [tytan652] (#13735)
Added obs_canvas_video_active() to check if the video of a canvas is active [exeldro] (#13110)
The minimum supported versions of Visual Studio, Windows SDK, and clang-format have been increased. Previous versions may continue to work, but will no longer be tested/supported. It is recommended that build environments are kept up-to-date with the project's toolchain.
Changed Windows builds to use Visual Studio 2026 and SDK 26100 [RytoEX] (#13543)
Changed clang-format version used to 22.1.3 [PatTheMav] (#13549)
Changed obs_canvas_reset_video() to allow resetting a canvas's video when any other canvas's video is active, but not its own video [exeldro] (#13110)
Today, we bring you news from the upcoming 1.62 update for Euro Truck Simulator 2. As part of this update, we will be introducing new truck garage models across the map!
We already gave the truck garages in American Truck Simulator a refresh with the 1.58 update, and now it is time to give them the same treatment in Euro Truck Simulator 2. As you know, we are gradually reworking older areas of the base map, with the Benelux rework being the latest addition, while the rework for United Kingdom is currently underway. Garages are an important part of the map as well, so after many years, we felt it was time to bring them up to date and better align them with the newer areas of the game.
With the release of 1.62, these new garage models will be introduced across the entire base map as well as all of the map DLCs. This means that wherever your journeys take you, you can look forward to seeing these refreshed garages along the way.
Garages are also an important part of the truck driving experience. They are not only where you store your trucks and manage your drivers, but also a reflection of your growing company. From the smaller garages to the larger ones, we wanted to make them feel like places you would be happy to return to as your business grows.
The new garages feature updated visuals both inside and out, with greater attention to detail throughout. Our goal was to make them feel more modern and immersive, which should make the process of upgrading your garage feel more rewarding.
Of course, we also had to keep performance in mind. Bringing these new garages to the game while keeping their performance cost in check compared to the older models created many years ago was no small task, but we hope to have found the right balance between improving visuals and not increasing the toll on performance.
With these changes, we hope the reworked garages will feel like a more natural and enjoyable part of your journeys. They are another step in bringing older parts of the game up to today's standards, and we look forward to continuing to refine the world of Euro Truck Simulator 2 in future updates.
🛑 macOS Apple Silicon (arm64): this build is broken — use v0.21.1
The macOS arm64 assets below crash immediately on launch with EXC_BAD_ACCESS (Code Signature Invalid). A newly added Electron fuse rewrote the Electron Framework binary, which invalidated its ad-hoc signature, and the build was not re-signed afterwards.
Two ways to get a working app:
Download v0.21.1 (recommended) — it ships the fix.
Repair this build in place — after installing, run:
Added a new modern theme variant for options dialogs and menus that is based on Windows 11 UI design. The existing one was based on Windows 10. You can choose preferred theme here (regardless of which Windows version you use): Options > Advanced > ModernThemeStyle. The main interface is same for both modern variants.
Added advanced option to use native Windows 11 menus (with rounded corners).
EVR-CP/Sync now support HLG tonemapping.
Improved CUE file parsing.
Some internal improvements to further enhance stability.
Audiohooks: Fix whisper framehook timer leak and masquerade handling
ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.
Commit Authors:
Joshua C. Colp: (2)
Mike Bradeen: (1)
Issue and Commit Detail:
Closed Issues:
#2134: [bug]: Bridging channels which have been spied on with ChanSpy fails
#2179: [bug]: No initial NOTIFY for dialog subscriptions when hint references CustomPresence without AstDB entry (regression in 22.11.0)
#2186: [bug]: dialog-info NOTIFY for ringing extension no longer contains identity (caller ID) since 22.11.0
Commits By Author:
Joshua C. Colp (2):
extstate/pjsip: Handle lack of or late loading of presence state.
extstate: Include causing device channel details in legacy callbacks.
Mike Bradeen (1):
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Commit List:
Audiohooks: Fix whisper framehook timer leak and masquerade handling
extstate/pjsip: Handle lack of or late loading of presence state.
extstate: Include causing device channel details in legacy callbacks.
Commit Details:
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Author: Mike Bradeen
Date: 2026-09-25
Resolves several issues with the framehook added to allow whispering without
an underlying stream.
The timer is now owned by the audiohook list rather than the framehook. It is
retired on both channels during a masquerade and recreated when the audiohook(s)
are moved.
If the timer cannot be started, whisper audio is still mixed into the outbound
media as it was previously (requiring an underlying stream.)
An audiohook that cannot be moved to the new channel is now left DONE so that
its owner does not wait on it forever.
DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.
extstate/pjsip: Handle lack of or late loading of presence state.
Author: Joshua C. Colp
Date: 2026-09-25
The extension state implementation is stateful resulting in state
not being updated if a presence state provider does not publish an
update after loading. To handle providers which don't do this we
query for updated state if we are asked for it and the existing
state is invalid. This ensures that if the presence state provider
is loaded later we will get the updated state when asked.
The func_presencestate module is written to publish the persisted
custom presence states at load time. This failed for entries with
a not_set state as this resulted in querying the presence provider
that was not yet registered. The provider is now registered before
this ensuring the update can be published.
This change also fixes an issue in PJSIP where a SUBSCRIBE for a
hint that had an invalid presence state configuration would not
send an initial NOTIFY. We now treat an invalid presence state as
not set instead.
extstate: Include causing device channel details in legacy callbacks.
Author: Joshua C. Colp
Date: 2026-09-29
When a legacy extension state callback registers it can optionally
do so in a way that it will receive the channel(s) that have caused
a device to ring. This is used in PJSIP for the dialog-info+xml
support so that phones can display who is calling the monitored
extension.
An issue was introduced in the extension state rewrite where this
did not occur for the actual device that caused the extension state
update. It was only being done for additional devices that could be
involved. This has been fixed so that it is now done for the causing
device.
Audiohooks: Fix whisper framehook timer leak and masquerade handling
ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.
Commit Authors:
Joshua C. Colp: (2)
Mike Bradeen: (1)
Issue and Commit Detail:
Closed Issues:
#2134: [bug]: Bridging channels which have been spied on with ChanSpy fails
#2179: [bug]: No initial NOTIFY for dialog subscriptions when hint references CustomPresence without AstDB entry (regression in 22.11.0)
#2186: [bug]: dialog-info NOTIFY for ringing extension no longer contains identity (caller ID) since 22.11.0
Commits By Author:
Joshua C. Colp (2):
extstate/pjsip: Handle lack of or late loading of presence state.
extstate: Include causing device channel details in legacy callbacks.
Mike Bradeen (1):
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Commit List:
Audiohooks: Fix whisper framehook timer leak and masquerade handling
extstate/pjsip: Handle lack of or late loading of presence state.
extstate: Include causing device channel details in legacy callbacks.
Commit Details:
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Author: Mike Bradeen
Date: 2026-09-25
Resolves several issues with the framehook added to allow whispering without
an underlying stream.
The timer is now owned by the audiohook list rather than the framehook. It is
retired on both channels during a masquerade and recreated when the audiohook(s)
are moved.
If the timer cannot be started, whisper audio is still mixed into the outbound
media as it was previously (requiring an underlying stream.)
An audiohook that cannot be moved to the new channel is now left DONE so that
its owner does not wait on it forever.
DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.
extstate/pjsip: Handle lack of or late loading of presence state.
Author: Joshua C. Colp
Date: 2026-09-25
The extension state implementation is stateful resulting in state
not being updated if a presence state provider does not publish an
update after loading. To handle providers which don't do this we
query for updated state if we are asked for it and the existing
state is invalid. This ensures that if the presence state provider
is loaded later we will get the updated state when asked.
The func_presencestate module is written to publish the persisted
custom presence states at load time. This failed for entries with
a not_set state as this resulted in querying the presence provider
that was not yet registered. The provider is now registered before
this ensuring the update can be published.
This change also fixes an issue in PJSIP where a SUBSCRIBE for a
hint that had an invalid presence state configuration would not
send an initial NOTIFY. We now treat an invalid presence state as
not set instead.
extstate: Include causing device channel details in legacy callbacks.
Author: Joshua C. Colp
Date: 2026-09-29
When a legacy extension state callback registers it can optionally
do so in a way that it will receive the channel(s) that have caused
a device to ring. This is used in PJSIP for the dialog-info+xml
support so that phones can display who is calling the monitored
extension.
An issue was introduced in the extension state rewrite where this
did not occur for the actual device that caused the extension state
update. It was only being done for additional devices that could be
involved. This has been fixed so that it is now done for the causing
device.
Audiohooks: Fix whisper framehook timer leak and masquerade handling
ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.
Commit Authors:
Joshua C. Colp: (2)
Mike Bradeen: (1)
Issue and Commit Detail:
Closed Issues:
#2134: [bug]: Bridging channels which have been spied on with ChanSpy fails
#2179: [bug]: No initial NOTIFY for dialog subscriptions when hint references CustomPresence without AstDB entry (regression in 22.11.0)
#2186: [bug]: dialog-info NOTIFY for ringing extension no longer contains identity (caller ID) since 22.11.0
Commits By Author:
Joshua C. Colp (2):
extstate/pjsip: Handle lack of or late loading of presence state.
extstate: Include causing device channel details in legacy callbacks.
Mike Bradeen (1):
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Commit List:
Audiohooks: Fix whisper framehook timer leak and masquerade handling
extstate/pjsip: Handle lack of or late loading of presence state.
extstate: Include causing device channel details in legacy callbacks.
Commit Details:
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Author: Mike Bradeen
Date: 2026-09-25
Resolves several issues with the framehook added to allow whispering without
an underlying stream.
The timer is now owned by the audiohook list rather than the framehook. It is
retired on both channels during a masquerade and recreated when the audiohook(s)
are moved.
If the timer cannot be started, whisper audio is still mixed into the outbound
media as it was previously (requiring an underlying stream.)
An audiohook that cannot be moved to the new channel is now left DONE so that
its owner does not wait on it forever.
DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.
extstate/pjsip: Handle lack of or late loading of presence state.
Author: Joshua C. Colp
Date: 2026-09-25
The extension state implementation is stateful resulting in state
not being updated if a presence state provider does not publish an
update after loading. To handle providers which don't do this we
query for updated state if we are asked for it and the existing
state is invalid. This ensures that if the presence state provider
is loaded later we will get the updated state when asked.
The func_presencestate module is written to publish the persisted
custom presence states at load time. This failed for entries with
a not_set state as this resulted in querying the presence provider
that was not yet registered. The provider is now registered before
this ensuring the update can be published.
This change also fixes an issue in PJSIP where a SUBSCRIBE for a
hint that had an invalid presence state configuration would not
send an initial NOTIFY. We now treat an invalid presence state as
not set instead.
extstate: Include causing device channel details in legacy callbacks.
Author: Joshua C. Colp
Date: 2026-09-29
When a legacy extension state callback registers it can optionally
do so in a way that it will receive the channel(s) that have caused
a device to ring. This is used in PJSIP for the dialog-info+xml
support so that phones can display who is calling the monitored
extension.
An issue was introduced in the extension state rewrite where this
did not occur for the actual device that caused the extension state
update. It was only being done for additional devices that could be
involved. This has been fixed so that it is now done for the causing
device.
Audiohooks: Fix whisper framehook timer leak and masquerade handling
ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.
Commit Authors:
Joshua C. Colp: (2)
Mike Bradeen: (1)
Issue and Commit Detail:
Closed Issues:
#2134: [bug]: Bridging channels which have been spied on with ChanSpy fails
#2179: [bug]: No initial NOTIFY for dialog subscriptions when hint references CustomPresence without AstDB entry (regression in 22.11.0)
#2186: [bug]: dialog-info NOTIFY for ringing extension no longer contains identity (caller ID) since 22.11.0
Commits By Author:
Joshua C. Colp (2):
extstate/pjsip: Handle lack of or late loading of presence state.
extstate: Include causing device channel details in legacy callbacks.
Mike Bradeen (1):
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Commit List:
Audiohooks: Fix whisper framehook timer leak and masquerade handling
extstate/pjsip: Handle lack of or late loading of presence state.
extstate: Include causing device channel details in legacy callbacks.
Commit Details:
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Author: Mike Bradeen
Date: 2026-09-25
Resolves several issues with the framehook added to allow whispering without
an underlying stream.
The timer is now owned by the audiohook list rather than the framehook. It is
retired on both channels during a masquerade and recreated when the audiohook(s)
are moved.
If the timer cannot be started, whisper audio is still mixed into the outbound
media as it was previously (requiring an underlying stream.)
An audiohook that cannot be moved to the new channel is now left DONE so that
its owner does not wait on it forever.
DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate
space for the descriptor.
extstate/pjsip: Handle lack of or late loading of presence state.
Author: Joshua C. Colp
Date: 2026-09-25
The extension state implementation is stateful resulting in state
not being updated if a presence state provider does not publish an
update after loading. To handle providers which don't do this we
query for updated state if we are asked for it and the existing
state is invalid. This ensures that if the presence state provider
is loaded later we will get the updated state when asked.
The func_presencestate module is written to publish the persisted
custom presence states at load time. This failed for entries with
a not_set state as this resulted in querying the presence provider
that was not yet registered. The provider is now registered before
this ensuring the update can be published.
This change also fixes an issue in PJSIP where a SUBSCRIBE for a
hint that had an invalid presence state configuration would not
send an initial NOTIFY. We now treat an invalid presence state as
not set instead.
extstate: Include causing device channel details in legacy callbacks.
Author: Joshua C. Colp
Date: 2026-09-29
When a legacy extension state callback registers it can optionally
do so in a way that it will receive the channel(s) that have caused
a device to ring. This is used in PJSIP for the dialog-info+xml
support so that phones can display who is calling the monitored
extension.
An issue was introduced in the extension state rewrite where this
did not occur for the actual device that caused the extension state
update. It was only being done for additional devices that could be
involved. This has been fixed so that it is now done for the causing
device.
Apple and The King’s Trust are building on their longstanding partnership by launching an immersive new education program to help young people move into the world of work.
“Tegenover mij zit Dafne Schippers. 34 jaar. We zitten bij mij thuis in de Achterhoek en zo konden de hondjes er namelijk makkelijk bij. En dat heeft een reden. Dafne is topatlete in ruste, sprintster in de buitencategorie. Ze liep jarenlang sneller dan de rest. Twee keer wereldkampioen op de 200 meter, 2015 en 2017. Deze gouden medailles hangen in een overvolle prijzenkast tussen Olympisch-, Europees- en Nederlands eremetaal.
Drie jaar geledne nam ze, geplaaagd door te veel rugpijn, afscheid. Ze was toen 31 jaar. In haar afscheidstweet schreef ze kort: ‘De race stopt hier’. Een leven van 12 jaar topsport. 12 jaar van manische interesse in honderste van sconden tijdswinst en alles wat daarbij komt kijken. Het zat erop. Dafne en ik hebben iets gemeen. Iets verdrietigs. Deze podcast heet Schuilen in Schoonheid, waar vind je troost in tijden van onmacht, pijn, verdriet, spanning? Wij vonden dat allebei bij onze hond en we zijn allebei onze hond bij een treinongeluk verloren.”
In Schuilen in Schoonheid spreekt Matthijs van Nieuwkerk met spraakmakende gasten over tegenslag en de schoonheid van het leven. Aan de hand van de drie schuilplaatsen van zijn gast, onderzoekt Matthijs wat weerbaarheid inhoudt. Gasten delen de plekken, rituelen en kunstwerken waar zij troost in vinden.
Op de hoogte blijven van alles rondom deze podcast? Volg ons op Instagram via @matthijsvannieuwkerk en TikTok @schuileninschoonheid. Dit is een podcast van Dag en Nacht. Adverteren in deze podcast? Kijk op adverteren.podimo.nl voor alle mogelijkheden.