Skip to content

Releases: auscaster/icey

icey 2.5.3

Choose a tag to compare

@github-actions github-actions released this 29 Oct 10:07
ac002ac

Fixed

  • Make build-machine CPU tuning opt-in so default release binaries run on baseline target CPUs.
  • Validate the current auscaster homepage when rendering tagged openSUSE recipes.

icey 2.5.1

Choose a tag to compare

@github-actions github-actions released this 08 Oct 08:18
b1a236b

Fixed

  • Query supported audio formats, pixel formats, and sample rates through FFmpeg's codec configuration API when building with FFmpeg 8. This restores macOS and Nix builds without changing codec selection on earlier FFmpeg versions.

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