<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog Feed</title>
    <link>https://obsproject.com/blog</link>
    <lastBuildDate>Fri, 28 Mar 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://obsproject.com/blog/rss" rel="self" type="application/rss+xml" />
            <item>
      <title>OBS Studio 31.0 Release Notes</title>
      <link>https://obsproject.com/blog/obs-studio-31-0-release-notes</link>
      <guid>https://obsproject.com/blog/obs-studio-31-0-release-notes</guid>
      <pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate>
      <description><![CDATA[<p><em><strong>Note</strong>: NVIDIA users may need to update their GPU drivers to 551.76 (Windows) / 550.54.14 (Linux) or newer. NVIDIA Kepler (600 and 700 series) GPUs are no longer supported for NVENC.</em></p>
<p><em><strong>Note</strong>: The code signing certificate for OBS has been updated. This may impact game capture compatibility with some anti-cheat solutions with this OBS update. If you are a game or anti-cheat developer please see <a href="https://obsproject.com/Capture Hook Certificate Update">obsproject.com/kb/capture-hook-certificate-update</a> on our knowledge base for more information.</em></p>
<h3>New Features</h3>
<ul>
<li>Added NVIDIA Blur Filter and Background Blur [pkviet]</li>
<li>Added preview scrollbars and zoom/scale indicator [cg2121/Warchamp7]</li>
<li>Added v210 format support for AJA device capture [paulh-aja]</li>
<li>Added Amazon IVS service integration [palana]</li>
<li>Added QSV AV1 Screen Content Coding [thyintel]</li>
<li>Enabled first-party YouTube Chat features [msuman-google]</li>
</ul>
<h3>General Changes</h3>
<ul>
<li>Updated the browser source/docks CEF (Chromium) to version 127 (6533) on all platforms [reitowo/WizardCM/PatTheMav/tytan652/pkviet/kkartaltepe/Lain-B]</li>
<li>Changed scene items to use relative coordinates [derrod]<ul>
<li>Existing scene collections will be automatically converted to use relative coordinates if the scene collection has a known output resolution set.</li>
</ul>
</li>
<li>Split NVIDIA Audio Effects from Noise Suppression [pkviet]<ul>
<li>Existing filters will be automatically migrated.</li>
</ul>
</li>
<li>Changed the Image Slideshow's Playback Mode property from radio buttons to a dropdown [derrod]</li>
<li>Disabled the (currently unsupported) built-in Automatic Scene Switcher when using Wayland on Linux [tytan652]</li>
<li>Improved error messages for macOS Virtual Camera [jcm93]</li>
<li>Changed Display and Window capture on Windows to not capture the first found display or window [Lain-B]   </li>
<li>Changed display and window capture on Linux to not capture implicitly [Lain-B]</li>
<li>Added a warning to Window Capture when trying to capture WinUI 3 applications with BitBlt [qhy040404]</li>
<li>Refactored the NVENC implementation with various improvements [derrod]<ul>
<li>SDK 12.2 features, such as split encoding, are now supported.</li>
<li>Additional features from old SDKs are supported:<ul>
<li>B-Frames as reference</li>
<li>Target Quality VBR mode (CQVBR)</li>
</ul>
</li>
<li>A custom options field has been added to allow setting more options that don't warrant their own UI elements.</li>
</ul>
</li>
<li>Improved screensaver inhibit functions on Linux in Flatpak [tytan652]</li>
<li>Changed scripts to correctly pass settings to modified callbacks on reload [Penwy]</li>
<li>Removed legacy QSV code for old devices (Haswell or older) [RytoEX]</li>
<li>Removed legacy QSV code for Windows 7 [RytoEX]</li>
<li>Removed default desktop audio device on macOS 13+ [jcm93]</li>
<li>Removed NVIDIA Kepler GPU support for NVENC [derrod]</li>
<li>Removed FTL support [derrod]</li>
<li>Removed legacy migrations from OBS Studio 28.1 and earlier [derrod]<ul>
<li>If updating from these older versions, you may wish to update to OBS Studio 30.2 first, and then update to OBS Studio 31.</li>
</ul>
</li>
<li>Removed support for Ubuntu 22.04 [derrod]</li>
<li>Removed legacy YouTube chat [gxalpha]</li>
<li>Blocked TikTok Virtual Camera from loading in OBS due to known issues [notr1ch]</li>
<li>Application settings have been split into "app" configuration and "user" configuration, rather than storing everything in global.ini [PatTheMav]</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fixed two crashes with the QSV encoder on Linux [kkartaltepe]</li>
<li>Fixed a crash with a race condition involving multitrack video output reconnect [dsaedtler]</li>
<li>Fixed two potential crashes in Linux Window Capture [Lain-B]</li>
<li>Fixed a crash on macOS that could occur if an audio device was disconnected [jcm93]</li>
<li>Fixed a crash on Windows when capturing D3D12 games [confusionattack/Lain-B]</li>
<li>Fixed a crash on Linux when importing a scene collection created on Windows [SarenDev]</li>
<li>Fixed a crash on Windows when capturing a Vulkan application [Charlese2]</li>
<li>Fixed a deadlock in MP4 muxer [derrod/notr1ch]</li>
<li>Fixed a deadlock when shutting down muxer [exeldro]</li>
<li>Fixed a potential deadlock when stopping an encoder [derrod]</li>
<li>Fixed a potential memory error and crash in text parser [fzwoch]</li>
<li>Fixed a couple minor memory leaks [pkviet]</li>
<li>Fixed a memory leak in PipeWire plugin [dimtpap]</li>
<li>Fixed a memory leak when playing an HDR media file [tt2468]</li>
<li>Fixed an issue on FreeBSD with handling SSL certificates [emaste]</li>
<li>Fixed an issue with pressed button color in the Rachni theme [shiina424]</li>
<li>Fixed an issue with some missing icons in the System theme [shiina424]</li>
<li>Fixed an SRT listener bug where the socket was not closed properly [pkviet]</li>
<li>Fixed an issue where the current scene collection could be erased to default when trying to switch to a different scene collection that's corrupted or invalid [derrod]</li>
<li>Fixed a buffer overrun in UTF-8 text conversion [derrod]</li>
<li>Fixed an issue that could cause bitrate spikes in QSV CBR [thyintel]<ul>
<li>Note: This fix only applies to Lunar Lake or newer except Alder Lake N.</li>
</ul>
</li>
<li>Fixed an issue where the Auto Configuration Wizard could unintentionally enable Enhanced Broadcasting [lexano-ivs]</li>
<li>Fixed issues with the audio clipping indicators displaying incorrectly on volume meters [norihiro]</li>
<li>Fixed an issue causing hotkeys to register inconsistently on macOS [jcm93]</li>
<li>Fixed an issue causing multitrack video output to fail if color format was set to I444 [dsaedtler]</li>
<li>Fixed an issue where Custom CSS in browser sources no longer worked with certain websites (namely YouTube chat) [vvto33]</li>
<li>Restored STUN support for WHIP output [mondain]</li>
</ul>]]></description>
    </item>
        <item>
      <title>Our Plan to Stop Confusing Everyone with OBS Studio Versioning</title>
      <link>https://obsproject.com/blog/obs-studio-versioning-changes</link>
      <guid>https://obsproject.com/blog/obs-studio-versioning-changes</guid>
      <pubDate>Mon, 21 Oct 2024 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>With OBS Studio 31 on the horizon, it’s a good time to reflect on how our release process works and how we’ve been handling versioning. Over the years, we've experienced a lot of growth, and it’s been a journey to find the right balance between new features, stability, and clarity in how we label our releases.</p>
