librtmp2 0.7.0

librtmp2 — RTMP/RTMPS protocol library
Documentation
librtmp2 (0.7.0-1) UNRELEASED; urgency=medium

  * Add public relay export / socket-less inject APIs (RelayFrame,
    enable_relay_export / drain_exported_relay_frames, inject_relay_frame,
    release_injected_route / release_all_injected_routes,
    stream_init_snapshot) for external media mesh integrators.
  * Harden export/inject: fair rotating inject↔local interleave; flush
    budget-deferred export on publisher disconnect; no re-export of
    send-budget deferred frames; clear export buffer on oversized drop.
  * Per-route external publisher ids (is_external_publisher_id); claim
    routes until explicit release; soft-cap new claims at
    MAX_EXTERNAL_PUBLISH_ROUTES (1024); record cache ownership only after
    successful reservation.
  * Stream-cache: key-string byte accounting; peer eviction under pressure;
    irreducible size includes retained same-route fields; reject impossible
    reservations without wiping peers; prune empty publisher_cache_keys.
  * Inject payload limits honor chunk_reg.max_msg_length capped at the
    24-bit RTMP wire maximum; pending-relay limits count route string
    storage; Conn inject counts toward publisher liveness and resets on
    publish/eviction paths.
  * set_conn_id_base / allocate_conn_id reject high-bit ids that would
    collide with external publisher ids; remove accidental
    scripts/docker_cargo_test.py helper.

 -- OpenRTMP <info@openrtmp.org>  Sat, 08 Aug 2026 00:00:00 +0000

librtmp2 (0.6.0-1) UNRELEASED; urgency=medium

  * Security: strict client onStatus success matching; ModEx codec metadata
    from negotiated capsEx; O(1) ChunkRegistry CSID index; publisher
    setup-deadline reap; play rejected on publish-only auth; honor
    defer_media_relay without auth callbacks; reap paused players; rate-limit
    init-cache replay and skip metadata when A/V both disabled; Condvar DNS
    queue with deadline-aware admission.
  * Add automated C header generation (cbindgen) into source/binary tarballs
    and librtmp2-dev packaging.
  * C API pointer types use *const c_char; generated header gains extern "C"
    and documented opaque type names; fix release workflow tag checkout.

 -- OpenRTMP <info@openrtmp.org>  Thu, 06 Aug 2026 00:00:00 +0000

librtmp2 (0.5.0-1) UNRELEASED; urgency=medium

  * Security: TLS pending-handshake cap keyed on peer IP; multitrack codec
    auth checks every track; dedupe/rate-limit init-cache replay; scoped
    stream-cache eviction; setup-deadline for connect-without-publish/play;
    per-IP active connection cap and per-poll accept budget; release
    per-CSID chunk-read scratch after copy.
  * Add ServerConfig::max_pending_tls_per_addr and max_connections_per_addr
    (ABI: rebuild callers that allocate ServerConfig by value).
  * Poll processes stale connections before admission; accept budget and
    immediate first pass for new sockets; FCUnpublish/deleteStream/closeStream
    idle-grace fixes; no spurious reconnect reject when stale socket reaped
    in the same poll.

 -- OpenRTMP <info@openrtmp.org>  Fri, 24 Jul 2026 00:00:00 +0000

librtmp2 (0.4.2-1) UNRELEASED; urgency=medium

  * Bound Client::publish()/play() AMF exchanges with the configured
    connect timeout, closing a stall window where a malicious server could
    hold the caller for minutes after connect succeeded.
  * Reject AMF route strings (connect app, publish/play stream names) that
    are not valid UTF-8 or contain embedded NUL bytes, preventing distinct
    wire-level names from colliding onto the same relay route.
  * Reject empty connect app / publish/play stream names, and gate
    onMetaData/script relay on on_media_cb being registered.
  * Track bytes_received as u64 so WindowAckSize pacing stays correct past
    4 GiB; pass Aggregate sub-tag slices directly in the client play path
    instead of cloning.

 -- OpenRTMP <info@openrtmp.org>  Tue, 21 Jul 2026 00:00:00 +0000

librtmp2 (0.4.1-1) UNRELEASED; urgency=medium

  * Track the exact publish-route key claimed per connection and release
    that same key from the route registry on FCUnpublish/closeStream/play
    takeover, fixing stale route ownership. Also evict stream_cache entries
    for both the claimed key and the current relay route key (if pinned to
    a different value afterward), fixing stale cache replay.
  * publish() now clears Stream.is_playing, matching play()'s existing
    is_publishing clear, so a play->publish switch on the same connection
    is observable by hosts polling stream role flags.
  * Enforce a single wall-clock deadline across DNS resolution, TCP/TLS
    connect, the RTMP handshake, and the AMF connect/createStream exchange
    in Client::connect() (configurable via Client::set_connect_timeout()).
  * Cap chained ModEx extension unwrapping at 32 layers to prevent CPU
    amplification from deeply nested wrappers on media frames.

 -- OpenRTMP <info@openrtmp.org>  Sat, 18 Jul 2026 00:00:00 +0000

