github OvenMediaLabs/OvenMediaEngine v0.21.0

4 hours ago

Highlights

  • AV1 end-to-end. AV1 now works across the whole pipeline — ingest over WHIP and enhanced RTMP, playback over WebRTC and LL-HLS fMP4, software encode/decode via libaom, and MP4 recording.
  • Runtime track configuration changes. LL-HLS and HLS signal discontinuity when a track's configuration changes mid-stream, OVT relays those changes to edges, and the transcoder preserves frames and keyframe cadence across the switch.
  • DRM. Runtime key rotation for LL-HLS and HEVC (H.265) subsample encryption, with CENC key tag generation unified behind a single path.
  • FFmpeg 7.1.5. Upgraded from the previous FFmpeg baseline, with the surrounding code updated accordingly.
  • Thread Safety Analysis. Clang TSA mutex wrappers and annotations were introduced across the codebase, surfacing and fixing a substantial batch of latent data races.
  • CMake-only build. The legacy make-based build system is gone; CMake is now the only supported path.
  • Queue observability. Internal queues now report dwell-time percentiles and last-interval stats through alerts, the stats API, and logs.

Breaking changes & deprecations

  • Hardware acceleration was restructured and deprecated (#2202). Codecs are now organized by backend.
  • Intel QSV hardware acceleration was removed (#2209).
  • The legacy make-based build system was removed (#2200). Use CMake.
  • HEVC sample entry changed from hev1 to hvc1 (#2258). Verify playback on your target players.
  • JSON naming for all-caps acronyms changed in configuration and API responses (#2110). API consumers parsing those field names need to be updated.
  • The unused FILE provider was removed (#2056).
  • src/projects/* was flattened into src/* (#2248). This affects contributors, tooling, and any out-of-tree patches or release scripts that reference the old paths.

Added (43)

AV1 end-to-end support

  • bitstream: Add AV1 OBU parser and codec configuration record (#2182) — @dimiden
  • Add AV1 media type support (#2184) — @dimiden
  • webrtc: Support AV1 ingest over WHIP (#2187) — @getroot
  • webrtc: Support AV1 over WebRTC playback (#2196) — @getroot
  • rtmp: Support AV1 ingest over enhanced RTMP (#2204) — @dimiden
  • av1: Add support for libaom (AV1) installation (#2205) — @Keukhan
  • llhls: Add AV1 codec support to LLHLS fMP4 packaging (#2206) — @dimiden
  • av1: Add AV1 software codec support for decoder and encoder (#2241) — @Keukhan
  • av1: Add AV1 recording to mp4 (#2242) — @Keukhan

Runtime track configuration changes

  • llhls: Support runtime track configuration changes with discontinuity signaling (#2255) — @getroot
  • hls: Support runtime track configuration changes with discontinuity signaling (#2256) — @getroot
  • ovt: Relay runtime track configuration changes to edges (#2257) — @getroot

DRM

WebRTC / ICE

  • Support per-RID Oven-Capabilities for simulcast streams (#2076) — @SangwonOh
  • Add TCP ICE candidate support (RFC 6544) (#2085) — @getroot
  • Rework WebRTC JitterBuffer with adaptive PTS-anchored pacing (#2097) — @getroot
  • webrtc: Implement AP (Aggregation Packets) support for H.264/H.265 RTP packetizer (#2105) — @Keukhan
  • Add receive-side NACK + RTX to WebRTC Provider (#2175) — @getroot
  • Handle concurrent RTP/RTCP receive on ICE candidate switch (#2177) — @getroot

Codecs & packaging

  • ffmpeg: Upgrade to FFmpeg 7.1.5 and related code (#2237) — @Keukhan
  • hevc: Add H.265 slice header parser and switch sample entry to hvc1 (#2258) — @Keukhan
  • thumbnail: Add AVIF thumbnail support (#2268) — @Keukhan

Ingest & relay

  • Add multi-audio track metadata support to Multiplex provider (#2071) — @nums
  • mpegts: Add MP2 audio ingest support (#2103) — @ysle
  • publishers/ovt: Add TrackSet for selective track delivery (#2119) — @dimiden

Observability & operations

  • logger: Add toggle to disable file output (#2154) — @naanlizard
  • Warn when an unready track blocks stream preparation (#2197) — @getroot
  • Log track info on stream creation (#2198) — @getroot
  • Expose internal-queue dwell-time percentiles in alerts, stats, and logs (#2229) — @getroot
  • Add last-interval dwell-time stats to internal queues (#2236) — @getroot
  • Add OME_LATENCY_PROBE build option for serving-path latency instrumentation (#2243) — @getroot
  • alert: Add server identification info (serverInfo) to alert notifications (#2263) — @choigilhoon

Speech-to-Text

  • Redesign STT (Speech-to-Text) configuration and Whisper integration (#2060) — @getroot

API

Internals & infrastructure

  • Add Transport field to SocketAddress (#2083) — @getroot
  • Add ManagedQueue::InjectWakeup() to wake a blocked Dequeue() (#2150) — @getroot
  • ovlibrary: Add Clang Thread Safety Analysis (TSA) mutex wrappers and build infrastructure (#2183) — @dimiden
  • Enable jemalloc background purge by default, configurable via Server.xml (#2244) — @getroot
  • tr: Add generic data plane interface for media frame backends (#2246) — @Keukhan
  • modules: Add TaskPool for running short tasks on shared workers (#2265) — @getroot

Docs tooling

  • Seed docs-site/ with the ovenmedialabs.com MDX manual (#2120) — @getroot
  • Move docs source from docs-site/ to docs/ (#2133) — @getroot

Fixed (63)

Transcoder & encoding

  • Frame duration is 0 in fps filter when skipFrames is disabled (#2055) — @Keukhan
  • Protect _transcode_apps with shared_mutex in Transcoder (#2067) — @getroot
  • Keep OutputTrack quality even when input stream is updated (#2078) — @Keukhan
  • Fixed regression where framerate did not work during image encoding (#2145) — @Keukhan
  • transcoder: Correct OV_GUARDED_BY placement on _input_stream (#2208) — @dimiden
  • trs: Improve output FPS determination order when no framerate is configured (#2217) — @Keukhan
  • transcoder: Handle media property changes in filters correctly (#2272) — @getroot
  • transcoder: Fix out of memory caused by unbounded frame buffering (#2278) — @Keukhan
  • transcoder: Preserve frames and keyframe cadence across track changes (#2284) — @getroot
  • transcoder: Rescale bypass timestamps with integers (#2286) — @Keukhan
  • transcoder: Recover delayed frames and keep slot continuity at track changes (#2287) — @getroot

WebRTC / ICE

  • Prevent IsSendable() warning spam and delayed ICE session cleanup on disconnect (#2072) — @getroot
  • Correct playout-delay RTP header extension bit packing (#2090) — @getroot
  • webrtc: Tighten ICE/STUN/DTLS authentication checks (#2107) — @getroot
  • webrtc: Improve WebRTC ICE connectivity stability (#2144) — @getroot
  • webrtc: Improve Pacer startup smoothness and per-track buffering (#2163) — @getroot
  • webrtc: Cache certificates inserted before signalling/WHIP HTTPS servers exist (#2166) — @dimiden
  • Suppress repeated incomplete-frame error logs in jitter buffer (#2167) — @getroot
  • Distribute WebRTC UDP ICE across multiple ports (#2176) — @getroot
  • Key RTP receiver jitter-buffer and track maps by track_id (#2178) — @getroot

Ingest & providers

  • Stream name incorrectly generated when schedule filename contains multiple dots (#2053) — @getroot
  • pull: Avoid false epoll delete errors for stopped pull streams (#2054) — @dimiden
  • Resolve data races in provider stream (#2068) — @dimiden
  • Support negative RTMP extended timestamp deltas (#2093) — @dimiden
  • mpegts: Split AAC PES into per-frame access units for fMP4/LL-HLS (#2224) — @dimiden
  • rtspc: Split aggregated AAC access units into per-frame samples for fMP4/LL-HLS (#2226) — @dimiden
  • mpegts: Harden the demuxer against lossy and reordered UDP input (#2234) — @dimiden
  • provider: Honor PacketSilenceTimeoutMs during the pre-publish window (#2262) — @dimiden
  • rtmp: Stop deleting a low frame rate input before its first media packet (#2275) — @dimiden
  • provider: Apply only operator-set timeouts before a push channel publishes (#2290) — @dimiden

Publishers & packaging

  • Create dynamic application for HTTP publishers with wildcard template (#2114) — @getroot
  • publishers/ovt: Data race on shared _description (#2165) — @dimiden
  • llhls: Block chunklist reload when _HLS_part is omitted (#2207) — @getroot
  • file: Serialize file writer lifecycle to fix races during concurrent recording control (#2252) — @Keukhan
  • thumbnail: LL-HLS playback fails with 404 after a thumbnail request on the same http/2 connection (#2254) — @choigilhoon
  • http2: Fix HPACK stale indexes and header block interleaving (#2270) — @getroot
  • thumbnail: A thumbnail request delays other sockets (#2281) — @Keukhan

Concurrency & thread safety

  • Make socket and metrics timestamp fields atomic (#2181) — @getroot
  • tsa: Resolve data races surfaced by thread-safety annotations across modules (#2195) — @dimiden
  • Prevent crash in internal-queue stats API under concurrent queue updates (#2223) — @getroot
  • stream: Keep runtime state shared between stream copies (#2267) — @getroot
  • base: Guard info::Stream::_playlists against concurrent access (#2280) — @dimiden

Queue, alert & routing

  • Prevent warning logs for queue exceed caused by buffering delay setting (#2095) — @Keukhan
  • Distribute MediaRouter streams across all workers via round-robin (#2227) — @getroot
  • Alert repeatedly sends codes=OK while internal queue congestion persists (#2233) — @choigilhoon
  • queue: Suppress "Exceeded" warning log when exceed-and-wait is enabled (#2249) — @Keukhan
  • multiplex: Fix tap queue overflow warning and unbounded growth (#2274) — @getroot
  • alert: Send an alert when decoder recreation fails (#2285) — @Keukhan

Push, SRT & networking

  • Resolve issue where one push session delay affects other push sessions (#2142) — @Keukhan
  • Treat terminal SRT epoll errors as disconnects (#2160) — @dimiden
  • push: Fill in error reason for failed packet writes (#2170) — @Keukhan

Speech-to-Text

  • Prevent Whisper STT encoder crash on stream stop (#2194) — @getroot
  • Preload Whisper model on the configured OME device, not the CUDA index (#2221) — @getroot

API

  • api: Emit track timebase and align the stream info spec with the actual response (#2276) — @dimiden

Build & packaging

  • Added cudaGetDeviceProperties_v2 function to libcudart.12 stub library (#2063) — @Keukhan
  • Fixed incorrect libdir in hiredis.pc caused by the LIBRARY_PATH env (#2082) — @Keukhan
  • Fix nvcc_hdr library compilation error with CMake (#2084) — @Keukhan
  • build: Add missing libraries for NVIDIA and Whisper dependencies (#2146) — @Keukhan
  • build: Include stubs directory for NVIDIA libraries in Docker image (#2147) — @Keukhan
  • Build jemalloc with 16 KiB page support (#2159) — @ViRb3
  • build: Retry dependency downloads instead of aborting on transient server errors (#2273) — @choigilhoon

CI

  • ci: Grant actions:write so CLA check updates after signing (#2192) — @choigilhoon

Docs tooling

  • Docs preview.sh — copy+watch instead of symlink, host/remote options (#2136) — @getroot

Changed / Refactored (24)

Hardware acceleration restructuring

  • trs: Hardware acceleration deprecated (#2202) — @Keukhan
  • Remove Intel QSV hardware acceleration support (#2209) — @Keukhan
  • tr: Added bitstream analyzer for codec info instead of bitstream framer (#2238) — @Keukhan

Track configuration & packaging

  • Deliver track configuration changes as immutable track versions (#2251) — @getroot
  • llhls: Unify CENC key tag generation and make DRMSystem a bit flag (#2253) — @dimiden
  • llhls: Drive DRM key rotation through one path for every key source (#2266) — @getroot
  • Harden marker handling in the packagers (#2282) — @getroot

Transcoder

  • Add Instantiate() to probe encoder properties before full creation (#2058) — @getroot
  • trs: AVFrame pixel format helpers in ffmpeg::compat (#2279) — @Keukhan
  • transcoder: Restructure SkipFrames control and improve its accuracy (#2289) — @Keukhan

Concurrency & thread safety

  • Use steady_clock for elapsed time and timeout tracking (#2113) — @getroot
  • Use find()/iterator instead of map operator[] under shared_lock (#2179) — @getroot
  • tsa: Adopt ov::Mutex wrappers and thread-safety annotations across modules (#2186) — @dimiden

Core structure

  • Improve pull stream error handling in Orchestrator (#2035) — @dimiden
  • providers/api: Prepare stream delete flow for API intent and watcher handoff (#2100) — @dimiden
  • Allow provider modules to register after StartServer (#2149) — @dimiden
  • Split Orchestrator::DeleteApplication() into wrapper and internal helper (#2155) — @dimiden
  • ovsocket: Return tl::expected from Socket::Recv (#2201) — @dimiden
  • Flatten src/projects/* into src/ (#2248) — @dimiden

Cleanup

Performance (3)

  • Optimize MPEG-2 TS packetizer performance (#2069) — @getroot
  • Reduce Whisper STT GPU memory and utilization (#2158) — @getroot
  • phyport: Add SO_REUSEPORT support for UDP physical ports (#2214) — @dimiden

Build (15)

  • Add TartanLlama/expected 1.3.1 third-party dependency (#2051) — @dimiden
  • Fix cmake prerequisite installation failures on Ubuntu 22 with cmake 4.x (#2075) — @getroot
  • Update cmake build system and getting started guide (#2088) — @choigilhoon
  • cmake: Fix stubs install and improve NVIDIA linking condition (#2099) — @Keukhan
  • cmake: Fix ffnvcodec auto-install regression (#2104) — @getroot
  • Push Docker images to both ovenmedialabs and airensoft registries (#2106) — @choigilhoon
  • Auto-assign requested reviewer as assignee (#2115) — @getroot
  • Fix permission for auto-assign workflow (#2118) — @getroot
  • Improved to eliminate CUDA driver version dependency (#2135) — @Keukhan
  • Validate NVIDIA toolchain and auto-select nvcc host compiler (#2148) — @getroot
  • Fix jemalloc not enabled by default in Release builds (#2151) — @getroot
  • Guard against libstdc++ without pthread_cond_clockwait (#2152) — @getroot
  • stubs: Add required CUDA stub functions (#2153) — @Keukhan
  • Fix NVIDIA link failure when OME_BUILD_TESTS=ON (#2161) — @getroot
  • Say goodbye to the legacy make-based build system (#2200) — @dimiden

CI (6)

  • Notify ovenmedialabs.com when docs-site/ changes (#2127) — @getroot
  • Allow 'ci' prefix in PR title check (#2128) — @getroot
  • Build the consuming site against PR docs to catch breakage (#2129) — @getroot
  • Point check-docs-build at main now that the site has cut over (#2131) — @getroot
  • Point at the renamed ovenmedialabs.com repo (#2132) — @getroot
  • Add CLA Assistant GitHub Action workflow (#2188) — @choigilhoon

Documentation (24)

Tests (2)

  • rtmp: Fix rtmp_test build after RTMP timestamp helper refactor (#2098) — @dimiden
  • transcoder: Fix the failing transcoder unit test (#2283) — @Keukhan

Chore (1)

  • license: Update LICENSE-3RD-PARTY with dependency versions and add missing libraries (#2260) — @Keukhan

New Contributors

Full Changelog: v0.20.5...v0.21.0

Don't miss a new OvenMediaEngine release

NewReleases is sending notifications on new releases.