<h3>A Decade of Growth</h3>
<p>OBS has been around for over ten years now, and in that time, it has grown significantly in terms of functionality, code complexity, and community size. With this growth came challenges, both in development and organization. While it’s a great problem to have, figuring out how to manage these growing pains hasn’t always been easy. </p>
<p>One of the areas that needed attention was our release process and versioning methods. Up until recently, we lacked a clear, consistent approach to how we numbered our releases. But with version 30, we’ve started to follow proper <strong>Semantic Versioning (SemVer)</strong> a lot more strictly.</p>
<h3>What Is Semantic Versioning?</h3>
<p><strong>Semantic Versioning</strong> is a system for labeling software versions in a logical, consistent way. It communicates the significance of changes so users and developers know what to expect from an update.</p>
<p><strong>MAJOR.MINOR.PATCH</strong><br />
<em>Ex. 30.0.1</em></p>
<ul>
<li><strong>MAJOR</strong>: Big, breaking changes that may affect how you interact with the software or require developers to adjust their code.</li>
<li><strong>MINOR</strong>: New features and improvements that don’t break anything but add something new.</li>
<li><strong>PATCH</strong>: Hotfixes and other bugs that need attention before other releases</li>
</ul>
<h3>Our Journey with Versioning</h3>
<p>In the past, our versioning was a bit… loose. We didn’t have a strict structure or consistency in deciding when to release a new version or how to label it. Releases would come when we felt there were enough new features or fixes to warrant one, and we’d assign a version number based on how significant we thought the changes were.</p>
<p>Sometimes a <strong>MAJOR</strong> version would include breaking changes, and other times it was simply a feature-packed release we wanted to highlight. This inconsistency could be confusing, and moving forward, we’ve committed to using <strong>MAJOR</strong> version numbers strictly for updates that fundamentally change how you use OBS or affect developers by modifying the API or dependencies.</p>
<p>A great example of why this change was needed is OBS 28.0. That release included an update to the UI framework we use, which broke compatibility with several plugins. In hindsight, our inconsistent use of <strong>MAJOR</strong> version bumps muddied the significance of this update, causing frustration among both users and developers. By sticking more closely to Semantic Versioning, we hope to avoid these kinds of issues in the future.</p>
<h3>What This Means for You</h3>
<p>Going forward, you can expect <strong>MINOR</strong> version bumps to be more common. We’re aiming to limit <strong>MAJOR</strong> breaking updates to about once a year, though that timeline could shift to be more or less depending on the needs of the project. </p>
<p>To be clear, this doesn’t mean the project is slowing down. In fact, it’s quite the opposite. With clearer planning and more predictable versioning, we’ll be able to manage releases more efficiently. In the past 10 years, we’ve reached version 30, but over the next decade, we may not even hit version 40, simply because <strong>MAJOR</strong> releases will be less frequent. This is just a visual change to how we label updates, not a reflection of the pace or size of our changes.</p>
<h3>Our Release Schedule</h3>
<p>Alongside our commitment to more structured versioning, we’re also working toward a more predictable release schedule. While we’re not enforcing strict deadlines for features or updates yet, we’re aiming for new releases roughly every 4 months. This loose schedule gives contributors and users a better idea of when to expect new features and fixes, without sacrificing quality by rushing development.</p>
<p>As we move forward, we’re excited to bring more structure to the OBS Studio release process, giving you clearer communication on what’s coming and when. By adopting a more standardized approach to versioning and scheduling, we hope to make OBS even better for both everyday users and developers who rely on it. We’re thrilled about what’s coming in version 31 and beyond—stay tuned!</p>]]></description>
    </item>
        <item>
      <title>OBS Studio 30.2 Release Notes</title>
      <link>https://obsproject.com/blog/obs-studio-30-2-release-notes</link>
      <guid>https://obsproject.com/blog/obs-studio-30-2-release-notes</guid>
      <pubDate>Fri, 12 Jul 2024 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>This release brings some visual updates to the UI, a new Hybrid MP4 recording format, a wide array of fixes and improvements, as well as multitrack video output.</p>
