Skip to content

Releases: nilstate/icey

icey 2.5.0

Choose a tag to compare

@github-actions github-actions released this 18 Jun 16:12
d8864c8

Added

  • Added MediaCapture::setOpenTimeoutUsec() and interruptible FFmpeg network opens so blocking RTSP and other network sources can time out or stop cleanly instead of hanging shutdown.
  • Added default FFmpeg protocol allowlists and network-open timeout handling for MediaCapture, while still allowing callers to override the underlying AVOptions.
  • Added http::Server::setWebSocketOriginValidator() and Symple server origin policy options (enforceOrigin, allowSameOrigin, originScheme, and allowedOrigins) so browser WebSocket upgrades can be rejected before the 101 handshake.
  • Added a move-based TURN request path for parsed STUN messages, avoiding deep copies of inbound attributes and data payloads in server receive loops.

Changed

  • symple::Server::Options::maxConnections now defaults to 1024 instead of unlimited, matching the hardened production defaults used by the server responder.
  • Logging macros now check a process-wide atomic level filter before constructing LogStream objects or evaluating log arguments, making filtered log sites substantially cheaper and preventing side effects in disabled log arguments.
  • STUN transaction IDs are now generated lazily for outbound messages, avoiding unnecessary entropy work on inbound parse paths.
  • TCP peer addresses are cached at connect time so repeated peer-address lookups do not call back into libuv for stable connection metadata.
  • The pacm submodule was advanced to the latest hardened revision used by the control-surface defaults.

Fixed

  • Hardened base lifetime primitives across signals, queues, packet streams, synchronizers, timers, handles, threads, runners, and TaskRunner so shutdown and task execution remain ownership-safe under concurrent teardown.
  • Hardened socket and HTTP handling, including address validation, adapter lifetime, SSL flush behavior, URL parsing, and WebSocket frame size checks.
  • Fixed FFmpeg ownership and media-state consistency issues in audio resampling, video contexts, media capture, video conversion, and WebRTC media bridging.
  • TURN clients and samples now verify message integrity by default and avoid logging credentials.
  • WebRTC track receiver teardown is now safe against libdatachannel callbacks that are still in flight while the receiver is being destroyed.
  • Hardened parsing and memory-safety checks across zip extraction, Base64, crypto, X.509 certificates, STUN attributes/messages, Symple command handling, WebRTC codec selection, remote media planning, and the pipeline C API.
  • Stabilized the WebRTC session test harness after the teardown and callback lifetime hardening.
  • Removed stale pluga references and fixed sample/package-manager rot found during the hardening pass.

icey 2.4.11

Choose a tag to compare

@github-actions github-actions released this 28 May 11:16

Added

  • Added a webrtc/samples/whip-receiver sample that accepts WHIP publishers over HTTP or HTTPS, supports optional bearer-token auth and client ICE PATCH, records H.264/Opus sessions to MP4, and includes FFmpeg/OBS usage docs plus a local certificate helper.
  • Added the icey-sys and icey Rust crates, including safe Rust wrappers for the initial RTSP-to-browser pipeline surface and a crate-level example.
  • Added the icey::pipeline_capi host C API surface for creating, configuring, starting, stopping, and destroying an opaque WebRTC pipeline from foreign-language bindings.
  • Extended graft with host-surface ABI support, including the host runtime kind, host manifest validation, and documented conventions for exported C function tables.

Fixed

  • Windows shared-library builds now export the icy::av media packet hierarchy and VideoConverter with AV_API, fixing MSVC DLL link failures when downstream vision code uses av types across module boundaries. This lets Conan Center consume a clean post-2.4.10 source release without its Windows shared-build patch.
  • Alpine packaging and its container validation helper now install nlohmann-json, matching the system-dependency CMake package exported by icey.
  • MultiplexEncoder now tracks audio and video PTS independently, preventing muxed audio/video output from dropping valid interleaved packets as duplicate or backward timestamps.
  • AudioEncoder now advances its buffered output PTS when frames are submitted to delayed encoders such as AAC, avoiding duplicate DTS packets during MP4 recording.

Changed

  • API docs and module guides were regenerated and expanded for the new graft host-surface and pipeline API work.
  • The docs toolchain now uses the published Sourcey package and includes the Sourcey C++ quality gate used by CI.
  • Package-manager publishing now targets the shared Homebrew tap configuration used by the install docs.

Removed

  • Removed the unused Base64PacketEncoder packet-stream adapter and its public header. Use the icy::base64 namespace helpers directly for Base64 encoding and decoding.

icey 2.4.10

Choose a tag to compare

@github-actions github-actions released this 29 Apr 11:40

Fixed

  • ICapture::start/::stop (which override basic::Startable) and MediaCapture::emit (which overrides PacketSource::emit) are now declared with override. clang-18 with -Werror -Winconsistent-missing-override was failing the bench build on these.
  • [[nodiscard]] returns from AudioEncoder::encode, VideoEncoder::encode, MultiplexEncoder::encode{Video,Audio}, and VideoEncoder::flush are now explicitly discarded with (void) at the seven call sites in audiopacketencoder.cpp, multiplexpacketencoder.cpp, videoencoder.cpp, and videopacketencoder.cpp. Emission happens through the encoder's emitter, not through the boolean return; the discard was always intentional.

