Repository navigation
librtmp2 0.14.0
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_configfuzz 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. Seedocs/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_framenow returnsLiveOnlyfor 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.