<p><em><strong>Note</strong>: NVIDIA users may need to update their GPU drivers to 531.61 (Windows) / 530.41.03 (Linux) or newer.</em></p>
<p><em><strong>Note</strong>: The code signing certificate for OBS is being updated. This may impact game capture compatibility with some anti-cheat solutions starting with the next major OBS update. If you are a game or anti-cheat developer please see <a href="https://obsproject.com/kb/capture-hook-certificate-update">https://obsproject.com/kb/capture-hook-certificate-update</a> for more information.</em></p>
<h3>New Features</h3>
<ul>
<li>Added support for Multitrack Video streaming [palana]<ul>
<li>On Twitch, this is known as Enhanced Broadcasting. For more information, see: <a href="https://help.twitch.tv/s/article/multiple-encodes">https://help.twitch.tv/s/article/multiple-encodes</a></li>
<li>The supported audio channel configurations are stereo or mono.</li>
<li>This feature is currently only available on Windows and requires an NVIDIA GTX 900, GTX 10, or RTX 20 series GPU or newer or an AMD RX 6000 series GPU or newer. Support for other operating systems and GPU vendors is planned.</li>
<li>When this feature is enabled, the following data about your system will be sent to the streaming service when starting a stream:<ul>
<li>OBS version and audio/video settings (resolution, framerate, audio channels/tracks)</li>
<li>CPU info (name, speed, core counts)</li>
<li>GPU info (model, memory, driver version, device ID, vendor ID)</li>
<li>Memory info (free, total)</li>
<li>OS info (name, version, arch, emulation)<ul>
<li>Windows info (gaming feature status: Game Bar, Game DVR, Game Mode, Hardware-accelerated GPU Scheduling)</li>
</ul>
</li>
<li>Multitrack Video settings (maximum streaming bandwidth, maximum video tracks)</li>
</ul>
</li>
</ul>
</li>
<li>Added support for Enhanced RTMP/FLV multi-track audio and video [palana/kc5nra]<ul>
<li>Replaces the old metadata-based "VOD Track"</li>
</ul>
</li>
<li>Added "Hybrid MP4" output format (BETA) [derrod]<ul>
<li>Combines fault-tolerance of fragmented MP4 with wide compatibility and faster access times of regular MP4. For more information, see: <a href="https://obsproject.com/kb/hybrid-mp4">https://obsproject.com/kb/hybrid-mp4</a></li>
<li>Supports inserting chapter markers into the file via a hotkey or API. These markers are supported by most video players and editing software, such as DaVinci Resolve</li>
</ul>
</li>
<li>Added Linux support to the native NVENC encoder [derrod]<ul>
<li>NVENC AV1 is now supported on Linux</li>
</ul>
</li>
<li>Added Linux shared texture support to the NVENC encoder [derrod]</li>
<li>Added Linux shared texture support to the QuickSync encoder [kkartaltepe]</li>
<li>Added Linux shared texture support to the VA-API encoder [nowrep]</li>
<li>Added HEVC support to WebRTC output [murillo128]</li>
<li>Added Composable Themes system to simplify theme creation, maintenance, and enable future customization options [derrod/Warchamp7]<ul>
<li>Themes now consist of a base theme and variants that can be switched between in the new "Appearance" settings tab</li>
<li>Old themes will no longer work and will need to be updated to the new system. See the wiki page for details: <a href="https://github.com/obsproject/obs-studio/wiki/OBS-Studio-Theme-System">https://github.com/obsproject/obs-studio/wiki/OBS-Studio-Theme-System</a></li>
<li>The legacy System theme is no longer available. If it was used for accessibility reasons with high contrast, enable high contrast in your operating system settings to re-enable the OBS System Theme. OBS can only detect high contrast on Windows and macOS at this time.</li>
</ul>
</li>
</ul>
<h3>General Changes</h3>
<ul>
<li>Various UI and Theme tweaks [Warchamp7]</li>
<li>Audio of multiple instances of a source in a scene/group is now deduplicated [derrod]<ul>
<li>Deduplication is recursive, but does not apply on groups or nested scenes that are currently playing show/hide transitions, this may be fixed in the future</li>
</ul>
</li>
<li>Scene Collection specific plugin data is now retained for plugins that are not currently loaded [derrod]</li>
<li>Closed-captions are now supported for HEVC and AV1 [jhnbwrs]</li>
<li>Qt Fusion style is now always enforced on Linux [tytan652]</li>
<li>Combined PipeWire window/display capture into unified "Screen Capture" source to align with other platforms [tytan652]<ul>
<li>Renamed "Screen Capture (XSHM)" as "Display Capture (XSHM)" for consistency with other capture sources [tytan652]</li>
</ul>
</li>
<li>Set default recording format on macOS to fragmented MOV [gxalpha]</li>
<li>Improved freetype2 text source performance [kkartaltepe]</li>
<li>File open dialogs now start in the directory of the currently selected file, rather than the default [Warchamp7]</li>
<li>Moved warnings in advanced output to bottom of settings window for better visibility [GPattenden]</li>
<li>Various performance improvements for texture encoding [kkartaltepe]</li>
<li>Prioritize NVDEC decoder on NVIDIA systems [moocowsheep]</li>
<li>Support NVDEC decoder for encoded DirectShow sources [moocowsheep]</li>
<li>Replaced non-texture NVENC FFmpeg fallback with native implementation [derrod]</li>
<li>Log now includes all available encoders [Penwy]</li>
<li>Reset duration of scene item show/hide transitions when removing the transitions [Warchamp7]</li>
<li>Adjusted appearance of volume meters [Warchamp7]</li>
<li>Adjusted appearance of multiview borders and labels [Warchamp7]</li>
<li>Added support for audio-only and video-only WHIP outputs [tt2468]</li>
<li>Changed default container in non-macOS OBS Beta builds from Fragmented MP4 to Hybrid MP4 [derrod]</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fixed packet priority not being set for some AV1 encoders, resulting in outputs never recovering from dropping frames [derrod]</li>
<li>Fixed various issues with audio channel layouts in (remuxed) recordings [pkv/derrod]</li>
<li>Fixed various issues with the native FLV muxer [palana]</li>
<li>Fixed various issues with the RTMP protocol implementation [palana]</li>
<li>Fixed minor errors in HEVC and AVC decoder configuration records [derrod]</li>
<li>Fixed change discard confirmation dialog popping up twice when closing source properties [tytan652]</li>
<li>Fixed QSV AV1 on multi-GPU systems [thyintel/derrod]</li>
<li>Fixed FFmpeg output erroneously checking disk space when not writing to a file [RytoEX]</li>
<li>Fixed auto-config wizard not working without a stream key [mar10iana]</li>
<li>Fixed text alignment with extents [exeldro]</li>
<li>Fixed encoder properties having nested scroll areas in output settings [derrod]</li>
<li>Fixed crash if input video resolution changes when using hardware-accelerated decoding [tt2468]</li>
<li>Fixed button text being cut off in controls dock [powersagitar]</li>
<li>Fixed undo action for filters showing UUID instead of name [derrod]</li>
<li>Fixed not all eligible Patreon supporters being shown in the "About" dialogue [Warchamp7]</li>
<li>Fixed copy-pasting show/hide transitions not including duration [Warchamp7]</li>
<li>Fixed settings dialog being cut off on low-resolution screens [tytan652/Warchamp7/derrod/RytoEX] (yes, this one took four people to figure out)</li>
<li>Fixed paused indicator text stacking [Aleksbgbg]</li>
<li>Fixed disabled audio sources showing up in advanced audio properties [Penwy]</li>
<li>Fixed Grid Mode setting not being persisted when enabled through the View menu [RytoEX]</li>
<li>Fixed CoreAudio not handling encoder delay, resulting in audio being 44-48 ms late [derrod]</li>
<li>Fixed OBS not handling negative audio timestamps at the start of an output correctly, resulting in Opus and CoreAudio AAC audio being delayed by a few ms [derrod]</li>
<li>Fixed VA-API AV1 encoder being unavailable if H.264 is unsupported [kkartaltepe]</li>
<li>Fixed WebRTC buffer size being too small for recovery with high-bitrate video [Sean-Der]</li>
<li>Fixed renaming multiple scenes when hitting Tab key while renaming [howellrl]</li>
</ul>]]></description>
    </item>
        <item>
      <title>Writing an MP4 Muxer for Fun and Profit</title>
      <link>https://obsproject.com/blog/obs-studio-hybrid-mp4</link>
      <guid>https://obsproject.com/blog/obs-studio-hybrid-mp4</guid>
      <pubDate>Fri, 12 Jul 2024 00:00:00 +0000</pubDate>
      <description><![CDATA[<h5><center>(Except there is no profit, only pain)</center></h5>
<p>In OBS 30.2 I introduced the new "Hybrid MP4" output format which solves a number of complaints our users have had for pretty much all of OBS's existence; It's resilient against data loss like MKV, but widely compatible like regular MP4.</p>
<p>Getting here was quite a journey, and involved fixing several other bugs in OBS that were only apparent once diving this deep into how the audio and video data is stored.</p>
<p>In this post I'll try to explain how MP4 works, what the drawbacks were to regular/fragmented MP4, and how I tried to solve them with a hybrid approach.</p>
<h2>QTFF, BMFF, WTF</h2>
<p>The MP4 file format we all know and love today is based on Apple's <a href="https://en.wikipedia.org/wiki/QuickTime_File_Format">"QuickTime File Format" (QTFF)</a> - mostly just known as "MOV" - which was originally created in the 90s. It was adapted by the International Organization for Standardization (ISO) to create the <a href="https://en.wikipedia.org/wiki/MP4_file_format">MP4 File Format</a> in 2001, then later split up into the more generic <a href="https://en.wikipedia.org/wiki/ISO_base_media_file_format">"Base Media File Format" (ISO BMFF)</a> and an MP4 extension containing MPEG-specific features.</p>
<p>Since then, MP4 has undergone numerous updates and extensions over the years to support new codecs and more specialised use cases. The extensible nature of the base format also means that various users of MP4, such as Apple, have added extensions to support various other features such as DRM, 3D video and more.</p>
<h2>The Trouble with <del>Tribbles</del> MP4</h2>
<p>While MP4 is very widespread and supported by almost anything under the sun, there are some issues specific to the use case of recording live video to disk. To explain those, let's first go over the basic structure of an MP4 file, as that will help make sense of what was required to make Hybrid MP4 work.</p>
<p>At its core an MP4 file is made up of objects known as "Boxes" in ISO, or "Atoms" in Apple terminology. Each box consists of a header containing its size and a four-letter name/type, followed by its data. Most boxes contain data structures defined in ISO/Apple specifications, but some are containers for other boxes. This allows for a hierarchical structure of the file and makes it easy to extend the format by introducing new boxes containing additional information without breaking backwards compatibility with existing software. For the purposes of this blog post, however, we'll only be looking at what are known as "top-level boxes", i.e. boxes that are written directly into the file and are not contained within other boxes.</p>
<figure><img alt="MP4 Diagram" src="https://obsproject.com/media/pages/blog/obs-studio-hybrid-mp4/4e708fd0e3-1721156355/blog_mp4_transparent_fixed.png"></figure>
<p>A typical MP4 file produced by OBS or FFmpeg will contain four top-level boxes:</p>
<ul>
<li><code>ftyp</code> - File Type Box: Contains information about the the standard version(s) used in the file</li>
<li><code>free</code> - Free Space Box: Placeholder that should be ignored/skipped over</li>
<li><code>mdat</code> - Media Data Box: Contains data for media tracks (audio, video, etc.)</li>
<li><code>moov</code> - Movie Box: Contains other boxes with metadata for the file and media tracks</li>
</ul>
<p>There are two things here that create the main problem we have with MP4: The <code>moov</code> sits at the end and is written when finalising the file, and it is required to be able to make sense of the data contained in the <code>mdat</code> box. This means that if the writing of the file gets interrupted for any reason (BSOD, disk full, power loss, etc.) and the <code>moov</code> box is not written, the file is extremely difficult - if not impossible - to recover. This is obviously very bad™ if you just recorded your best ever clutch in Counter-Strike but then your disk space ran out and now you don't have any proof of it ever happening!</p>
<p><em><strong>Note about the <code>free</code> box since it will become important later:</strong> The size field in the box header is limited to 4 GiB. In order to have an <code>mdat</code> box larger than that, an extended size field needs to be used, which increases the size of the header. FFmpeg and OBS will write the placeholder so that it can be overwritten to writer a longer <code>mdat</code> header should it become necessary.</em></p>
<p>This leads us into the next part, which details the first attempt at solving this problem...</p>
<h2>Fragmented Frustration</h2>
<p>Some time ago the ISO format was extended with support for splitting media data into "Fragments", this is commonly referred to as "Fragmented MP4". These fragments can be split out into separate files as well, which is mainly used when streaming video over the internet, whether live on Twitch<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref">1</a></sup> or films on Netflix. The details of that are beyond the scope of this post, but you can learn more about why this is done and its advantages for streaming use cases by reading more about <a href="https://en.wikipedia.org/wiki/HTTP_Live_Streaming">HLS</a> and <a href="https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP">DASH</a>.</p>
<p>What's relevant for us is that a fragmented file has an "incomplete" <code>moov</code> that only contains the basic information necessary for decoding each track, with the information about specific samples (video frames, audio segments) contained in a fragment being stored in the <code>moof</code> (Movie Fragment Box) at the start of each fragment.</p>
<figure><img alt="Fragmented MP4 Diagram" src="https://obsproject.com/media/pages/blog/obs-studio-hybrid-mp4/be0b883d12-1720813902/blog_fmp4_transparent.png"></figure>
<p>This is useful for the OBS recording use case because it means that a file no longer relies on a single <code>moov</code> containing all the information about the media data in the file. Each fragment only needs it's own <code>moof</code> box + the incomplete <code>moov</code> at the beginning to be played back correctly. This means that if the writing of the file is interrupted (e.g. due to a power failure), everything up to the last fragment will still be readable, solving the data loss problem of regular MP4 files.</p>
<p>Sounds too good to be true, doesn't it? Well, there are some significant downsides that ultimately caused us to stop using fragmented MP4 as the default pretty quickly:</p>
<ol>
<li>Fragmented files are still not well supported in various applications, including editors and players</li>
<li>They are slow to access on HDD or network drives, as each fragment's header needs to be read to get the complete metadata of the file and start playback</li>
<li>File browsers such as the Windows explorer do not show the file duration due to 2.</li>
<li>Some players (e.g. the default Windows Media Player) do not allow seeking in the file due to 2. and will instead play it back like a livestream</li>
</ol>
<p>Of course this can be fixed by remuxing the file, but that just brings us right back to where we started with MKV. There has to be a better way...</p>
<h2>Hybrid Harmony</h2>
<p>Quite a while ago I had a simple though: What if we just "finalise" a fragmented file with a full <code>moov</code> so that it behaves like a regular MP4? Then finally a few months ago I started to actually explore this idea which evolved into what we now know as "Hybrid MP4".</p>
<p>While the recording is running, a hybrid file is really just a fragmented MP4, retaining the resilience against data loss, but when the recording stops, it is quickly modified to appear like a normal MP4. I called this process a "soft remux" because it only needs to overwrite a small part of the file to achieve similar results to fully remuxing a file.</p>
<p>To do this, a full <code>moov</code> is written at the very end of the file that indexes the media data exactly like a normal MP4 would, and the placeholder <code>free</code> box at the start is overwritten with an <code>mdat</code> header that turns the entire file up to the newly written <code>moov</code> box into one giant Media Data box, thus effectively hiding the fragments from a reading application. This means we're now left with a file that <em>appears</em> to be a regular MP4, when it's actually fragmented inside!</p>
<figure><img alt="Hybrid MP4 Diagram" src="https://obsproject.com/media/pages/blog/obs-studio-hybrid-mp4/9d3498e6ea-1720813902/blog_hybrid_transparent.png"></figure>
<p>The hybrid approach ultimately addresses all the problems we had by combining the best of both worlds. If a file is not finalised you still have a valid fragmented MP4 that can be remuxed if necessary, and if it is finalised, well, for all intents and purposes it's just a regular old MP4.</p>
<p>And that's pretty much it. This idea went through a few rounds of iteration and improvement, this post only details the final version that has shipped in OBS. It kind of hurts that several days of work and research can be summed up in a couple paragraphs, but that's what the "pain" part in the subtitle is for.</p>
<h2><a href="https://en.wikipedia.org/wiki/Big_Buck_Bunny#Legacy">Big Buck Bunny</a> Holes</h2>
<p>The process of building this implementation took me down quite a few rabbit holes, as it required me to learn a lot of low-level details about how audio and video data is stored in files, and sometimes left me wondering why my results were different from the references I was using. This section contains some fun and some not so fun examples of things I encountered while working on the Hybrid MP4 output.</p>
<h3>Chapter Markers</h3>
<p>Markers are one of the headline features that Hybrid MP4 adds over the existing FFmpeg-based output. Don't get me wrong, FFmpeg <em>does</em> support these as well, but we never implemented it. But while I was doing this I figured this might be a good time to get it done, and will give users a nice incentive to actually use and test it.</p>
<p>The MP4 standard itself actually does not define anything for chapter markers, they are entirely based on Apple's QuickTime specification, and even then it seems to be only <em>mostly</em> documented. The implementation in OBS is directly adapted from FFmpeg, and should work in all the same software that it does like video players and some editing suites such as DaVinci Resolve. Sadly this does not include Adobe Premiere or Final Cut Pro, but there may be tools coming to make it a bit easier for those users!</p>
<h3>Additional Metadata</h3>
<p>While I was at it I figured I can add some additional metadata to each media track and the file itself, such as the encoder configuration<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref">2</a></sup>, so I did! This is particularly useful when you're testing different settings and want to compare them later, but don't want to have to rename the file after every test. Files now also contain a correct creation/encoding date so even if you rename them you can still track when a file was originally recorded.</p>
<h3>Multi-Track Video</h3>
<p>The new MP4 output now also supports multiple video tracks alongside multiple audio tracks, this is great for debugging features such as Twitch's <a href="https://help.twitch.tv/s/article/multiple-encodes">Enhanced Broadcasting</a> by having a single file with all the video streams that can be easily switched between in players such as MPC-HC.</p>
<p>So it's not super useful for the average user <em>yet</em>, but hopefully we can make use of it in the future for things such as ISO recording (well, if we can also convince video editors to support it...).</p>
<h3>Audio Encoder Delay and why your audio might've been out of sync for the last few years</h3>
<p>AAC and Opus audio both have something called "priming" samples, this is a few milliseconds of silence at the start of an audio stream used to "warm up" the encoder, which should be skipped when playing back the file. Audio packets containing priming samples have a negative timestamp, indicating (part of) the audio they contain should be skipped during playback. There were two separate issues in OBS related to this:</p>
<ol>
<li>Audio packets with timestamp &lt; 0 would be discarded until the one with a closest timestamp &lt;= 0 is found, which would then have its timestamp "corrected" so that the stream always starts at 0, thus including the delay in the output and causing it to be slightly out of sync</li>
<li>The CoreAudio AAC encoder implementation did not subtract the delay from timestamps at all, thus audio always being delayed by 40-44 ms (at 48/44.1 kHz)</li>
</ol>
<p>Issue 1. happened to <strong>not</strong> affect the default audio encoder (FFmpeg AAC), as it uses a delay equivalent to packet duration, meaning the first packet with actual audio already starts at 0. Opus on the other hand would produce a first packet with a timestamp of -312 with the next one being 648, OBS would then "correct" the packets to 0 and 960 respectively and would result in the 312 samples of silence being included and the audio being ~6.5 ms late.</p>
<h2>Coincidental Collaboration</h2>
<p>Just a few days after we merged the Hybrid MP4 feature into OBS the FFmpeg maintainer Martin <a href="https://ffmpeg.org/pipermail/ffmpeg-devel/2024-May/328600.html">submitted a patch</a> that adds a similar feature to FFmpeg's MOV/MP4 muxer. This was entirely coincidental, and includes a note that Apple apparently did something like this already, which just proves that great minds do indeed think alike 😛.</p>
<p>This has now also been merged into FFmpeg as well, meaning it's already available in git builds and will hopefully soon make it's way into a stable release!</p>
<p><em>Note: The FFmpeg implementation is slightly different, and the OBS version has a few more safety nets just in case. It's still great to have though!</em></p>
<h2>MOV-ing Forward</h2>
<p>While MP4 is great for many things, it lacks some of the features and codec support available in it's ancestor QTFF (or MOV). Adding a "Hybrid MOV" mode is the next step to truly making it the new default in OBS. This primarily requires dealing with some of the differences between MOV and MP4 with things like PCM audio, differently implemented metadata structures, and also support for the ProRes codec. I'm hoping this can be done in time for OBS 31.0 if everything goes well!</p>
<p>A few other things that I'd like to work on for future improvements:</p>
<ol>
<li>Better accuracy for chapter marker timestamps (needs OBS backend updates)</li>
<li>Support for writing a timecode (<code>tmcd</code>) track (requires the same backend updates as 1.)</li>
<li>Support for configurable fragment duration, rather than always fragmenting on keyframes (particularly important for intra-only codecs such as ProRes)</li>
<li><em>(Maybe)</em> Built-in utility for exporting chapter markers in different formats for easier use in Premiere, etc.</li>
<li><strong>(Big Maybe)</strong> Support for embedded <a href="https://en.wikipedia.org/wiki/Extensible_Metadata_Platform">XMP</a> metadata for markers in Premiere</li>
</ol>
<h2>Thanks &amp; Acknowledgements</h2>
<ul>
<li>FFmpeg and its contributors for documenting the undocumented</li>
<li>GPAC for mp4box.js, which has been invaluable for debugging my muxer and inspecting its output</li>
<li>Apple's old QTFF documentation for actually being really good and having great explanations for concepts such as priming samples</li>
<li><strong>NOT</strong> the ISO for paywalling these specs and making it a god damn paperchase where every time you get one document it references three others that are also paywalled</li>
</ul>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
<p>Twitch currently only uses fragmented MP4 for HEVC/AV1 video, for H.264 it uses the <a href="https://en.wikipedia.org/wiki/MPEG_transport_stream">MPEG transport stream</a> container&#160;<a href="#fnref1:1" rev="footnote" class="footnote-backref">&#8617;</a></p>
</li>
<li id="fn:2">
<p>See the <a href="https://obsproject.com/kb/hybrid-mp4">Knowledge Base article</a> for details on how to enable the encoder metadata.&#160;<a href="#fnref1:2" rev="footnote" class="footnote-backref">&#8617;</a></p>
</li>
</ol>
</div>]]></description>
    </item>
        <item>
      <title>YouTube Renews Premier Sponsorship of the OBS Project</title>
      <link>https://obsproject.com/blog/youtube-renews-premier-sponsorship-of-the-obs-project</link>
      <guid>https://obsproject.com/blog/youtube-renews-premier-sponsorship-of-the-obs-project</guid>
      <pubDate>Thu, 14 Mar 2024 00:00:00 +0000</pubDate>
      <description><![CDATA[<p><a href="https://www.youtube.com"><figure class="centered"><img alt="YouTube Logo" src="https://obsproject.com/media/pages/blog/youtube-renews-premier-sponsorship-of-the-obs-project/97f8c429a5-1710439256/yt_logo_mono_dark_small.png"></figure></a></p>
<p>We're excited to announce that YouTube has renewed their premier sponsorship of the OBS Project! Since they first partnered with us back in 2020, we've made some incredible progress together, both for the betterment of OBS, and the streaming community as a whole. Let's go over a few highlights from the past year that they have helped us accomplish to celebrate our continued partnership.</p>
<p>We partnered with YouTube to add support for streaming HEVC and AV1-encoded video over e-RTMP, the first update to the widely used protocol RTMP in over a decade. With the release of OBS 29.1 in May 2023, creators could use modern codecs to stream higher-quality video to YouTube using less bandwidth. To kick off 2024, we've added more e-RTMP features in OBS 30.1 (out now!), enabling creators to stream HDR content to YouTube using HEVC over e-RTMP.</p>
<p>We also collaborated with YouTube to embed a streamlined version of their Live Control Room panel as a dock within OBS. Released with OBS 30.0 in November 2023, this let creators monitor CCV and stream health, manage ads, insert stream markers, and more from OBS without the need to visit YouTube. Real-time content creation and streaming can be overwhelming, and we're happy that we can provide tools to ease the burden right in OBS. We're actively working with them and providing feedback to make this feature even better!</p>
<p>YouTube is a pillar of creativity in the internet community, serving as a nexus for people to share all kinds of content, including live performances, live streams of video game content, educational resources, product reviews, comedy sketches, and much more. It pioneered a new generation of video content across TV, computer and mobile devices, while also providing a platform that allows anyone to create and grow a career out of video content creation.</p>
<p>The OBS Project team is proud to have a role in serving content creators on YouTube with free and open source tools, and are incredibly grateful to YouTube for supporting us as we continue to meet those needs!</p>]]></description>
    </item>
        <item>
      <title>OBS Studio 30.1 Release Notes</title>
      <link>https://obsproject.com/blog/obs-studio-30-1-release-notes</link>
      <guid>https://obsproject.com/blog/obs-studio-30-1-release-notes</guid>
      <pubDate>Wed, 13 Mar 2024 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>If you would like to support the OBS Project, please consider contributing to our <a href="https://patreon.com/obsproject">Patreon</a> or <a href="https://opencollective.com/obsproject">Open Collective</a>!</p>