Changed

  • The CI benchmarks job now runs under clang-18 instead of gcc-14. The gcc-14 build of the bench binaries hit SIGILL on the GitHub-hosted ubuntu-24.04 runner under -O3; the library itself builds and tests cleanly under gcc-14 in the regular Linux job and under all three sanitizer jobs. Tracked by nilstate/icey#325. icy_add_benchmark carries a -O2 -fno-tree-vectorize GCC fallback as defence in depth for anyone building bench binaries with GCC outside CI.
  • Doc cross-links to the removed docs/build/* pages now redirect to the recipes/http-server recipe, the README quick-start, and docs/run/install. sourcey.config.ts, release-sync.sh, and release-check.sh no longer iterate over the deleted files.

icey 2.4.9

Choose a tag to compare

@github-actions github-actions released this 28 Apr 07:03

Fixed

  • wrtc::codec_registry::hasEncoder now does a runtime probe (avcodec_alloc_context3 + avcodec_open2), with results cached. The prior implementation only checked avcodec_find_encoder_by_name, which on Linux distros that ship libavcodec with hardware-encoder wrappers built in (h264_nvenc, h264_vaapi, h264_qsv) returned true even when the runtime resources for those encoders (CUDA, VA-API drivers, etc.) were absent. The h264-on-macOS / videotoolbox path was unaffected; the fix prevents codec selection from picking a hardware encoder that exists at link time but cannot be opened at runtime, which surfaced as "Cannot open the video codec: Operation not permitted" in the icey-cli browser smoke on Linux CI.

icey 2.4.8

Choose a tag to compare

@github-actions github-actions released this 28 Apr 06:47

Fixed

  • http::Server portability: replaced file_clock::to_sys with the standard delta-calibration idiom (system_clock::now() + (fileTime - file_clock::now())). MSVC's _File_time_clock does not expose to_sys, so the prior libc++-targeted fix from 2.4.6 broke the Windows build. The new form works on libstdc++, libc++, and MSVC, and tolerates the precision difference between libc++ and libstdc++ that the prior time_point_cast was meant to address.
  • parseDeviceUrl: device-resolution path is now guarded by HAVE_FFMPEG_AVDEVICE. The 2.4.7 implementation called avdevice_register_all unconditionally, breaking builds where libavdevice is not linked. Without it, hitting a recognised device URL throws an explicit "libavdevice is not linked" error rather than failing to build.

Changed

  • Doc cleanup: cross-links to the removed docs/build/* pages are redirected to the recipes/http-server recipe, the README quick-start, and docs/run/install. sourcey.config.ts, release-sync.sh, and release-check.sh no longer iterate over the deleted files.

icey 2.4.7

Choose a tag to compare

@github-actions github-actions released this 28 Apr 06:14

Added

  • icy::av::parseDeviceUrl(source) — single source of truth for libavdevice URL schemes (avfoundation:, v4l2:, dshow:). Returns the resolved AVInputFormat* and the post-prefix filename. Throws if a recognised scheme has no matching backend on this build.
  • MediaCapture::openFile routes recognised device URLs through the existing openStream(filename, iformat, opts) path, so callers can open the OS camera directly without an ffmpeg/relay subprocess.

Fixed

  • internal::init() now calls avdevice_register_all() under HAVE_FFMPEG_AVDEVICE. The prior comment was wrong: codec/format auto-registration arrived in FFmpeg 4.0+, but libavdevice still requires an explicit register call for av_find_input_format("avfoundation"|"v4l2"|"dshow") to resolve. parseDeviceUrl also performs a one-shot std::call_once registration so device URLs work even before any MediaCapture is constructed.
  • MediaCapture::run no longer treats AVERROR(EAGAIN) from av_read_frame as fatal. Live demuxers (notably avfoundation) return it whenever their internal frame queue is momentarily empty; the prior code tore the capture down at the first hiccup, which surfaced as the capture pipeline emitting only the initial three buffered frames before going silent.

Changed

  • Bumped the pinned libdatachannel from v0.24.1 to v0.24.2.

icey 2.4.5

Choose a tag to compare

@github-actions github-actions released this 11 Apr 15:45

Fixed

  • System-dependency builds no longer vendor and install nlohmann/json.hpp, avoiding conflicts with downstream package managers that already provide nlohmann-json
  • Exported CMake package configs now propagate the nlohmann_json dependency when system deps are enabled

icey 2.4.4

Choose a tag to compare

@github-actions github-actions released this 09 Apr 05:28

Added

  • Realtime intelligence pipeline primitives in the vision module, including frame normalization for detector-ready frames
  • WebRTC receive jitter buffer for smoother inbound media playback
  • API reference docs for graft, speech, and vision modules
  • Markdown sanitization script for generated API docs
  • Permanent macOS system-deps + FFmpeg CI coverage matching downstream package-manager builds

Changed

  • Doxygen config updated for new module coverage
  • Docs now use latest sourcey toolchain
  • Module guide updated with graft, speech, vision entries

Removed

  • pluga module and docs (replaced by graft)

Fixed

  • Apple AVFoundation source compatibility for package-manager builds on modern macOS SDKs
  • Darwin shared-library symbols are preserved for downstream package-manager builds

icey 2.4.3

Choose a tag to compare

@github-actions github-actions released this 06 Apr 13:59

Fixed

  • Downstream package-manager builds now resolve libuv correctly when the system dependency is exported as a shared target instead of a static-only alias
  • RPM source-package staging now carries the downstream compatibility patch set and claims the installed umbrella and vendored JSON headers in the development package
  • MacPorts builds now force the supported Release CMake build type instead of inheriting the unsupported default from the port group
  • The GitHub release workflow now validates the pre-finalize tag state, so tagged releases can publish before make release-finalize pins the archive hashes on main

2.4.2

Choose a tag to compare

@auscaster auscaster released this 04 Apr 05:27

Fixed

  • Package-manager builds now accept the shared libuv::uv target exported by vcpkg and other system package layouts.
  • Windows consumers no longer rely on backported export/linkage fixes for Timeout, PacketFactory, Transaction, and the base uv wrapper templates.
  • FFmpeg-backed builds now propagate discovered library search directories so Windows link steps can resolve avcodec.lib and related FFmpeg libraries.