Skip to content

librtmp2 0.14.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 18:37

Added

  • media::codec_config: structural validators for
    AVCDecoderConfigurationRecord / HEVCDecoderConfigurationRecord
    (validate_avc_record, validate_hevc_record, validate_config_record,
    ConfigCodec). They check that every length field and count stays inside the
    record and that no parameter set is empty; they never decode video and
    allocate nothing.
  • A video_config fuzz target with a seed corpus, regression tests for cache
    poisoning, codec switches, RTMP control messages, publisher isolation and
    malformed-connection churn, and an extended churn job in the scheduled fuzz
    workflow. See docs/malformed-input.md.

Changed

  • Behaviour change (init-frame cache): a malformed or empty AVC/HEVC (or
    multitrack) sequence-header configuration is still relayed live, but is no
    longer classified as a cacheable sequence header, so it can no longer replace
    a previously cached valid header for late joiners. Enhanced RTMP command
    frames (FrameType 5) are never cached as headers or keyframes.
    classify_cache_frame now returns LiveOnly for such payloads. Hosts that
    feed placeholder sequence headers (for example in tests) need valid records.
  • A changed sequence header now drops the cached keyframe of the previous
    configuration; a repeated identical header keeps it.
  • Multitrack containers are walked without collecting the tracks into a Vec.

Benchmarks

Measured automatically for this release on a CI runner; the machine is described below. Raw data: bench-results-v0.14.0.json.

  • Measured: 2026-10-14 18:39:44 UTC · 39e1a26 · crate version 0.14.0 · workflow run
  • CPU: AMD EPYC 7763 64-Core Processor · 4 vCPUs
  • RAM: 15.6 GiB
  • System: Linux 6.17.0-1022-azure x86_64 · rustc 1.99.0 · GitHub-hosted ubuntu24 (image 20261012.334.1)
  • Noise: shared CI VM — CPU model, neighbouring load and the runner image change between runs, so treat absolute numbers as indicative.
  • Comparable vs release v0.13.0: ⚠️ same CPU model and vCPU count, but runner image changed: differences under 10 % may come from the toolchain or host, not the code

protocol

Benchmark Time Throughput vs release v0.13.0
amf0_build_connect 226 ns — ⚪ +3.8 %
chunk/write_read_roundtrip 6.87 µs ~569 MiB/s ⚪ +0.5 %
flv/audio_tag_aac 1.25 ns — ⚪ −0.5 %
flv/video_tag_h264 1.25 ns — ⚪ −0.2 %
fourcc_to_video_codec_avc1 2.49 ns — ⚪ −0.2 %
server_read_c1 1.07 µs — ⚪ +0.1 %

relay

Benchmark Time Throughput vs release v0.13.0
relay/publish_to_player/100 96.5 ms ~1036 elem/s ⚪ −0.8 %
relay/publish_to_player/500 98.2 ms ~5090 elem/s ⚪ −0.6 %

🟢 faster · 🔴 slower · ⚪ within the noise band (5–25 % depending on how comparable the two environments are, plus both runs' Criterion confidence intervals). Lower time is better.