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