<h3>30.1 New Features</h3>
<ul>
<li>Enabled HDR for HEVC over RTMP [nquah]<ul>
<li>AV1 HDR is not currently supported by YouTube.</li>
</ul>
</li>
<li>Reworked the Image Slideshow source [Lain-B]<ul>
<li>The reworked Image Slideshow source loads files asynchronously and fixes an issue where the slideshow would loop before showing all images. To change existing Image Slideshow sources to the new version, you must recreate them. Existing Image Slideshow sources will continue functioning as before.</li>
</ul>
</li>
<li>Added Capture Audio option to window/game capture on Windows [derrod]</li>
<li>Added Premultiplied Alpha option for game capture on Windows [jpark37]</li>
<li>Added option for automatic cropping to bounding box [derrod]</li>
<li>Added maxRGB tonemapper for SDR in HDR Tone Mapping filter [jpark37]</li>
<li>Added GPU rescaling options for streaming and recording outputs [derrod]</li>
<li>Added channel selection for CoreAudio input devices [PatTheMav]</li>
<li>Added Capture Card Device source type on macOS [PatTheMav]</li>
<li>Enabled multi-track audio support for mpegts [pkviet]</li>
<li>Added AV1 support for VA-API [nowrep]</li>
<li>Added AV1 support for WebRTC/WHIP output [Sean-Der]</li>
<li>Added Video Capture Device (PipeWire) source type [GeorgesStavracas]</li>
</ul>
<h3>30.1 Changes</h3>
<ul>
<li>Added HDR support for the Elgato HD60 X Rev.2 [FBirth]</li>
<li>Added theme data search paths [derrod]</li>
<li>Added Lua script location to search path for Lua native libraries [Smartkin]</li>
<li>Added Python 3.11 support for macOS [PatTheMav]</li>
<li>Updated obs-websocket to version 5.4.2 [tt2468/Lain-B]<ul>
<li>Release notes for addition in 5.4.0 are here: <a href="https://github.com/obsproject/obs-websocket/releases/tag/5.4.0">https://github.com/obsproject/obs-websocket/releases/tag/5.4.0</a></li>
</ul>
</li>
<li>Improved simple mode replay buffer settings [gxalpha]</li>
<li>Switched to bigger units in the UI for high bitrate/large recordings [derrod]</li>
<li>Disabled Paste Transform on locked scene items [cg2121]</li>
<li>Disabled Edit Transform if scene item is locked [cg2121]</li>
<li>Removed Windows 7 and Ubuntu 20.04 NVENC fallbacks [derrod]</li>
<li>PCM audio in (fragmented) MP4/MOV is now supported [derrod]</li>
<li>Changed default recording format to fMP4/fMOV for stable releases [derrod]</li>
</ul>
<h3>30.1 Bug Fixes</h3>
<ul>
<li>Fixed crashes with the Virtual Camera on Windows when apps consumed it as YUY2 [vico-shang]</li>
<li>Fixed crash when loading Python at runtime on Windows [PatTheMav]</li>
<li>Fixed crash in Image Slideshow when adding a directory with no files in it [notr1ch]</li>
<li>Fixed crash on macOS when attempting to stream to a WHIP servers with certain configurations [RytoEX/Sean-Der]</li>
<li>Fixed crash when trying to stream with WebRTC/WHIP [CrackThrough]</li>
<li>Fixed a possible crash in Lua scripts when switching scene collections [exeldro]</li>
<li>Fixed a possible crash with WHIP output [Aleksbgbg]</li>
<li>Fixed deadlock when adding a macOS Screen Capture source [PatTheMav]</li>
<li>Fixed issue where OBS could be closed by docked browser panels [WizardCM]</li>
<li>Fixed high CPU usage with Virtual Camera on macOS [jcm93]</li>
<li>Fixed checkbox misalignment on macOS in properties view [nikola3211]</li>
<li>Fixed audio track 1 audio being offset/desynced with other tracks [derrod]</li>
<li>Fixed incorrect VST window size on HiDPI display [xlinshan]</li>
<li>Fixed editable list UI element having incorrect background-color [tuduweb]</li>
<li>Fixed the resize cursor with respecting the item transformation [BGM99]</li>
<li>Fixed disk space reporting for attached network drives on macOS [PatTheMav]</li>
<li>Fixed Safe Mode removing third-party transitions from scene collection [derrod]</li>
<li>Fixed being unable to use QSV in the Flatpak package [twelho]</li>
<li>Fixed audio track titles not being set in Custom FFmpeg Output [tuduweb]</li>
<li>Fixed an issue with free disk space calculation on ExFAT and FAT32 volumes on macOS [PatTheMav]</li>
<li>Fixed an issue with free disk space calculation on macOS not matching values in Finder [jcm]</li>
<li>Fixed an issue where a removed source's scene would not be correctly logged [exeldro]</li>
<li>Clarified the macOS microphone permissions prompt [jcm]</li>
<li>Fixed a regression causing a missing tooltip for Fragmented MOV/MP4 [shiina424]</li>
<li>Fixed an issue with the background of audio meters being transparent causing visual artifacts [fzwoch]</li>
<li>Fixed an issue with Yes/No buttons on the Reset Docks confirmation message box not being translated [shiina424]</li>
<li>Fixed an issue preventing the Remux dialog from being used multiple times [RytoEX]</li>
</ul>]]></description>
    </item>
        <item>
      <title>OBS Studio 29 Release Notes</title>
      <link>https://obsproject.com/blog/obs-studio-29-release-notes</link>
      <guid>https://obsproject.com/blog/obs-studio-29-release-notes</guid>
      <pubDate>Tue, 02 May 2023 00:00:00 +0000</pubDate>
      <description><![CDATA[<h2>OBS Studio 29.1</h2>
<h3>New Features and Additions</h3>
<ul>
<li>Added support for streaming AV1/HEVC over Enhanced RTMP [YouTube/yuriy-chunak/derrod]<ul>
<li>Enhanced RTMP V1 extends the RTMP protocol to support newer video codecs and HDR. More info at: <a href="https://github.com/veovera/enhanced-rtmp">https://github.com/veovera/enhanced-rtmp</a></li>
<li>Currently only supported by/enabled for YouTube as a beta feature</li>
<li>HDR is not yet implemented</li>
</ul>
</li>
<li>Added support for multiple audio tracks in Simple output recording [pkv]</li>
<li>Added a DLL blocking feature for Windows. This allows OBS to block problematic DLLs from attaching to OBS and causing freezing or crashes, for example 3rd party overlay hooks and outdated video capture devices. [notr1ch]<ul>
<li>This blocks old versions of popular VTubing software virtual cameras that are known to cause freezes when accessing video capture device properties. If you are affected, please update to the latest version of your VTubing software.</li>
</ul>
</li>
<li>Added settings to select the audio encoder for streaming and recording [tytan652]</li>
<li>Added an option to preload media sources used in Stingers to memory, to avoid frame skips during transitions [Lain]</li>
<li>Added Update Channels on macOS and updated Sparkle for smaller and faster updates going forward [derrod]</li>
<li>Added compatibility notices in the Window and Game Capture sources for Windows [derrod]</li>
<li>Added the ability to zoom browser docks with Ctrl - and + and the right click menu [WizardCM]</li>
<li>Added a setting to record in fragmented MP4 and MOV formats [derrod]<ul>
<li>These offer greater compatibility than MKV while providing similar resilience against data loss due to crashes, running out of space, etc.</li>
<li>Fragmented MP4 and MOV files can be remuxed to regular MP4/MOV in cases where the former may not be read correctly (e.g. in older editing software)</li>
</ul>
</li>
<li>Added support for surround sound for AJA capture cards [paulh-aja]</li>
<li>Added ProRes 4444 (XQ) support for VideoToolbox encoder on macOS [jpark37]</li>
<li>Added lossless audio recording options (FLAC/ALAC/PCM including 32-bit float) [derrod]</li>
<li>Added indicator if an audio source is unmuted, but not assigned to any audio tracks [derrod]</li>
<li>Added AMD AV1 encoder to simple output mode [notr1ch]</li>
</ul>
<h3>General Changes</h3>
<ul>
<li>Increased the minimum macOS version to macOS 11.0 [PatTheMav]</li>
<li>Output rescaling is ignored if the scaled resolution matches the current video output resolution [notr1ch]</li>
<li>NVENC error messages now include more details [notr1ch]</li>
<li>Changed the default FFmpeg AAC encoder to twoloop which has higher quality [norihiro]</li>
<li>Allow symbolic links for VST paths [tuduweb]</li>
<li>Implemented QVBR for AMF encoders [flaeri]</li>
<li>Expanded support for subtitle tracks in VLC source (up to 1000) [jjm2473]</li>
<li>The Hotkeys tab in settings is no longer loaded until switched to, resulting in the Settings window opening much faster for large scene collections [derrod]</li>
<li>Switched various internal data structures to use hash tables for lookups, resulting in significant performance and loading/saving time improvements with large scene collections [derrod]</li>
<li>Exported scene collection JSON is now pretty-printed and sorted, allowing for easier tracking via git or other versioning mechanisms [derrod]</li>
<li>Added a "What's New" entry in the help menu to manually open the post-update changelog dialog [derrod]</li>
<li>Clicking the "Defaults" button in properties will now ask for confirmation before resetting [derrod]</li>
<li>Improved Windows OBS updater speed and reduced download size by using Zstandard compression [derrod]</li>
<li>Added platform-specific "What's New" notifications to better communicate changes or issues not affecting all operating systems [derrod]</li>
<li>Added option to force SDR Window Capture capture in Windows 10+ mode [jpark37]</li>
<li>Improved YouTube thumbnail preview by using bilinear scaling [derrod]</li>
<li>Incompatible audio/video encoders will now be disabled based on the selected format [derrod]</li>
<li>Added HEVC and HDR support to VA-API encoder [yuriy-chunak]</li>
<li>Added HDR capture support for DeckLink sources [jpark37]</li>
<li>Video-related items in the right click menu of audio sources in the Sources list will no longer appear [cg2121]</li>
<li>Native macOS dialogs now respect OBS being set to dark themes [gxalpha]</li>
<li>Significantly improve screen capture performance on Intel dedicated GPUs on Linux [kkartaltepe]</li>
<li>JACK inputs on Linux will now display "OBS Studio" in their name to clarify their origin. This may cause existing configured devices to stop working until updated by the user [univrsal]</li>
<li>The system color selection dialog is now used on macOS [gxalpha]</li>
<li>Various improvements to the t-bar for a more predictable user experience [gxalpha]</li>
<li>Plugins installed system-wide are no longer loaded when OBS is run in Portable Mode [gxalpha]</li>
<li>Hardware Decoding of Media Sources can now use CUDA [rjgtav]</li>
<li>Improved DeckLink performance [jpark37]</li>
<li>Python 3.11 is now supported in Scripting [RytoEX]</li>
<li>Added FDK AAC support on Flatpak [tytan652]</li>
<li>Browser docks now provide a "Copy page address" option [WizardCM]</li>
<li>Increased the maximum resolution of browser sources to 8192x8192 [fungiboletus]</li>
<li>OBS Websocket has been updated to 5.2 [RytoEX]</li>
<li>Changed Add Source menu to sort case-insensitively [gxalpha]</li>
<li>Improved default buffering behavior for most Elgato video capture devices on Windows [FBirth]</li>
<li>Added codec logging for the QSV encoder [RytoEX]</li>
<li>Made hotkey edit layout margins symmetrical [gxalpha]</li>
<li>Added logging if the active encoder is incompatible with dynamic bitrate [pkv]</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fixed output silently not starting when using multi-track audio at higher frame rates [kkartaltepe]</li>
<li>Fixed dynamic bitrate changes not working when using NVENC presets p6 or p7 [pkv]</li>
<li>Fixed encoder settings not being updated if the encoder is changed in settings [tytan652]</li>
<li>Fixed a crash that could occur when using a video source that frequently changed its resolution (e.g. a VLC playlist) [notr1ch]</li>
<li>Fixed a crash that could occur when using streams in the media source (introduced in v29) [notr1ch]</li>
<li>Fixed an issue with negative gain in upward compressor [pkv]</li>
<li>Fixed several bugs in FFmpeg custom output related to color conversion [flaeri]</li>
<li>Fixed UI unresponsiveness when searching for hotkeys and duplicate key assignments in large collections [derrod]</li>
<li>Fixed an issue with RTMP timeouts that could cause a server to think OBS has cleanly ended the connection instead of it disconnecting due to an error, and not activating features like "disconnect protection" [notr1ch]</li>
<li>Fixed properties being cut off until window is resized [derrod]</li>
<li>Fixed portable Windows versions not restarting in portable mode after an update [derrod]</li>
<li>Fixed updating of an install being blocked by unrelated OBS instances running [derrod]</li>
<li>Fixed excessive config reads when sources are selected in the preview [derrod]</li>
<li>Fixed audio track assignments of sources provided by third-party plugins being reset when the plugin could not be loaded [derrod]</li>
<li>Fixed invalid rescaled resolutions being allowed when they shouldn't be [tuduweb]</li>
<li>Fixed presets in the Expander filter not applying changes immediately [tuduweb]</li>
<li>Fixed the virtual camera on Windows reporting the incorrect resolution to external apps, resulting in stretched images [exeldro]</li>
<li>Fixed the ability to drag and drop scenes after clicking Rename and not changing the name of the Scene [cg2121]</li>
<li>Fixed a crash on macOS that would occur when an external display with an active Projector was disconnected [PatTheMav]</li>
<li>Fixed an issue where remuxing a .ts file would fail [tuduweb]</li>
<li>Fixed an issue with the VLC source where large videos (e.g. 4K) would get squashed horizontally [CoalZombik]</li>
<li>Fixed spacing helpers appearing incorrectly when a source is rotated and flipped [cg2121]</li>
<li>Fixed an issue where the preview would display incorrectly when zoomed too far in either direction [cg2121]</li>
<li>Fixed the macOS virtual camera potentially crashing external apps and recordings to be the wrong length [mac-cain13]</li>
<li>Various fixes for monitoring when using PulseAudio [kkartaltepe]</li>
<li>Fixed a crash on shutdown with virtual camera on Linux [kkartaltepe/norihiro]</li>
<li>Fixed an issue in the V4L2 source on Linux where a capture device's frame rate could be invalid, resulting in incredibly large log files [9p4]</li>
<li>Fixed the listing of PulseAudio monitoring devices incorrectly listing inputs [jp-bennett]</li>
<li>Fixed the preview having the ability to scroll infinitely out of view when scaled manually [cg2121]</li>
<li>Fixed the Async Filters list showing incompatible async filters for synchronous sources [gxalpha]</li>
<li>Fixed an issue where the cursor would not properly disappear in certain games on Wayland [rmngr]</li>
<li>Fixed an issue where certain filters would not properly update when clicking the Defaults button [gxalpha]</li>
<li>Fixed an issue with FFmpeg NVENC producing invalid DTS when using b-frames [RytoEX/flaeri/derrod/tt2468]</li>
<li>Fixed an issue where network sources in the Media Source could cause rendering/UI freezes when they reconnect [tt2468]</li>
<li>Fixed AAC encoding of 2.1 audio [pkv]</li>
<li>Fixed an issue where pressing Space would unexpectedly pause the active media source when the main window was focused [cg2121]</li>
<li>Fixed an issue where duplicating scenes would lose colour coding on sources [cg2121]</li>
<li>Browser dock Inspect will now remember settings and customizations [WizardCM]</li>
<li>Fixed a case where HDR -&gt; SDR might not tonemap correctly [jpark37]</li>
<li>Fixed simple mode replay buffer maximum not being set [derrod]</li>
<li>Fixed Windows-only RTMP options (e.g., Network Optimizations) causing issues if the profile was imported on non-Windows with those enabled [tytan652]</li>
<li>Fixed security software status logs showing as blank when running on non-English locales [notr1ch]</li>
<li>Fixed a bug where certain system localizations couldn't load Lua files on Windows [exeldro]</li>
<li>Fixed Screen Capture crashing in the Flatpak with old versions of PipeWire server [tytan652]</li>
<li>Fixed an issue where Push to Talk on Linux wouldn't work when assigned to secondary mouse buttons [KasinSparks]</li>
<li>Fixed CBR padding when using NVENC AV1/HEVC [derrod]</li>
<li>Fixed Auto Scene Switcher not saving settings correctly [PatTheMav]</li>
<li>Fixed AMF encoder crashing when streaming by temporarily disabling dynamic bitrate when it is in use [derrod]</li>
<li>Fixed recordings made with Apple VT Hardware encoders in CRF mode only having one initial keyframe [derrod]</li>
<li>Various improvements and fixes to Decklink performance [jpark37]</li>
<li>Fixed transparent windows capturing incorrectly on Wayland using PipeWire [asahilina]</li>
<li>Fixed an issue with the source rotation handle when source is flipped [cg2121]</li>
<li>Fixed a crash in Decklink Output when no Decklink device is available [jpark37]</li>
</ul>
<h2>OBS Studio 29.0.2</h2>
<ul>
<li>Fixed a bug introduced in 29.0.1 which caused sources with an upward compressor filter to stop audio playback under certain circumstances [notr1ch/pkv]</li>
</ul>
<h2>OBS Studio 29.0.1</h2>
<ul>
<li>Fixed the "NVIDIA AUDIO Effects SDK is outdated" message appearing on the noise reduction filter properties when the SDK wasn't installed [notr1ch]</li>
<li>Fixed a crash that could happen if you use NVIDIA's audio effect filters and then later uninstall the SDK [pkv]</li>
<li>Fixed the expander and upward compressor audio filters sounding distorted [pkv/norihiro]</li>
<li>Added "Knee Width" option to the upward compressor audio filter to improve quality [pkv/norihiro]</li>
<li>Fixed a bug where overriding the theme on Linux could cause the program not to start up [kkartaltepe]</li>
<li>Fixed software rendering not working properly on Linux [columbarius]</li>
<li>Fixed a bug where the Stats window/panel would show an incorrect disk space calculation when pausing recordings [notr1ch]</li>
<li>Fixed a bug on Windows where the "Force SDR" setting in window capture wasn't showing up [jpark37]</li>
<li>Fixed a bug on macOS where the virtual camera would show up red [PatTheMav]</li>
<li>Fixed a bug where Linux captures would not work correctly on X11 [kkartaltepe]</li>
<li>Fixed a crash on Linux when using Wayland and trying to use the automatic scene switcher [GeorgesStavracas]</li>
<li>Fixed a bug where alpha wouldn't output properly when setting OBS to use BGRA color format [jpark37]</li>
<li>Fixed a crash on startup when OBS was minimized [derrod]</li>
<li>Fixed a bug where projectors could look washed out when projecting SDR content while using an HDR display [jpark37]</li>
<li>Fixed a bug on Windows where secondary displays could sometimes not show up in the display capture properties [jpark37]</li>
<li>Fixed a crash when using the virtual camera as an OBS source and changing the canvas resolution [notr1ch]</li>
<li>Fixed a bug on macOS where the properties window would go behind the main window after opening a file selection dialog [gxalpha]</li>
<li>Fixed a bug where profile encoder settings would not properly update when switching between services that require a different encoder [tytan652]</li>
<li>Fixed a bug in custom ffmpeg output mode where RTMP would force certain encoders [flaeri]</li>
</ul>
<h2>OBS Studio 29.0</h2>
<h3>New Features and Additions</h3>
<ul>
<li>Added support for the AMD AV1 Encoder for the RX7000 series GPUs on Windows [AMD/Lain]</li>
<li>Added support for the Intel AV1 Encoder for Arc GPUs on Windows [Intel/Lain]<ul>
<li>Note: CQP is available but not fully supported</li>
</ul>
</li>
<li>Added support for the Intel HEVC Encoder on Windows [yuriy-chumak/rcdrone/Lain]</li>
<li>Added an upward compressor filter [pkv]</li>
<li>Added a 3-band equalizer filter [Lain]</li>
<li>Added support for native HEVC and ProRes encoders on macOS, including P010 and HDR [Developer-Ecosystem-Engineering/PatTheMav/gxalpha]</li>
<li>Added support for macOS Desk View [Developer-Ecosystem-Engineering]</li>
<li>Added update channels for opting into receiving beta/release-candidate builds to Windows [Rodney]<ul>
<li>Work is still underway to get everything ready on the server side, updating via the built-in updater may not be available until later in the OBS 30.0 beta-testing period</li>
</ul>
</li>
<li>Websockets updated to 5.1.0, which has a number of bug fixes, UI improvements, and new stream reconnect events. [tt2468]</li>
</ul>
<h3>General Changes</h3>
<ul>
<li>The Replay Buffer's memory limit is now set to 75% of installed system RAM rather than fixed to 8GB [Rodney]</li>
<li>Added media key support in Linux [kkartaltepe]</li>
<li>Various improvements to NVIDIA Video and Audio filters, including a Mask Refresh slider and support for temporal processing, which provides better quality masking [pkv]</li>
<li>Improved Display Capture screen naming &amp; saving on Windows; indexes should now match regardless of Mode, and reconnected displays should show the correct monitor [jpark37]<ul>
<li>Note: This does mean existing Display Capture sources will be blank until manually configured, to avoid showing the wrong display</li>
</ul>
</li>
<li>Added support for encryption and authentication for SRT and RIST outputs [pkv]</li>
<li>Disabled ScreenCaptureKit Display &amp; App capture on macOS 12 due to various issues; users should either update to macOS 13 or use the existing Screen Capture source [PatTheMav]</li>
<li>Removed the automatic numbering on Multiview labels [Warchamp7]</li>
<li>Added the ability to mute individual browser docks [WizardCM]</li>
<li>Added the ability to right click and 'Inspect' individual browser docks [WizardCM]</li>
<li>Changed the default Simple Output NVENC preset to P5 for better compatibility &amp; performance [RytoEX]</li>
<li>Added support for higher refresh rates in the Video Capture Device source on Windows [WizardCM/EposVox]</li>
<li>Added the Apple VT Hardware encoder to the Auto Configuration Wizard [gxalpha]</li>
<li>Improved FFmpeg VA-API enablement by directly using Libva to check device capabilities [tytan652]</li>
<li>Various minor UX/accessibility tweaks in the UI [Warchamp7/cg2121]</li>
<li>Raised the speed at which dynamic bitrate recovers after a drop [Lain]</li>
<li>Audio should now be automatically captured for most capture card brands using the Video Capture Device source on Windows [WizardCM/EposVox]</li>
<li>Added a slide counter to the Source Toolbar when an Image Slide Show is selected [cg2121]</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fixed issues with async filters (such as Delay) not rendering correctly [jpark37]</li>
<li>Various performance improvements to Decklink preview output [jpark37]</li>
<li>Fixed an issue where source Projector windows wouldn't close when a source was deleted [cg2121]</li>
<li>Fixed an issue where cursors would disappear or display incorrectly on screen captures on Windows [caesay]</li>
<li>Fixed issues with CQP rate control for SVT and AOM AV1 encoders [flaeri]</li>
<li>Fixed an issue with CQP rate control for AMD HEVC and H264 [flaeri]</li>
<li>Fixed Virtual Camera not working with Webex and GoToMeeting [Lain]</li>
<li>Fixed capturing UHD/4K YUV on the AJA Kona HDMI [paulh-aja]</li>
<li>Fixed a bug where slideshow sources wouldn't remove cleared files when removing missing files [gxalpha]</li>
<li>Fixed slideshow counter on the source context toolbar showing "1/0" when empty, now shows "-/-" instead [cg2121]</li>
<li>Fixed chroma location for VAAPI [jpark37]</li>
<li>Fixed a case where macOS' VideoToolBox HEVC encoder would be parsed as AVC [jpark37]</li>
<li>Allow SRT streams to disconnect after timeout [pkv]</li>
<li>Fixed color space being incorrect for some video devices running in MJPEG video format on Windows [jpark37]</li>
<li>Fixed monitor names in the Fullscreen Projector &amp; Multiview menus on Windows [WizardCM]</li>
</ul>]]></description>
    </item>
        <item>
      <title>OBS Studio and obs-websocket Join Forces</title>
      <link>https://obsproject.com/blog/obs-studio-and-obs-websocket-join-forces</link>
      <guid>https://obsproject.com/blog/obs-studio-and-obs-websocket-join-forces</guid>
      <pubDate>Wed, 03 Aug 2022 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Right around 8 months ago, Palakis and I were approached by the members here at the OBS Project with an idea: Make WebSocket functionality a core feature of OBS Studio. On July 3rd, I was pleased to announce the standalone release of obs-websocket version 5. This version is a complete rewrite of the popular plugin obs-websocket. With over a year of development finally behind us, this version brings a new protocol, many great features, and greatly improved reliability. You can see the notable changes <a href="https://github.com/obsproject/obs-websocket/wiki/Notable-changes-between-4.x-and-5.x">here</a>.</p>