librtmp2 (0.4.0-1) UNRELEASED; urgency=medium

  * Server-side E-RTMP v2 connect negotiation (fourCcList, capsEx bitmask,
    videoFourCcInfoMap, reconnect) with capability-aware multitrack relay,
    per-track callbacks, and init-cache replay for late-joining players.
  * Enhanced init-frame classification for HEVC, AV1, Opus, AAC, and
    CodedFramesX keyframes; onMetaData caching and timestamp-preserving relay.
  * Client AMF0/AMF3 metadata and Aggregate receive callbacks, populated
    codec/track fields, and legacy pause/seek/receiveAudio/receiveVideo/
    closeStream command handling on the server session path.
  * Correct E-RTMP packet-type constants and per-codec capability masks;
    bound capability blobs, Aggregate sub-tags, and multitrack cache storage.

 -- OpenRTMP <info@openrtmp.org>  Wed, 15 Jul 2026 00:00:00 +0000

librtmp2 (0.3.1-1) UNRELEASED; urgency=medium

  * Harden DNS resolution, RTMP ping keepalive, and publishing send-path
    flush behavior on the client and server.
  * Close stale pre-connect sessions and cap the shared DNS resolver queue
    to prevent connection-slot exhaustion and unbounded resolver threads.

 -- OpenRTMP <info@openrtmp.org>  Sun, 13 Jul 2026 00:00:00 +0000

librtmp2 (0.3.0-1) UNRELEASED; urgency=medium

  * Initial Debian packaging for PPA publishing.
  * Lower the rustc Build-Depends floor to 1.93, matching the crate's
    actual MSRV (rust-version in Cargo.toml) instead of whatever
    toolchain happened to be installed in CI.
  * Client TLS verification now honors ServerConfig.tls_ca_file and
    tls_insecure via Transport::connect_tls()'s new ca_file/insecure
    parameters, which were previously silently ignored.

 -- OpenRTMP <info@openrtmp.org>  Sun, 12 Jul 2026 00:00:00 +0000

librtmp2 (0.2.1-1) UNRELEASED; urgency=medium

  * lrtmp2_tls_supported() runtime capability check exported to FFI.
  * Parse onMetaData from RTMP data messages into Conn fields (duration,
    width, height, framerate, videodatarate, audiodatarate, codec info).
  * Fix flv audio/video/script tag parsers not resetting the
    caller-owned tag struct at the start of every parse() call.
  * Fix CodeQL invalid-pointer alert in the FFI server_create test and
    borrow-checker errors in AMF0 skip_value_depth.
  * Security: cap and copy FFI frame payloads before sending; add
    per-poll and per-command-wait recv byte budgets to the RTMP client;
    substitute a safe default max_connections for a zero-initialized
    ServerConfig instead of disabling connection limiting.

 -- OpenRTMP <info@openrtmp.org>  Fri, 10 Jul 2026 00:00:00 +0000

librtmp2 (0.2.0-1) UNRELEASED; urgency=medium

  * RTMP Aggregate message (0x16) handling: aggregate-framed audio/video
    is now unpacked and relayed through the normal media-frame path.
  * Client::connect() now actually supports rtmps:// via the new
    Transport::connect_tls(); parse_rtmp_url() recognizes the scheme
    and defaults to port 443.
  * Various client/server transport correctness fixes: recv budget
    accounting no longer drops already-read bytes, poll(2) retries on
    EINTR, bounded TLS handshake timeout, blocking read helpers poll
    for write-readiness during TLS renegotiation, RTMPS pre-checks TLS
    support before dialing.
  * Security: cap and copy FFI frame payloads before sending; add
    per-poll and per-command-wait recv byte budgets to the RTMP client;
    substitute a safe default max_connections for a zero-initialized
    ServerConfig instead of disabling connection limiting.

 -- OpenRTMP <info@openrtmp.org>  Fri, 10 Jul 2026 00:00:00 +0000

librtmp2 (0.1.1-1) UNRELEASED; urgency=medium

  * Cap per-connection recv drain in process_connections() to 256 KiB
    per poll pass, preventing a peer from starving other sessions in
    the single-threaded poll loop.
  * Update docs.rs badge to track the latest published version.

 -- OpenRTMP <info@openrtmp.org>  Wed, 08 Jul 2026 00:00:00 +0000

librtmp2 (0.1.0-1) UNRELEASED; urgency=medium

  * First tagged pre-release: TLS/RTMPS support (OpenSSL, optional via
    the "tls" Cargo feature), legacy RTMP and Enhanced RTMP v1/v2
    protocol support, full server/client APIs with callbacks, frame API
    for audio/video/script/metadata, H.264/H.265/AV1 and legacy video,
    AAC/Opus/MP3/G.711 audio, bounds-checked parsers, constant-time
    handshake RNG, and ABI baseline tooling.

 -- OpenRTMP <info@openrtmp.org>  Wed, 08 Jul 2026 00:00:00 +0000