<p>While the release is a standalone plugin meant to be run with OBS Studio 27.2, we will be including version 5 with all downloads of OBS Studio starting with version 28.0.0. Including obs-websocket v5 by default will help drive adoption of the new protocol, and we expect it to benefit the third-party scripts and tools ecosystem long-term by bringing official support to the API that many of them depend on.</p>
<p>To install 5.0.1, check out the <a href="https://github.com/obsproject/obs-websocket/releases/tag/5.0.1">release available on GitHub</a>. Please bear in mind that obs-websocket v5 uses a new protocol that not all tools support, so you may need to additionally install the 4.9.1-compat version to continue using those tools. For a list of software tools that already support the new protocol, see <a href="https://github.com/obsproject/obs-websocket#client-software">here</a>.</p>
<p>Many existing tools will require the previous version of obs-websocket, 4.9.1-compat, in order to continue working until such time as those tools are updated. This version can be installed alongside v5 and will not conflict, and can safely be removed at a later date once any tools you may be using are updated to the new version. That version can be found alongside the download links for 5.0.1 on the release page.</p>
<p>We do have a <a href="https://discord.gg/WBaSQ3A">Discord Server</a> dedicated to obs-websocket where you can participate in discussions and get help for the plugin. If you'd like to contribute towards furthering obs-websocket development, we have a dedicated <a href="https://opencollective.com/obsproject/projects/obs-websocket-dev">Open Collective</a> page. Thank you to those who have faithfully contributed via Open Collective thus far!</p>]]></description>
    </item>
        <item>
      <title>What happened with 27.2: The tale of a legendary hotfix</title>
      <link>https://obsproject.com/blog/the-tale-of-a-legendary-hotfix</link>
      <guid>https://obsproject.com/blog/the-tale-of-a-legendary-hotfix</guid>
      <pubDate>Wed, 23 Feb 2022 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>That was a crazy week. Let’s talk about what happened with 27.2 and what we had to do this past week.</p>
<p>With the Windows version of 27.2, we updated all of our dependencies. A dependency is a library made from external source code; something which is not OBS source code, but that OBS depends upon for major functionality and features. Sometimes this can be a feature such as software H.264 encoding, which relies on the x264 encoder library, or a feature such as the browser source, which relies on a much bigger dependency: Chromium (the browser engine that powers Google Chrome). More specifically, the browser source utilizes the Chromium Embedded Framework (CEF) to render a webpage as a source, or to render a webpage as a panel inside of OBS.</p>
<p>On Windows, before OBS 27.2, our browsers were stuck on Chromium version 75 because we had to use a complex custom Chromium patch to be able to use it with reasonable performance, and that patch was incompatible with newer versions. Chromium 75 was almost three years old as of 27.2, and many important features and changes have been added to Chromium since then; features and changes which are essential to modern production components such as stream overlays and advanced production displays. It was getting very outdated, so needless to say, it was a high priority for us to update Chromium as a dependency, and thanks to the effort of OBS Project members Pat, Dillon, Matt, pkv, as well as some wonderful people who contribute to the Chromium Embedded Framework, we were finally able to update it to version 95.</p>
<p>However, updating dependencies, especially dependencies that large, can pose some challenges: during the 27.2 release, we started to get sporadic reports of people’s entire computers freezing, requiring a full system reboot. We immediately began investigating, and at first I slowed, then eventually reverted the release of 27.2 as more reports came in confirming the issue. On the first day after 27.2, we were frantically trying to find affected users who would have the patience to allow us to examine and understand what was happening. Fortunately, we found some very kind users who were able to force a bluescreen during the system freeze and generate debug dump files of their system kernels. This allowed us to get the first hint of what was happening: it was very likely a bug in the graphics driver. We noticed it was centered around graphics operations, and it was only happening with one graphics card manufacturer. Fortunately, we have contacts with all the major graphics card manufacturers, so we immediately got in contact with them to file a driver bug report.</p>
<p>Being that we were in no position to expect a graphics card manufacturer to debug and fix a suspected driver bug in a timely manner, let alone expect users to update to those drivers within any reasonable timeframe after their release, we had no choice: either find a workaround soon, or revert Chromium back to version 75. Considering so much effort in this update was spent updating Chromium to improve stream production features for users, reverting Chromium back to 75 was not the option I wanted to take. I had to do something, and soon, as Twitch was deprecating their v5 API in two weeks, meaning that old versions of OBS would no longer be able to use the “Connect Account” feature with Twitch.</p>
<p>R1CH, a contributor to OBS, had figured out a way to reproduce the system freeze: add a bunch of very active browser sources, and run OBS in 1300/1 fractional framerate (i.e. 1300 frames per second). This did the trick, and we were now able to reproduce the issue ourselves and debug it a bit more easily. While debugging the bluescreen kernel dumps, I immediately suspected what the problem was likely triggered by: the IDXGIKeyedMutex API. This API is used to lock and synchronize shared graphics memory between two different processes or threads on the system; our latest Chromium update had been modified to use it, a big change from how Chromium 75 functioned. Being that I am incredibly stubborn, and being that I already hated that API, around two or three days after 27.2 was released, I decided that I had to find out whether or not that was the trigger. For the next day or so after that, I modified and compiled Chromium to remove IDXGIKeyedMutex almost everywhere I could see it. Because Chromium is such a monumentally large project involving tens of millions of lines of code, and because it uses so many layers of abstraction and interprocess communication, I had doubts I would be able to accomplish it; some of our contributors suggested we should just let it go and revert back to Chromium 75. But being incredibly stubborn, after a few days of learning how Chromium works internally, I managed to remove almost all usage of keyed mutexes.</p>
<p>And I couldn’t believe it: it solved the system freeze. It did the trick! I felt like Luke Skywalker in the Death Star’s garbage compactor right after it was deactivated.</p>
<p>However, it introduced a new issue: although it solved the system freeze issue, removing synchronization inevitably caused frame stuttering and frame pacing issues when rendering the browser source. It was noticeable enough that I knew that my job wasn’t finished. For the next sleepless day or two after that, in an attempt to solve this issue, I went to work trying to figure out some other way to synchronize textures shared between Chromium and OBS. Coupled with the fact that Chromium code is so incredibly abstract and relies on so many different separate independent interprocess parts working together, it made the task incredibly difficult. After a day or two of no success, another contributor had suggested that I just let it go, and that it was good enough as-is, and that we had the v5 API deadline. I originally conceded, and let it go, but that same night while I was in the shower, I had an idea of how to solve it!</p>
<p>After that shower, I told the other contributors that I’m going to try one last thing that night, and that if I couldn’t do it before the night was over, I’d give up. In an all-or-nothing last-ditch effort, I spent the rest of the night reprogramming a couple key parts of Chromium to share a single texture with OBS, which would be automatically updated by a simple copy operation from the backbuffer texture: the same exact way that the patch for version 75 accomplished it.</p>
<p>My effort proved fruitful, and not only did it fix the frame stuttering issue, but it also vastly improved performance of the Chromium 95 build. Not only did we fix the system freeze and fix frame stuttering, we also greatly improved browser source performance!</p>
<p>Words can’t describe how good it felt. My elation went from simply getting out of the garbage compactor on the Death Star to blowing up the entire Death Star in one fell swoop. We tested it with everyone we could: everyone confirmed that all of their issues were fixed, and that the browser source was performing better than ever. After an entire week of sleepless toil, we’re now here with 27.2.1, a legendary hotfix. It was the worst week of my life that somehow turned into the best week of my life.</p>
<p>I want to make a big shout out to the very patient users who purposely crashed their PCs to get us kernel dumps, a big shout out to R1CH for figuring out a way to reproduce the system freeze reliably, and a big shoutout to Matt, pkv, Flaeri, Shaolin, RytoEX, Ace, and everyone else who spent time testing different builds on different systems. Thank you all. Without all of our wonderful contributors working together, none of this would have been possible.</p>
<p>What an incredibly crazy week. I can finally get some sleep again.</p>]]></description>
    </item>
        <item>
      <title>OBS and Streamlabs Commit to Long-Term Collaboration</title>
      <link>https://obsproject.com/blog/obs-and-streamlabs-commit-to-long-term-collaboration</link>
      <guid>https://obsproject.com/blog/obs-and-streamlabs-commit-to-long-term-collaboration</guid>
      <pubDate>Fri, 24 Dec 2021 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>First and foremost, we want to thank you all again for your incredible outpouring of love and support for OBS. Everyone on the team is incredibly thankful and humbled by your enthusiasm for what we do.</p>
<p>Second, we wanted to share some positive news: In the past few weeks, Lainand the team have been in discussion with Streamlabs to have a transparent conversation on trust and partnership, and together, we now have a plan moving forward.</p>
<p>Both of our teams have a shared mission to support streamers, and the industry is better when we can all work together. We are happy to have Streamlabs support the project in the long-term so we can continue to build tools for the community.</p>
<p>We would like to thank the team at Streamlabs for listening and taking immediate action to resolve the issues that led to the current situation. While past actions cannot be changed, we look forward to a fresh start.</p>
<p>To all of you: thank you once more for being so supportive, and stay tuned for more updates!</p>
<p>Best,<br />
The OBS Team</p>]]></description>
    </item>
      </channel>
</rss>