[INFO] cloning repository https://github.com/lizhiyong2000/vcp-media-server
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/lizhiyong2000/vcp-media-server" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flizhiyong2000%2Fvcp-media-server", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flizhiyong2000%2Fvcp-media-server'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 538aacdf76b562b4bb38962ed2df438484fa5fed
[INFO] checking lizhiyong2000/vcp-media-server against try#24e1a22664233bce1f9b5dc6eee7c1f74327e28c for pr-159343
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flizhiyong2000%2Fvcp-media-server" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/lizhiyong2000/vcp-media-server
[INFO] finished tweaking git repo https://github.com/lizhiyong2000/vcp-media-server
[INFO] tweaked toml for git repo https://github.com/lizhiyong2000/vcp-media-server written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/lizhiyong2000/vcp-media-server on toolchain 24e1a22664233bce1f9b5dc6eee7c1f74327e28c
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+24e1a22664233bce1f9b5dc6eee7c1f74327e28c" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/lizhiyong2000/vcp-media-server already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+24e1a22664233bce1f9b5dc6eee7c1f74327e28c" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 41f81f3fc51408f3e5170cc4145e8c3cf6da6b8835020b7c86ca2b8c538b1779
[INFO] running `Command { std: "docker" "start" "41f81f3fc51408f3e5170cc4145e8c3cf6da6b8835020b7c86ca2b8c538b1779", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "41f81f3fc51408f3e5170cc4145e8c3cf6da6b8835020b7c86ca2b8c538b1779", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "41f81f3fc51408f3e5170cc4145e8c3cf6da6b8835020b7c86ca2b8c538b1779" "/opt/rustwide/cargo-home/bin/cargo" "+24e1a22664233bce1f9b5dc6eee7c1f74327e28c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "41f81f3fc51408f3e5170cc4145e8c3cf6da6b8835020b7c86ca2b8c538b1779", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "41f81f3fc51408f3e5170cc4145e8c3cf6da6b8835020b7c86ca2b8c538b1779" "/opt/rustwide/cargo-home/bin/cargo" "+24e1a22664233bce1f9b5dc6eee7c1f74327e28c" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling quote v1.0.46
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]     Checking typenum v1.20.1
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]     Checking memchr v2.8.2
[INFO] [stderr]     Checking smallvec v1.15.2
[INFO] [stderr]     Checking pin-project-lite v0.2.17
[INFO] [stderr]     Checking bytes v1.12.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling zerocopy v0.8.52
[INFO] [stderr]     Checking lock_api v0.4.14
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]    Compiling shlex v2.0.1
[INFO] [stderr]     Checking log v0.4.33
[INFO] [stderr]     Checking stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]     Checking lazy_static v1.5.0
[INFO] [stderr]    Compiling cc v1.2.65
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]     Checking ipnet v2.12.0
[INFO] [stderr]     Checking futures-core v0.3.32
[INFO] [stderr]    Compiling portable-atomic v1.13.1
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]     Checking cpufeatures v0.2.17
[INFO] [stderr]     Checking futures-sink v0.3.32
[INFO] [stderr]     Checking writeable v0.6.3
[INFO] [stderr]     Checking litemap v0.8.2
[INFO] [stderr]     Checking itoa v1.0.18
[INFO] [stderr]     Checking futures-channel v0.3.32
[INFO] [stderr]    Compiling memoffset v0.7.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling icu_normalizer_data v2.2.0
[INFO] [stderr]     Checking utf8_iter v1.0.4
[INFO] [stderr]    Compiling icu_properties_data v2.2.0
[INFO] [stderr]     Checking once_cell v1.21.4
[INFO] [stderr]     Checking futures-task v0.3.32
[INFO] [stderr]     Checking futures-io v0.3.32
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]     Checking slab v0.4.12
[INFO] [stderr]     Checking percent-encoding v2.3.2
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]     Checking base64ct v1.8.3
[INFO] [stderr]     Checking num_threads v0.1.7
[INFO] [stderr]     Checking deranged v0.5.8
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]     Checking form_urlencoded v1.2.2
[INFO] [stderr]     Checking http v1.4.2
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]     Checking regex-syntax v0.8.11
[INFO] [stderr]     Checking pem-rfc7468 v0.7.0
[INFO] [stderr]    Compiling syn v2.0.118
[INFO] [stderr]    Compiling time-macros v0.2.31
[INFO] [stderr]     Checking nom v7.1.3
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]     Checking atomic-waker v1.1.2
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling clang-sys v1.8.1
[INFO] [stderr]    Compiling libloading v0.8.9
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling semver v1.0.28
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling rustls v0.23.41
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]     Checking crc-catalog v2.5.0
[INFO] [stderr]    Compiling bindgen v0.72.1
[INFO] [stderr]     Checking opaque-debug v0.3.1
[INFO] [stderr]    Compiling rustc_version v0.4.1
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]     Checking crc v3.4.0
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking mio v1.2.1
[INFO] [stderr]     Checking socket2 v0.6.4
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking nix v0.26.4
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking time v0.3.52
[INFO] [stderr]     Checking ff v0.13.1
[INFO] [stderr]     Checking group v0.13.0
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking rusticata-macros v4.1.0
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]     Checking data-encoding v2.11.0
[INFO] [stderr]    Compiling oid-registry v0.7.1
[INFO] [stderr]    Compiling rustc-hash v2.1.3
[INFO] [stderr]    Compiling bitflags v2.13.0
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]    Compiling curve25519-dalek v4.1.3
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]     Checking tower-service v0.3.3
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling pkg-config v0.3.33
[INFO] [stderr]    Compiling substring v1.4.5
[INFO] [stderr]     Checking arc-swap v1.9.2
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]     Checking socket2 v0.5.10
[INFO] [stderr]     Checking waitgroup v0.1.2
[INFO] [stderr]     Checking pem v3.0.6
[INFO] [stderr]    Compiling cexpr v0.6.0
[INFO] [stderr]     Checking sync_wrapper v1.0.2
[INFO] [stderr]     Checking equivalent v1.0.2
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]     Checking hashbrown v0.17.1
[INFO] [stderr]     Checking tower-layer v0.3.3
[INFO] [stderr]    Compiling anyhow v1.0.103
[INFO] [stderr]     Checking uuid v1.23.4
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]     Checking thread_local v1.1.9
[INFO] [stderr]     Checking nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling ffmpeg-next v8.1.0
[INFO] [stderr]     Checking winnow v0.7.15
[INFO] [stderr]     Checking toml_write v0.1.2
[INFO] [stderr]     Checking ryu v1.0.23
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking http-body-util v0.1.3
[INFO] [stderr]     Checking termios v0.2.2
[INFO] [stderr]     Checking yasna v0.5.2
[INFO] [stderr]     Checking serial-core v0.4.0
[INFO] [stderr]     Checking indexmap v2.14.0
[INFO] [stderr]     Checking ioctl-rs v0.1.6
[INFO] [stderr]     Checking symlink v0.1.0
[INFO] [stderr]     Checking regex v1.12.4
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]     Checking predicates-core v1.0.10
[INFO] [stderr]     Checking serial-unix v0.4.0
[INFO] [stderr]     Checking float-cmp v0.10.0
[INFO] [stderr]     Checking anstyle v1.0.14
[INFO] [stderr]     Checking termtree v0.5.1
[INFO] [stderr]     Checking difflib v0.4.0
[INFO] [stderr]     Checking normalize-line-endings v0.3.0
[INFO] [stderr]    Compiling assert_cmd v2.2.2
[INFO] [stderr]     Checking linux-raw-sys v0.12.1
[INFO] [stderr]     Checking serial v0.4.0
[INFO] [stderr]     Checking predicates-tree v1.0.13
[INFO] [stderr]     Checking nix v0.25.1
[INFO] [stderr]     Checking predicates v3.1.4
[INFO] [stderr]     Checking bstr v1.12.3
[INFO] [stderr]     Checking wait-timeout v0.2.1
[INFO] [stderr]     Checking downcast-rs v1.2.1
[INFO] [stderr]     Checking fastrand v2.4.1
[INFO] [stderr]     Checking shell-words v1.1.1
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]     Checking rand v0.8.6
[INFO] [stderr]    Compiling zeroize_derive v1.5.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling asn1-rs-derive v0.5.1
[INFO] [stderr]    Compiling asn1-rs-impl v0.2.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]     Checking tokio v1.52.3
[INFO] [stderr]     Checking zeroize v1.9.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]     Checking der v0.7.10
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]     Checking rustls-pki-types v1.15.0
[INFO] [stderr]     Checking tempfile v3.27.0
[INFO] [stderr]     Checking zerofrom v0.1.8
[INFO] [stderr]     Checking asn1-rs v0.6.2
[INFO] [stderr]     Checking filedescriptor v0.8.3
[INFO] [stderr]     Checking yoke v0.8.3
[INFO] [stderr]     Checking rustls-webpki v0.103.13
[INFO] [stderr]     Checking webpki-roots v1.0.8
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking zerovec v0.11.6
[INFO] [stderr]     Checking zerotrie v0.2.4
[INFO] [stderr]     Checking block-padding v0.3.3
[INFO] [stderr]     Checking universal-hash v0.5.1
[INFO] [stderr]     Checking crypto-bigint v0.5.5
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]     Checking aead v0.5.2
[INFO] [stderr]     Checking polyval v0.6.2
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking hmac v0.12.1
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking spki v0.7.3
[INFO] [stderr]     Checking ghash v0.5.1
[INFO] [stderr]     Checking signature v2.2.0
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]     Checking md-5 v0.10.6
[INFO] [stderr]     Checking hkdf v0.12.4
[INFO] [stderr]     Checking tinystr v0.8.3
[INFO] [stderr]     Checking potential_utf v0.1.5
[INFO] [stderr]     Checking pkcs8 v0.10.2
[INFO] [stderr]     Checking rfc6979 v0.4.0
[INFO] [stderr]     Checking tungstenite v0.24.0
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]     Checking icu_collections v2.2.0
[INFO] [stderr]     Checking sec1 v0.7.3
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking icu_locale_core v2.2.0
[INFO] [stderr]     Checking ccm v0.5.0
[INFO] [stderr]     Checking x25519-dalek v2.0.1
[INFO] [stderr]     Checking cbc v0.1.2
[INFO] [stderr]     Checking portable-pty v0.8.1
[INFO] [stderr]     Checking der-parser v9.0.0
[INFO] [stderr]     Checking aes-gcm v0.10.3
[INFO] [stderr]     Checking elliptic-curve v0.13.8
[INFO] [stderr]     Checking icu_provider v2.2.0
[INFO] [stderr]     Checking x509-parser v0.16.0
[INFO] [stderr]     Checking primeorder v0.13.6
[INFO] [stderr]     Checking ecdsa v0.16.9
[INFO] [stderr]     Checking icu_properties v2.2.0
[INFO] [stderr]     Checking icu_normalizer v2.2.0
[INFO] [stderr]     Checking bincode v1.3.3
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking smol_str v0.2.2
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking p256 v0.13.2
[INFO] [stderr]     Checking p384 v0.13.1
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking tracing-appender v0.2.5
[INFO] [stderr]     Checking futures-executor v0.3.32
[INFO] [stderr]     Checking futures v0.3.32
[INFO] [stderr]     Checking rcgen v0.13.2
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking sdp v0.7.0
[INFO] [stderr]    Compiling ffmpeg-sys-next v8.1.0
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking webrtc-util v0.10.0
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking hyper v1.10.1
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking tokio-tungstenite v0.24.0
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking tower-http v0.6.11
[INFO] [stderr]     Checking rtp v0.12.0
[INFO] [stderr]     Checking rtcp v0.12.0
[INFO] [stderr]     Checking stun v0.7.0
[INFO] [stderr]     Checking webrtc-sctp v0.11.0
[INFO] [stderr]     Checking webrtc-mdns v0.8.0
[INFO] [stderr]     Checking webrtc-dtls v0.11.0
[INFO] [stderr]     Checking hyper-rustls v0.27.9
[INFO] [stderr]     Checking webrtc-media v0.9.0
[INFO] [stderr]     Checking webrtc-srtp v0.14.0
[INFO] [stderr]     Checking reqwest v0.12.28
[INFO] [stderr]     Checking turn v0.9.0
[INFO] [stderr]     Checking interceptor v0.13.0
[INFO] [stderr]     Checking webrtc-data v0.10.0
[INFO] [stderr]     Checking webrtc-ice v0.12.0
[INFO] [stderr]     Checking webrtc v0.12.0
[INFO] [stderr]     Checking vcp-media-server v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `is_video_keyframe`
[INFO] [stdout]  --> src/core/dispatch.rs:8:44
[INFO] [stdout]   |
[INFO] [stdout] 8 | use super::frame_ring::{is_playable_video, is_video_keyframe, SnapMode};
[INFO] [stdout]   |                                            ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `last_playable_idr_seq`
[INFO] [stdout]  --> src/core/live_play.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::dispatch::{last_playable_idr_seq, DispatchError, DispatchReader};
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OnceLock`
[INFO] [stdout]  --> src/core/metrics.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::sync::{Arc, OnceLock};
[INFO] [stdout]   |                      ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]   --> src/core/protocol.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     HTTP_FLV,
[INFO] [stdout]    |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_API` should have an upper camel case name
[INFO] [stdout]   --> src/core/protocol.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     HTTP_API,
[INFO] [stdout]    |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpApi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]    --> src/core/mod.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 |     HTTP_FLV,
[INFO] [stdout]     |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]  --> src/server/hls/m3u8.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::{Duration, SystemTime, UNIX_EPOCH};
[INFO] [stdout]   |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MILLISECOND_CLOCK_RATE` and `VIDEO_RTP_CLOCK_RATE`
[INFO] [stdout]  --> src/server/hls/timing.rs:6:42
[INFO] [stdout]   |
[INFO] [stdout] 6 |     media_timestamp_delta_ms_with_clock, MILLISECOND_CLOCK_RATE, VIDEO_RTP_CLOCK_RATE,
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/server/hls/ts_parser.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_keyframe_annex_b`
[INFO] [stdout]   --> src/server/hls/mod.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     is_keyframe_annex_b, prepend_annex_b_config_if_needed, CodecType, DispatchPolicy,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `annex_b_with_config`
[INFO] [stdout]   --> src/server/hls/mod.rs:26:29
[INFO] [stdout]    |
[INFO] [stdout] 26 | use crate::server::webrtc::{annex_b_with_config, request_publisher_keyframe};
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::io::AsyncReadExt`
[INFO] [stdout]  --> src/server/http_flv/puller.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::io::AsyncReadExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/server/http_flv/puller.rs:8:35
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |                                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufMut`, `BytesMut`, and `Bytes`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use bytes::{BufMut, Bytes, BytesMut};
[INFO] [stdout]   |             ^^^^^^  ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, `info`, and `warn`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufMut`
[INFO] [stdout]  --> src/server/rtmp/chunk.rs:3:18
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::{Buf, BufMut, BytesMut};
[INFO] [stdout]   |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info`, `trace`, and `warn`
[INFO] [stdout]  --> src/server/rtmp/chunk.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, error, info, trace, warn};
[INFO] [stdout]   |                             ^^^^  ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::BytesMut`
[INFO] [stdout]  --> src/server/rtmp/pusher.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::BytesMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/server/rtmp/pusher.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ChunkAssembler`, `ChunkHeader`, and `RtmpMessage`
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:12:26
[INFO] [stdout]    |
[INFO] [stdout] 12 | use super::chunk::{self, ChunkAssembler, ChunkHeader, RtmpMessage};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtmpUrl`
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:14:37
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::puller::{parse_rtmp_url, RtmpUrl};
[INFO] [stdout]    |                                     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/server/rtmp/session.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Level`
[INFO] [stdout]  --> src/server/rtmp/session.rs:5:28
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, info, Level};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType`, `StreamProtocol`, and `StreamSourceMode`
[INFO] [stdout]  --> src/server/rtmp/session.rs:8:19
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::core::{CodecType, MediaFrame, StreamProtocol, StreamSourceMode};
[INFO] [stdout]   |                   ^^^^^^^^^              ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::server::webrtc::h264_util::is_keyframe_annex_b`
[INFO] [stdout]  --> src/server/rtmp/session.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::server::webrtc::h264_util::is_keyframe_annex_b;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]   --> src/server/rtmp/mod.rs:16:17
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::BytesMut`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use bytes::BytesMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TcpStream`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stdout]   |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Duration`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:11:30
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::core::{CodecType, MediaFrame, StreamManager, StreamProtocol, StreamSourceMode, Track};
[INFO] [stdout]    |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]  --> src/server/rtsp/client_session.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType` and `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:15:19
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::core::{CodecType, MediaFrame, StreamManager, Track};
[INFO] [stdout]    |                   ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]  --> src/server/rtsp/play_egress.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::{Duration, Instant};
[INFO] [stdout]   |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::net::TcpStream`
[INFO] [stdout]  --> src/server/rtsp/pusher.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::net::TcpStream;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:15:16
[INFO] [stdout]    |
[INFO] [stdout] 15 |     CodecType, MediaFrame, MediaTransport, PusherId, StreamManager, StreamProtocol, StreamPusher,
[INFO] [stdout]    |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `Sender`, and `channel`
[INFO] [stdout]  --> src/server/rtsp/server_session.rs:7:25
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]   |                         ^^^^^^^  ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtspRequest`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:17:25
[INFO] [stdout]    |
[INFO] [stdout] 17 |     InterleavedChannel, RtspRequest, RtspResponse, RtspServer, RtspSessionState, TransportMode,
[INFO] [stdout]    |                         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::core::hevc_sprop_from_nals`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::core::hevc_sprop_from_nals;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SocketReader` and `spawn_write_loop`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:25:39
[INFO] [stdout]    |
[INFO] [stdout] 25 | use crate::server::socket_transport::{spawn_write_loop, ChannelSocketWriter, SocketReader};
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^^^^                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/server/socket_transport.rs:5:25
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]   |                         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> src/server/socket_transport.rs:7:29
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{debug, error, info};
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/server/transport/adapters.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/server/transport/adapters.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `StreamManager` and `TransportStatus`
[INFO] [stdout]  --> src/server/transport/adapters.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 |     MediaTransport, StreamManager, StreamProtocol, StreamPuller, TransportConfig, TransportStatus,
[INFO] [stdout]   |                     ^^^^^^^^^^^^^                                                 ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `webrtc::track::track_local::TrackLocalWriter`
[INFO] [stdout]  --> src/server/webrtc/outbound_h264.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use webrtc::track::track_local::TrackLocalWriter;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `contains_idr_nalu`
[INFO] [stdout]   --> src/server/webrtc/player.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     contains_idr_nalu, contains_sps_or_pps_nalu, describe_annex_b, duration_from_rtp_timestamps,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_video_keyframe`
[INFO] [stdout]  --> src/core/dispatch.rs:8:44
[INFO] [stdout]   |
[INFO] [stdout] 8 | use super::frame_ring::{is_playable_video, is_video_keyframe, SnapMode};
[INFO] [stdout]   |                                            ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `last_playable_idr_seq`
[INFO] [stdout]  --> src/core/live_play.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::dispatch::{last_playable_idr_seq, DispatchError, DispatchReader};
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OnceLock`
[INFO] [stdout]  --> src/core/metrics.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::sync::{Arc, OnceLock};
[INFO] [stdout]   |                      ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]   --> src/core/protocol.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     HTTP_FLV,
[INFO] [stdout]    |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_API` should have an upper camel case name
[INFO] [stdout]   --> src/core/protocol.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     HTTP_API,
[INFO] [stdout]    |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpApi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]    --> src/core/tester.rs:647:13
[INFO] [stdout]     |
[INFO] [stdout] 647 |         use std::sync::Arc;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]    --> src/core/mod.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 |     HTTP_FLV,
[INFO] [stdout]     |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]  --> src/server/hls/m3u8.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::{Duration, SystemTime, UNIX_EPOCH};
[INFO] [stdout]   |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/server/hls/ts_parser.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_keyframe_annex_b`
[INFO] [stdout]   --> src/server/hls/mod.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     is_keyframe_annex_b, prepend_annex_b_config_if_needed, CodecType, DispatchPolicy,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `annex_b_with_config`
[INFO] [stdout]   --> src/server/hls/mod.rs:26:29
[INFO] [stdout]    |
[INFO] [stdout] 26 | use crate::server::webrtc::{annex_b_with_config, request_publisher_keyframe};
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::io::AsyncReadExt`
[INFO] [stdout]  --> src/server/http_flv/puller.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::io::AsyncReadExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/server/http_flv/puller.rs:8:35
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |                                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufMut`, `BytesMut`, and `Bytes`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use bytes::{BufMut, Bytes, BytesMut};
[INFO] [stdout]   |             ^^^^^^  ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, `info`, and `warn`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufMut`
[INFO] [stdout]  --> src/server/rtmp/chunk.rs:3:18
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::{Buf, BufMut, BytesMut};
[INFO] [stdout]   |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info`, `trace`, and `warn`
[INFO] [stdout]  --> src/server/rtmp/chunk.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, error, info, trace, warn};
[INFO] [stdout]   |                             ^^^^  ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::BytesMut`
[INFO] [stdout]  --> src/server/rtmp/pusher.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::BytesMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/server/rtmp/pusher.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ChunkAssembler`, `ChunkHeader`, and `RtmpMessage`
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:12:26
[INFO] [stdout]    |
[INFO] [stdout] 12 | use super::chunk::{self, ChunkAssembler, ChunkHeader, RtmpMessage};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtmpUrl`
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:14:37
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::puller::{parse_rtmp_url, RtmpUrl};
[INFO] [stdout]    |                                     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/server/rtmp/session.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Level`
[INFO] [stdout]  --> src/server/rtmp/session.rs:5:28
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, info, Level};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType`, `StreamProtocol`, and `StreamSourceMode`
[INFO] [stdout]  --> src/server/rtmp/session.rs:8:19
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::core::{CodecType, MediaFrame, StreamProtocol, StreamSourceMode};
[INFO] [stdout]   |                   ^^^^^^^^^              ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::server::webrtc::h264_util::is_keyframe_annex_b`
[INFO] [stdout]  --> src/server/rtmp/session.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::server::webrtc::h264_util::is_keyframe_annex_b;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]   --> src/server/rtmp/mod.rs:16:17
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::BytesMut`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use bytes::BytesMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TcpStream`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stdout]   |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Duration`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:11:30
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::core::{CodecType, MediaFrame, StreamManager, StreamProtocol, StreamSourceMode, Track};
[INFO] [stdout]    |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]  --> src/server/rtsp/client_session.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType` and `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:15:19
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::core::{CodecType, MediaFrame, StreamManager, Track};
[INFO] [stdout]    |                   ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::net::TcpStream`
[INFO] [stdout]  --> src/server/rtsp/pusher.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::net::TcpStream;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:15:16
[INFO] [stdout]    |
[INFO] [stdout] 15 |     CodecType, MediaFrame, MediaTransport, PusherId, StreamManager, StreamProtocol, StreamPusher,
[INFO] [stdout]    |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `Sender`, and `channel`
[INFO] [stdout]  --> src/server/rtsp/server_session.rs:7:25
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]   |                         ^^^^^^^  ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtspRequest`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:17:25
[INFO] [stdout]    |
[INFO] [stdout] 17 |     InterleavedChannel, RtspRequest, RtspResponse, RtspServer, RtspSessionState, TransportMode,
[INFO] [stdout]    |                         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::core::hevc_sprop_from_nals`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::core::hevc_sprop_from_nals;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SocketReader` and `spawn_write_loop`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:25:39
[INFO] [stdout]    |
[INFO] [stdout] 25 | use crate::server::socket_transport::{spawn_write_loop, ChannelSocketWriter, SocketReader};
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^^^^                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/server/socket_transport.rs:5:25
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]   |                         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> src/server/socket_transport.rs:7:29
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{debug, error, info};
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/server/transport/adapters.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/server/transport/adapters.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `StreamManager` and `TransportStatus`
[INFO] [stdout]  --> src/server/transport/adapters.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 |     MediaTransport, StreamManager, StreamProtocol, StreamPuller, TransportConfig, TransportStatus,
[INFO] [stdout]   |                     ^^^^^^^^^^^^^                                                 ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `webrtc::track::track_local::TrackLocalWriter`
[INFO] [stdout]  --> src/server/webrtc/outbound_h264.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use webrtc::track::track_local::TrackLocalWriter;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `contains_idr_nalu`
[INFO] [stdout]   --> src/server/webrtc/player.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     contains_idr_nalu, contains_sps_or_pps_nalu, describe_annex_b, duration_from_rtp_timestamps,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/http_flv/puller.rs:517:9
[INFO] [stdout]     |
[INFO] [stdout] 517 |     let mut pps_sent = false;
[INFO] [stdout]     |         ----^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/http_flv/puller.rs:521:9
[INFO] [stdout]     |
[INFO] [stdout] 521 |     let mut prev_tag_size: u32 = 0;
[INFO] [stdout]     |         ----^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:127:17
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(crate::core::dispatch::DispatchError::Closed) => break,
[INFO] [stdout]     |                 ------------------------------------------------- matches all the relevant values
[INFO] [stdout] 127 |                 Err(e) => {
[INFO] [stdout]     |                 ^^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtmp/mod.rs:247:13
[INFO] [stdout]     |
[INFO] [stdout] 247 |         let mut reader = SocketReader::new(reader);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/http_flv/puller.rs:517:9
[INFO] [stdout]     |
[INFO] [stdout] 517 |     let mut pps_sent = false;
[INFO] [stdout]     |         ----^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/http_flv/puller.rs:521:9
[INFO] [stdout]     |
[INFO] [stdout] 521 |     let mut prev_tag_size: u32 = 0;
[INFO] [stdout]     |         ----^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtmp/mod.rs:833:21
[INFO] [stdout]     |
[INFO] [stdout] 833 |                 let mut result_values = vec![
[INFO] [stdout]     |                     ----^^^^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut response_buffer = String::new();
[INFO] [stdout]     |                 ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]    --> src/server/rtsp/puller.rs:441:9
[INFO] [stdout]     |
[INFO] [stdout] 438 | /         loop {
[INFO] [stdout] 439 | |             tokio::time::sleep(Duration::from_secs(30)).await;
[INFO] [stdout] 440 | |         }
[INFO] [stdout]     | |_________- any code following this expression is unreachable
[INFO] [stdout] 441 |           info!("[RTSP Puller] [Keepalive] Keepalive loop ended");
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout]     = note: this warning originates in the macro `$crate::event` which comes from the expansion of the macro `info` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:127:17
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(crate::core::dispatch::DispatchError::Closed) => break,
[INFO] [stdout]     |                 ------------------------------------------------- matches all the relevant values
[INFO] [stdout] 127 |                 Err(e) => {
[INFO] [stdout]     |                 ^^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtmp/mod.rs:247:13
[INFO] [stdout]     |
[INFO] [stdout] 247 |         let mut reader = SocketReader::new(reader);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/socket_transport.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 |                 let mut final_result = result[..pos + delimiter.len()].to_vec();
[INFO] [stdout]    |                     ----^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtmp/mod.rs:833:21
[INFO] [stdout]     |
[INFO] [stdout] 833 |                 let mut result_values = vec![
[INFO] [stdout]     |                     ----^^^^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut response_buffer = String::new();
[INFO] [stdout]     |                 ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]    --> src/server/rtsp/puller.rs:441:9
[INFO] [stdout]     |
[INFO] [stdout] 438 | /         loop {
[INFO] [stdout] 439 | |             tokio::time::sleep(Duration::from_secs(30)).await;
[INFO] [stdout] 440 | |         }
[INFO] [stdout]     | |_________- any code following this expression is unreachable
[INFO] [stdout] 441 |           info!("[RTSP Puller] [Keepalive] Keepalive loop ended");
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout]     = note: this warning originates in the macro `$crate::event` which comes from the expansion of the macro `info` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/socket_transport.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 |                 let mut final_result = result[..pos + delimiter.len()].to_vec();
[INFO] [stdout]    |                     ----^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaTransport`
[INFO] [stdout]  --> src/server/transport/adapters.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     MediaTransport, StreamManager, StreamProtocol, StreamPuller, TransportConfig, TransportStatus,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/core/metrics.rs:383:13
[INFO] [stdout]     |
[INFO] [stdout] 383 |             mut hls,
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]   --> src/core/tester.rs:86:17
[INFO] [stdout]    |
[INFO] [stdout] 86 |             let tracks = vec![
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_segments`
[INFO] [stdout]    --> src/server/hls/m3u8.rs:199:41
[INFO] [stdout]     |
[INFO] [stdout] 199 |     pub fn slot_filename(sequence: u64, max_segments: usize) -> String {
[INFO] [stdout]     |                                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_segments`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `playlist_body` is never read
[INFO] [stdout]    --> src/server/hls/puller.rs:314:9
[INFO] [stdout]     |
[INFO] [stdout] 314 |         playlist_body = body.clone();
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/http_flv/puller.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let mut best_bandwidth = u64::MAX;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `best_bandwidth`
[INFO] [stdout]   --> src/server/http_flv/puller.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let mut best_bandwidth = u64::MAX;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_best_bandwidth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `current_bandwidth` is assigned to, but never used
[INFO] [stdout]   --> src/server/http_flv/puller.rs:33:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let mut current_bandwidth = 0u64;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: consider using `_current_bandwidth` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_bandwidth` is never read
[INFO] [stdout]   --> src/server/http_flv/puller.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |                         current_bandwidth = bw_str.parse().unwrap_or(0);
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_audio`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:310:9
[INFO] [stdout]     |
[INFO] [stdout] 310 |     let has_audio = es_map.contains_key(&all_audio_pid.unwrap_or(0xFFFF));
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_audio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `pps_found` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:329:13
[INFO] [stdout]     |
[INFO] [stdout] 329 |         let mut pps_found = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_pps_found` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_bytes`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:377:25
[INFO] [stdout]     |
[INFO] [stdout] 377 |                     let pps_bytes = nal_unit[4..].to_vec();
[INFO] [stdout]     |                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_bytes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `pps_found` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:368:21
[INFO] [stdout]     |
[INFO] [stdout] 368 |                     pps_found = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 379 |                     pps_found = true;
[INFO] [stdout]     |                     ---------------- `pps_found` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `pps_found` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:379:21
[INFO] [stdout]     |
[INFO] [stdout] 379 |                     pps_found = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `sps_sent` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:516:9
[INFO] [stdout]     |
[INFO] [stdout] 516 |     let mut sps_sent = false;
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_sps_sent` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_sent`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:517:9
[INFO] [stdout]     |
[INFO] [stdout] 517 |     let mut pps_sent = false;
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_sent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prev_tag_size`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:521:9
[INFO] [stdout]     |
[INFO] [stdout] 521 |     let mut prev_tag_size: u32 = 0;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_prev_tag_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `current_tag_offset` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:522:9
[INFO] [stdout]     |
[INFO] [stdout] 522 |     let mut current_tag_offset = 0usize;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_current_tag_offset` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sps_sent` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:606:45
[INFO] [stdout]     |
[INFO] [stdout] 606 | ...                   sps_sent = true;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 661 | ...                       sps_sent = true;
[INFO] [stdout]     |                           --------------- `sps_sent` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sps_sent` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:661:49
[INFO] [stdout]     |
[INFO] [stdout] 661 | ...                   sps_sent = true;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_tag_offset` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:557:13
[INFO] [stdout]     |
[INFO] [stdout] 557 |             current_tag_offset = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_video`
[INFO] [stdout]    --> src/server/http_flv/mod.rs:150:43
[INFO] [stdout]     |
[INFO] [stdout] 150 | fn generate_metadata_tag(stream_id: &str, has_video: bool, has_audio: bool) -> Vec<u8> {
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_video`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_audio`
[INFO] [stdout]    --> src/server/http_flv/mod.rs:150:60
[INFO] [stdout]     |
[INFO] [stdout] 150 | fn generate_metadata_tag(stream_id: &str, has_video: bool, has_audio: bool) -> Vec<u8> {
[INFO] [stdout]     |                                                            ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_audio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `server_stream_id` is never read
[INFO] [stdout]    --> src/server/rtmp/puller.rs:114:41
[INFO] [stdout]     |
[INFO] [stdout] 114 |           let mut server_stream_id: u32 = 1;
[INFO] [stdout]     |                                           ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 140 | /         server_stream_id = wait_for_create_stream(
[INFO] [stdout] 141 | |             &mut read_half,
[INFO] [stdout] 142 | |             &mut buf,
[INFO] [stdout] 143 | |             &mut chunk_states,
[INFO] [stdout] ...   |
[INFO] [stdout] 148 | |         .await? as u32;
[INFO] [stdout]     | |______________________- `server_stream_id` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `server_stream_id` is never read
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:478:41
[INFO] [stdout]     |
[INFO] [stdout] 478 |         let mut server_stream_id: u32 = 1;
[INFO] [stdout]     |                                         ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 492 |         server_stream_id = wait_for_create_stream(&mut conn, tx_id).await? as u32;
[INFO] [stdout]     |         ------------------------------------------------------------------------- `server_stream_id` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `initial_buf_len`
[INFO] [stdout]    --> src/server/rtmp/mod.rs:312:17
[INFO] [stdout]     |
[INFO] [stdout] 312 |             let initial_buf_len = buf.len();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_initial_buf_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaTransport`
[INFO] [stdout]  --> src/server/transport/adapters.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     MediaTransport, StreamManager, StreamProtocol, StreamPuller, TransportConfig, TransportStatus,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset` is never read
[INFO] [stdout]     --> src/server/rtmp/mod.rs:1522:21
[INFO] [stdout]      |
[INFO] [stdout] 1522 |                     offset = offset.saturating_add(1);
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset` is never read
[INFO] [stdout]     --> src/server/rtmp/mod.rs:1526:21
[INFO] [stdout]      |
[INFO] [stdout] 1526 |                     offset = offset.saturating_add(1);
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `response_buffer`
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut response_buffer = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_response_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `request`
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:453:21
[INFO] [stdout]     |
[INFO] [stdout] 453 |                 let request = RtspRequest::new("GET_PARAMETER", &remote_url)
[INFO] [stdout]     |                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_request`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/common.rs:844:17
[INFO] [stdout]     |
[INFO] [stdout] 844 |             let mut rtp = Self::build_rtp_packet(96, seq, timestamp, ssrc, false, sps);
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/common.rs:850:17
[INFO] [stdout]     |
[INFO] [stdout] 850 |             let mut rtp = Self::build_rtp_packet(96, seq + 1, timestamp, ssrc, false, pps);
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_url`
[INFO] [stdout]    --> src/server/rtsp/puller.rs:436:29
[INFO] [stdout]     |
[INFO] [stdout] 436 |     async fn send_keepalive(remote_url: String) {
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_url`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/rtsp/sdp_builder.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut session = SessionDescription {
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sps_cache`
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:994:13
[INFO] [stdout]     |
[INFO] [stdout] 994 |         let sps_cache = Arc::clone(&self.sps_cache);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sps_cache`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_cache`
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:995:13
[INFO] [stdout]     |
[INFO] [stdout] 995 |         let pps_cache = Arc::clone(&self.pps_cache);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_cache`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/core/metrics.rs:383:13
[INFO] [stdout]     |
[INFO] [stdout] 383 |             mut hls,
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:489:13
[INFO] [stdout]     |
[INFO] [stdout] 489 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq).header(
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:497:13
[INFO] [stdout]     |
[INFO] [stdout] 497 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:520:13
[INFO] [stdout]     |
[INFO] [stdout] 520 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:542:13
[INFO] [stdout]     |
[INFO] [stdout] 542 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:563:13
[INFO] [stdout]     |
[INFO] [stdout] 563 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:568:13
[INFO] [stdout]     |
[INFO] [stdout] 568 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:573:13
[INFO] [stdout]     |
[INFO] [stdout] 573 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:578:13
[INFO] [stdout]     |
[INFO] [stdout] 578 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:585:13
[INFO] [stdout]     |
[INFO] [stdout] 585 |         let mut response = RtspResponse::new(status_code, reason).header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]   --> src/core/tester.rs:86:17
[INFO] [stdout]    |
[INFO] [stdout] 86 |             let tracks = vec![
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream`
[INFO] [stdout]    --> src/core/tester.rs:217:13
[INFO] [stdout]     |
[INFO] [stdout] 217 |         let stream = manager.create_stream(
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:233:13
[INFO] [stdout]     |
[INFO] [stdout] 233 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:255:13
[INFO] [stdout]     |
[INFO] [stdout] 255 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:279:13
[INFO] [stdout]     |
[INFO] [stdout] 279 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:308:13
[INFO] [stdout]     |
[INFO] [stdout] 308 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buf`
[INFO] [stdout]    --> src/core/tester.rs:404:13
[INFO] [stdout]     |
[INFO] [stdout] 404 |         let buf = vec![
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_buf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream`
[INFO] [stdout]    --> src/core/tester.rs:718:13
[INFO] [stdout]     |
[INFO] [stdout] 718 |         let stream = manager.create_stream(
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:736:13
[INFO] [stdout]     |
[INFO] [stdout] 736 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream_manager` is never read
[INFO] [stdout]   --> src/process/transcode/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct TranscodeManager {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] 67 |     sessions: Arc<RwLock<HashMap<String, ActiveTranscodeSession>>>,
[INFO] [stdout] 68 |     stream_manager: Arc<StreamManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TranscodeManager` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `segment_wall_secs` and `output_dir` are never used
[INFO] [stdout]    --> src/server/hls/mod.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl HlsSession {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 199 |     fn segment_wall_secs(&self) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 553 |     pub fn output_dir(&self) -> &Path {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `download_segment` is never used
[INFO] [stdout]    --> src/server/hls/puller.rs:811:10
[INFO] [stdout]     |
[INFO] [stdout] 811 | async fn download_segment(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_ts_segment_hls` is never used
[INFO] [stdout]     --> src/server/hls/puller.rs:1186:10
[INFO] [stdout]      |
[INFO] [stdout] 1186 | async fn process_ts_segment_hls(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TS_PACKET_SIZE` is never used
[INFO] [stdout]     --> src/server/hls/puller.rs:1231:7
[INFO] [stdout]      |
[INFO] [stdout] 1231 | const TS_PACKET_SIZE: usize = 188;
[INFO] [stdout]      |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prepare_h264_au_for_ts` is never used
[INFO] [stdout]    --> src/server/hls/ts_muxer.rs:277:4
[INFO] [stdout]     |
[INFO] [stdout] 277 | fn prepare_h264_au_for_ts(data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `starts_with_aud` is never used
[INFO] [stdout]    --> src/server/hls/ts_muxer.rs:290:4
[INFO] [stdout]     |
[INFO] [stdout] 290 | fn starts_with_aud(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_paused` is never used
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl RtmpPusher {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 75 |     fn is_paused(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `build_setup_udp_response` is never used
[INFO] [stdout]    --> src/server/rtsp/mod.rs:527:8
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl RtspServer {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 527 |     fn build_setup_udp_response(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream_manager` is never read
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct RtspClientSession {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     stream_manager: Arc<StreamManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rtcp_socket` and `server_rtcp_addr` are never read
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | struct TrackUdpTransport {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 29 |     rtp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout] 30 |     rtcp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 31 |     server_rtp_addr: SocketAddr,
[INFO] [stdout] 32 |     server_rtcp_addr: SocketAddr,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `vps_cache` is never read
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct RtspPusher {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     vps_cache: Arc<parking_lot::RwLock<Option<Vec<u8>>>>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_paused` is never used
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:70:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl RtspPusher {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 70 |     fn is_paused(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sdp_generated` is never read
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct RtspServerSession {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 43 |     sdp_generated: Arc<parking_lot::RwLock<bool>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rtcp_socket` and `client_rtcp_addr` are never read
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | struct UdpTrackTransport {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 48 |     rtp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout] 49 |     rtcp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 50 |     client_rtp_addr: SocketAddr,
[INFO] [stdout] 51 |     client_rtcp_addr: SocketAddr,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UdpTrackTransport` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `send_rtp_over_udp_track`, `extract_h264_sps_pps_from_payload`, and `is_h264_keyframe` are never used
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:256:14
[INFO] [stdout]     |
[INFO] [stdout]  54 | impl RtspServerSession {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 256 |     async fn send_rtp_over_udp_track(&self, data: &[u8], track_id: u8) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 374 |     fn extract_h264_sps_pps_from_payload(payload: &[u8]) -> (Option<Vec<u8>>, Option<Vec<u8>>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 697 |     fn is_h264_keyframe(payload: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_rtp_stale_in_gop` is never used
[INFO] [stdout]   --> src/server/webrtc/h264_util.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn is_rtp_stale_in_gop(curr: u64, prev: u64) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `h264_payload_type_from_sdp` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h264.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn h264_payload_type_from_sdp(sdp: &str) -> Option<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_video_media_description` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h264.rs:54:4
[INFO] [stdout]    |
[INFO] [stdout] 54 | fn find_video_media_description(sdp: &SessionDescription) -> Option<&MediaDescription> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `h265_payload_type_from_sdp` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h265.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn h265_payload_type_from_sdp(sdp: &str) -> Option<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_video_media_description` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h265.rs:40:4
[INFO] [stdout]    |
[INFO] [stdout] 40 | fn find_video_media_description(sdp: &SessionDescription) -> Option<&MediaDescription> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Lagged` is never constructed
[INFO] [stdout]    --> src/server/webrtc/player.rs:785:5
[INFO] [stdout]     |
[INFO] [stdout] 783 | enum RecvCoalesced {
[INFO] [stdout]     |      ------------- variant in this enum
[INFO] [stdout] 784 |     Frame(MediaFrame, u64),
[INFO] [stdout] 785 |     Lagged(u64),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:189:25
[INFO] [stdout]     |
[INFO] [stdout] 189 | /                         Self::send_rtmp_message(
[INFO] [stdout] 190 | |                             &mut writer,
[INFO] [stdout] 191 | |                             0x08,
[INFO] [stdout] 192 | |                             msg_stream_id,
[INFO] [stdout] ...   |
[INFO] [stdout] 198 | |                         .await;
[INFO] [stdout]     | |______________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 189 |                         let _ = Self::send_rtmp_message(
[INFO] [stdout]     |                         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_segments`
[INFO] [stdout]    --> src/server/hls/m3u8.rs:199:41
[INFO] [stdout]     |
[INFO] [stdout] 199 |     pub fn slot_filename(sequence: u64, max_segments: usize) -> String {
[INFO] [stdout]     |                                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_segments`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `playlist_body` is never read
[INFO] [stdout]    --> src/server/hls/puller.rs:314:9
[INFO] [stdout]     |
[INFO] [stdout] 314 |         playlist_body = body.clone();
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> tests/transcode_tests.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]    --> tests/common/process_manager.rs:393:5
[INFO] [stdout]     |
[INFO] [stdout] 393 |     HTTP_FLV,
[INFO] [stdout]     |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::TestCodec`
[INFO] [stdout]  --> tests/common/rtmp_helper.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::TestCodec;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]    --> tests/common/process_manager.rs:393:5
[INFO] [stdout]     |
[INFO] [stdout] 393 |     HTTP_FLV,
[INFO] [stdout]     |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::TestCodec`
[INFO] [stdout]  --> tests/common/rtmp_helper.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::TestCodec;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Track`
[INFO] [stdout]   --> tests/manager_tests.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |         Track,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RtspTestHelper` and `rtmp_helper::RtmpTestHelper`
[INFO] [stdout]   --> tests/manager_tests.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 33 |         rtmp_helper::RtmpTestHelper,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 34 |         rtsp_helper::{create_rtsp_announce_sdp, RtspTestHelper},
[INFO] [stdout]    |                                                 ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]    --> tests/common/process_manager.rs:393:5
[INFO] [stdout]     |
[INFO] [stdout] 393 |     HTTP_FLV,
[INFO] [stdout]     |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::TestCodec`
[INFO] [stdout]  --> tests/common/rtmp_helper.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::TestCodec;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType`, `DispatchPolicy`, `MediaFrame`, `StreamManager`, `StreamProtocol`, `StreamSourceMode`, and `Track`
[INFO] [stdout]   --> tests/play_tests.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |         CodecType, DispatchPolicy, MediaFrame, StreamManager, StreamProtocol, StreamSourceMode,
[INFO] [stdout]    |         ^^^^^^^^^  ^^^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |         Track,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RtspTestHelper`, `TestConfig`, `cleanup_test_streams`, `create_rtsp_announce_sdp`, `generate_h264_idr_frame`, `generate_h264_sps_pps`, `generate_h265_idr_frame`, `generate_h265_vps_sps_pps`, `hls_helper::HlsTestHelper`, `http_flv_helper::HttpFlvTestHelper`, `publish_and_decode_check`, `rtmp_helper::RtmpTestHelper`, and `setup_test_stream`
[INFO] [stdout]   --> tests/play_tests.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |             generate_h264_idr_frame, generate_h264_sps_pps, generate_h265_idr_frame,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 29 |             generate_h265_vps_sps_pps,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 30 |         },
[INFO] [stdout] 31 |         hls_helper::HlsTestHelper,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |         http_flv_helper::HttpFlvTestHelper,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |             publish_and_decode_check, publish_and_hls_playback, publish_and_playback,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |         rtmp_helper::RtmpTestHelper,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 46 |         rtsp_helper::{create_rtsp_announce_sdp, RtspTestHelper},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 47 |         stream_helper::{cleanup_test_streams, setup_test_stream},
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 48 |         verify::verify_stream_server_side,
[INFO] [stdout] 49 |         TestCodec, TestConfig,
[INFO] [stdout]    |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/common/verify.rs:229:9
[INFO] [stdout]     |
[INFO] [stdout] 229 |     let mut child = Command::new("ffmpeg")
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/http_flv/puller.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let mut best_bandwidth = u64::MAX;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `best_bandwidth`
[INFO] [stdout]   --> src/server/http_flv/puller.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let mut best_bandwidth = u64::MAX;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_best_bandwidth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `current_bandwidth` is assigned to, but never used
[INFO] [stdout]   --> src/server/http_flv/puller.rs:33:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let mut current_bandwidth = 0u64;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: consider using `_current_bandwidth` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_bandwidth` is never read
[INFO] [stdout]   --> src/server/http_flv/puller.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |                         current_bandwidth = bw_str.parse().unwrap_or(0);
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_audio`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:310:9
[INFO] [stdout]     |
[INFO] [stdout] 310 |     let has_audio = es_map.contains_key(&all_audio_pid.unwrap_or(0xFFFF));
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_audio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `pps_found` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:329:13
[INFO] [stdout]     |
[INFO] [stdout] 329 |         let mut pps_found = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_pps_found` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_bytes`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:377:25
[INFO] [stdout]     |
[INFO] [stdout] 377 |                     let pps_bytes = nal_unit[4..].to_vec();
[INFO] [stdout]     |                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_bytes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `pps_found` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:368:21
[INFO] [stdout]     |
[INFO] [stdout] 368 |                     pps_found = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 379 |                     pps_found = true;
[INFO] [stdout]     |                     ---------------- `pps_found` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `pps_found` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:379:21
[INFO] [stdout]     |
[INFO] [stdout] 379 |                     pps_found = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `sps_sent` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:516:9
[INFO] [stdout]     |
[INFO] [stdout] 516 |     let mut sps_sent = false;
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_sps_sent` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_sent`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:517:9
[INFO] [stdout]     |
[INFO] [stdout] 517 |     let mut pps_sent = false;
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_sent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prev_tag_size`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:521:9
[INFO] [stdout]     |
[INFO] [stdout] 521 |     let mut prev_tag_size: u32 = 0;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_prev_tag_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `current_tag_offset` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:522:9
[INFO] [stdout]     |
[INFO] [stdout] 522 |     let mut current_tag_offset = 0usize;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_current_tag_offset` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sps_sent` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:606:45
[INFO] [stdout]     |
[INFO] [stdout] 606 | ...                   sps_sent = true;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 661 | ...                       sps_sent = true;
[INFO] [stdout]     |                           --------------- `sps_sent` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sps_sent` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:661:49
[INFO] [stdout]     |
[INFO] [stdout] 661 | ...                   sps_sent = true;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_tag_offset` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:557:13
[INFO] [stdout]     |
[INFO] [stdout] 557 |             current_tag_offset = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/common/verify.rs:229:9
[INFO] [stdout]     |
[INFO] [stdout] 229 |     let mut child = Command::new("ffmpeg")
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_video`
[INFO] [stdout]    --> src/server/http_flv/mod.rs:150:43
[INFO] [stdout]     |
[INFO] [stdout] 150 | fn generate_metadata_tag(stream_id: &str, has_video: bool, has_audio: bool) -> Vec<u8> {
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_video`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_audio`
[INFO] [stdout]    --> src/server/http_flv/mod.rs:150:60
[INFO] [stdout]     |
[INFO] [stdout] 150 | fn generate_metadata_tag(stream_id: &str, has_video: bool, has_audio: bool) -> Vec<u8> {
[INFO] [stdout]     |                                                            ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_audio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/common/verify.rs:229:9
[INFO] [stdout]     |
[INFO] [stdout] 229 |     let mut child = Command::new("ffmpeg")
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> tests/common/process_manager.rs:670:12
[INFO] [stdout]     |
[INFO] [stdout] 670 |         Ok(s) => {
[INFO] [stdout]     |            ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:62:54
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub fn create_rtmp_publish_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |                                                      ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:67:51
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub fn create_rtmp_play_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |                                                   ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream`
[INFO] [stdout]   --> tests/common/stream_helper.rs:57:17
[INFO] [stdout]    |
[INFO] [stdout] 57 |     if let Some(stream) = manager.get_stream(&stream_id.to_string()) {
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> tests/common/process_manager.rs:670:12
[INFO] [stdout]     |
[INFO] [stdout] 670 |         Ok(s) => {
[INFO] [stdout]     |            ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:62:54
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub fn create_rtmp_publish_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |                                                      ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:67:51
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub fn create_rtmp_play_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |                                                   ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream`
[INFO] [stdout]   --> tests/common/stream_helper.rs:57:17
[INFO] [stdout]    |
[INFO] [stdout] 57 |     if let Some(stream) = manager.get_stream(&stream_id.to_string()) {
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `server_stream_id` is never read
[INFO] [stdout]    --> src/server/rtmp/puller.rs:114:41
[INFO] [stdout]     |
[INFO] [stdout] 114 |           let mut server_stream_id: u32 = 1;
[INFO] [stdout]     |                                           ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 140 | /         server_stream_id = wait_for_create_stream(
[INFO] [stdout] 141 | |             &mut read_half,
[INFO] [stdout] 142 | |             &mut buf,
[INFO] [stdout] 143 | |             &mut chunk_states,
[INFO] [stdout] ...   |
[INFO] [stdout] 148 | |         .await? as u32;
[INFO] [stdout]     | |______________________- `server_stream_id` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `last_body` is never read
[INFO] [stdout]    --> tests/transcode_tests.rs:536:29
[INFO] [stdout]     |
[INFO] [stdout] 536 |         let mut last_body = String::new();
[INFO] [stdout]     |                             ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 539 |             last_body = resp.body.clone();
[INFO] [stdout]     |             --------- `last_body` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestConfig` is never constructed
[INFO] [stdout]   --> tests/common/mod.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct TestConfig {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `with_duration` are never used
[INFO] [stdout]   --> tests/common/mod.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl TestConfig {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 28 |     pub fn new(stream_id: &str, codec: TestCodec) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn with_duration(mut self, duration: u64) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str` and `payload_type` are never used
[INFO] [stdout]   --> tests/common/mod.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl TestCodec {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] 50 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn payload_type(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `video_bitrate` and `audio_bitrate` are never read
[INFO] [stdout]   --> tests/common/ffmpeg_helper.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct FfmpegTestConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub video_bitrate: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Audio bitrate in kbps.
[INFO] [stdout] 21 |     pub audio_bitrate: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FfmpegTestConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `pixel_format` is never used
[INFO] [stdout]   --> tests/common/ffmpeg_helper.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl FfmpegTestConfig {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn pixel_format(&self, codec: TestCodec) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_simple_rtmp_publish_command` is never used
[INFO] [stdout]    --> tests/common/ffmpeg_helper.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn create_simple_rtmp_publish_command(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_hls_play_command` is never used
[INFO] [stdout]    --> tests/common/ffmpeg_helper.rs:263:8
[INFO] [stdout]     |
[INFO] [stdout] 263 | pub fn create_hls_play_command(m3u8_url: &str, duration_secs: u32) -> Vec<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_h265_vps_sps_pps` is never used
[INFO] [stdout]   --> tests/common/frame_generators.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn generate_h265_vps_sps_pps() -> Bytes {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_h265_p_frame` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:126:8
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub fn generate_h265_p_frame(frame_num: u32) -> Bytes {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_aac_frame` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:145:8
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub fn generate_aac_frame(frame_num: u32) -> Bytes {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `h264_nal_type` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:191:8
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub fn h264_nal_type(data: &[u8]) -> Option<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `output_dir` is never read
[INFO] [stdout]   --> tests/common/hls_helper.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct HlsTestHelper {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 10 |     stream_id: String,
[INFO] [stdout] 11 |     output_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HlsTestHelper` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> tests/common/hls_helper.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl HlsTestHelper {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn output_dir(&self) -> &PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn master_playlist_url(&self, host: &str, port: u16) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn playlist_url(&self, host: &str, port: u16, variant: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn segment_url(&self, host: &str, port: u16, variant: &str, segment: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn master_playlist_path(&self) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn playlist_path(&self, variant: &str) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn segment_path(&self, variant: &str, segment: &str) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_playable` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:140:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl M3u8Info {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn is_playable(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_SEGMENT_DURATION` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:158:11
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub const DEFAULT_SEGMENT_DURATION: u32 = 2;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_MAX_SEGMENTS` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:161:11
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub const DEFAULT_MAX_SEGMENTS: usize = 10;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_media_playlist` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:181:8
[INFO] [stdout]     |
[INFO] [stdout] 181 | pub fn generate_media_playlist(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_http_ok` is never used
[INFO] [stdout]   --> tests/common/http_client.rs:88:14
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub async fn wait_for_http_ok(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `port`, `get_request`, and `get_request_with_params` are never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl HttpFlvTestHelper {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn port(&self) -> u16 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn get_request(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn get_request_with_params(&self, params: &[(&str, &str)]) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_success_response` is never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub fn is_success_response(response: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_content_type` is never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn parse_content_type(response: &str) -> Option<&str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_flv_tag_header` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:162:8
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub fn parse_flv_tag_header(data: &[u8]) -> Option<(u8, usize)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub const AUDIO: u8 = 0x08;
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:128:15
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub const VIDEO: u8 = 0x09;
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCRIPT` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:131:15
[INFO] [stdout]     |
[INFO] [stdout] 131 |     pub const SCRIPT: u8 = 0x12;
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INTER_FRAME` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:139:19
[INFO] [stdout]     |
[INFO] [stdout] 139 |         pub const INTER_FRAME: u8 = 0x27;
[INFO] [stdout]     |                   ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INFO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:142:19
[INFO] [stdout]     |
[INFO] [stdout] 142 |         pub const INFO: u8 = 0x20;
[INFO] [stdout]     |                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AAC` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:148:19
[INFO] [stdout]     |
[INFO] [stdout] 148 |         pub const AAC: u8 = 0xA0;
[INFO] [stdout]     |                   ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MP3` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:151:19
[INFO] [stdout]     |
[INFO] [stdout] 151 |         pub const MP3: u8 = 0x80;
[INFO] [stdout]     |                   ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> tests/common/media_server_runner.rs:69:12
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl MediaServer {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  68 |     /// Start the media server on default ports (requires ports to be free).
[INFO] [stdout]  69 |     pub fn start() -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn start_isolated_for_stream(stream_id: &str) -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn start_with_ports(ports: ServerPorts) -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn rtsp_url(&self, stream_id: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn http_flv_url(&self, stream_id: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn hls_url(&self, stream_id: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub async fn api_rtmp_pull(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub async fn api_rtsp_pull(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn trigger_hls(&self, stream_id: &str) -> Result<(), String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessManager` is never constructed
[INFO] [stdout]   --> tests/common/process_manager.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct ProcessManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> tests/common/process_manager.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | impl ProcessManager {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 40 |     /// Create a new process manager.
[INFO] [stdout] 41 |     pub fn new(stream_manager: Arc<StreamManager>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn spawn_ffmpeg_publish(&self, args: &[String]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn spawn_ffplay(&self, args: &[String]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn is_stream_active(&self, stream_id: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub async fn wait_for_stream_active(&self, stream_id: &str, timeout_secs: u64) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn get_stream_stats(&self, stream_id: &str) -> Option<StreamStats> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn cleanup(&self) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spawn_ffmpeg_for_stream` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:119:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub fn spawn_ffmpeg_for_stream(stream_id: &str, args: &[String]) -> std::io::Result<Child> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamStats` is never constructed
[INFO] [stdout]    --> tests/common/process_manager.rs:171:12
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub struct StreamStats {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `H265` is never constructed
[INFO] [stdout]    --> tests/common/process_manager.rs:196:5
[INFO] [stdout]     |
[INFO] [stdout] 194 | pub enum PublishCodec {
[INFO] [stdout]     |          ------------ variant in this enum
[INFO] [stdout] 195 |     H264,
[INFO] [stdout] 196 |     H265,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PublishCodec` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `rtsp`, `continuous`, `rtmp_enhanced_hevc`, `rtsp_transport_tcp`, and `rtsp_transport_udp` are never used
[INFO] [stdout]    --> tests/common/process_manager.rs:225:12
[INFO] [stdout]     |
[INFO] [stdout] 215 | impl PublishConfig {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn rtsp(host: &str, port: u16, stream_id: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub fn continuous(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn rtmp_enhanced_hevc(mut self, enabled: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 271 |     pub fn rtsp_transport_tcp(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 277 |     pub fn rtsp_transport_udp(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Tcp` and `Udp` are never constructed
[INFO] [stdout]    --> tests/common/process_manager.rs:385:5
[INFO] [stdout]     |
[INFO] [stdout] 384 | pub enum RtspTransport {
[INFO] [stdout]     |          ------------- variants in this enum
[INFO] [stdout] 385 |     Tcp,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 386 |     Udp,
[INFO] [stdout]     |     ^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RtspTransport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `RTSP`, `HTTP_FLV`, and `HLS` are never constructed
[INFO] [stdout]    --> tests/common/process_manager.rs:392:5
[INFO] [stdout]     |
[INFO] [stdout] 390 | pub enum PlayProtocol {
[INFO] [stdout]     |          ------------ variants in this enum
[INFO] [stdout] 391 |     RTMP,
[INFO] [stdout] 392 |     RTSP,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 393 |     HTTP_FLV,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 394 |     HLS,
[INFO] [stdout]     |     ^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PlayProtocol` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `rtsp`, `http_flv`, `hls`, `rtsp_transport_tcp`, and `rtsp_transport_udp` are never used
[INFO] [stdout]    --> tests/common/process_manager.rs:408:12
[INFO] [stdout]     |
[INFO] [stdout] 397 | impl PlayConfig {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 408 |     pub fn rtsp(url: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     pub fn http_flv(url: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 428 |     pub fn hls(url: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn rtsp_transport_tcp(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn rtsp_transport_udp(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_and_hls_playback` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:535:14
[INFO] [stdout]     |
[INFO] [stdout] 535 | pub async fn publish_and_hls_playback(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_api_pull_and_play` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:560:14
[INFO] [stdout]     |
[INFO] [stdout] 560 | pub async fn publish_api_pull_and_play(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_and_playback` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:596:14
[INFO] [stdout]     |
[INFO] [stdout] 596 | pub async fn publish_and_playback(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_with_api_check` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:620:14
[INFO] [stdout]     |
[INFO] [stdout] 620 | pub async fn run_ffmpeg_decode_with_api_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_without_api_check` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:649:14
[INFO] [stdout]     |
[INFO] [stdout] 649 | pub async fn run_ffmpeg_decode_without_api_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_and_decode_check` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:773:14
[INFO] [stdout]     |
[INFO] [stdout] 773 | pub async fn publish_and_decode_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_http_flv_stream` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:817:14
[INFO] [stdout]     |
[INFO] [stdout] 817 | pub async fn verify_http_flv_stream(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_hls_playlist` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:838:14
[INFO] [stdout]     |
[INFO] [stdout] 838 | pub async fn verify_hls_playlist(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_MAGIC` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MARKER_MAGIC: u16 = 0x5A3C;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_BYTES` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:22:7
[INFO] [stdout]    |
[INFO] [stdout] 22 | const MARKER_BYTES: usize = 14;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_BITS` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MARKER_BITS: usize = MARKER_BYTES * 8;
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_COLS` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:24:7
[INFO] [stdout]    |
[INFO] [stdout] 24 | const MARKER_COLS: usize = 16;
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_BLOCK` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:25:7
[INFO] [stdout]    |
[INFO] [stdout] 25 | const MARKER_BLOCK: usize = 10;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_X` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const MARKER_X: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_Y` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:27:7
[INFO] [stdout]    |
[INFO] [stdout] 27 | const MARKER_Y: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RealtimeProbeConfig` is never constructed
[INFO] [stdout]   --> tests/common/realtime_probe.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct RealtimeProbeConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RealtimeStats` is never constructed
[INFO] [stdout]   --> tests/common/realtime_probe.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct RealtimeStats {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TimestampVideoPublisher` is never constructed
[INFO] [stdout]   --> tests/common/realtime_probe.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct TimestampVideoPublisher {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TimestampPublisherConfig` is never constructed
[INFO] [stdout]   --> tests/common/realtime_probe.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct TimestampPublisherConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start` and `stop` are never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout]  84 | impl TimestampVideoPublisher {
[INFO] [stdout]     | ---------------------------- associated items in this implementation
[INFO] [stdout]  85 |     pub fn start(
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `measure_realtime_playback` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:130:14
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub async fn measure_realtime_playback(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `assert_realtime_stats` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn assert_realtime_stats(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FrameMarker` is never constructed
[INFO] [stdout]    --> tests/common/realtime_probe.rs:348:8
[INFO] [stdout]     |
[INFO] [stdout] 348 | struct FrameMarker {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_args` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:353:4
[INFO] [stdout]     |
[INFO] [stdout] 353 | fn publish_args(publisher: &TimestampPublisherConfig, config: &RealtimeProbeConfig) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spawn_frame_writer` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn spawn_frame_writer(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_timestamp_frame` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:474:4
[INFO] [stdout]     |
[INFO] [stdout] 474 | fn generate_timestamp_frame(config: &RealtimeProbeConfig, marker: FrameMarker) -> Vec<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `paint_marker_block` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:500:4
[INFO] [stdout]     |
[INFO] [stdout] 500 | fn paint_marker_block(frame: &mut [u8], width: usize, bit_index: usize, bit: u8) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_marker` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:517:4
[INFO] [stdout]     |
[INFO] [stdout] 517 | fn decode_marker(frame: &[u8], width: usize, height: usize) -> Option<FrameMarker> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `percentile` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:550:4
[INFO] [stdout]     |
[INFO] [stdout] 550 | fn percentile(sorted: &[u64], percentile: usize) -> u64 {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `now_ms` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:562:4
[INFO] [stdout]     |
[INFO] [stdout] 562 | fn now_ms() -> u64 {
[INFO] [stdout]     |    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `app` and `host` are never read
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct RtmpTestHelper {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 11 |     stream_id: String,
[INFO] [stdout] 12 |     app: String,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 13 |     host: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RtmpTestHelper` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `host`, `publish_command`, `play_command`, and `rtmp_url` are never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl RtmpTestHelper {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn host(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn publish_command(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn play_command(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn rtmp_url(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_rtmp_publish_command` is never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:62:8
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub fn create_rtmp_publish_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_rtmp_play_command` is never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub fn create_rtmp_play_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_create_stream_command` is never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn build_rtmp_create_stream_command() -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_release_stream_command` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:105:8
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub fn build_rtmp_release_stream_command(stream_key: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_fcpublish_command` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:120:8
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub fn build_rtmp_fcpublish_command(stream_key: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `chunk_header_size` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:152:8
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub fn chunk_header_size(chunk_stream_id: u8) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_h264_video_header` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn build_rtmp_h264_video_header(is_keyframe: bool, codec_id: u8) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:37:12
[INFO] [stdout]     |
[INFO] [stdout]  16 | impl RtspTestHelper {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  37 |     pub fn options_request(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn describe_request(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn setup_video_request(&self, transport: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn setup_audio_request(&self, transport: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn play_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn pause_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn teardown_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     fn next_cseq(&self) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_rtsp_announce_sdp` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:141:8
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn create_rtsp_announce_sdp(codec: TestCodec) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_cseq` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn parse_cseq(response: &str) -> Option<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTP_AVP_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:247:15
[INFO] [stdout]     |
[INFO] [stdout] 247 |     pub const RTP_AVP_TCP: &str = "RTP/AVP/TCP;interleaved=0-1";
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTP_AVP_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:250:15
[INFO] [stdout]     |
[INFO] [stdout] 250 |     pub const RTP_AVP_UDP: &str = "RTP/AVP;unicast;client_port=5000-5001";
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:253:15
[INFO] [stdout]     |
[INFO] [stdout] 253 |     pub const VIDEO_TCP: &str = "RTP/AVP/TCP;unicast;interleaved=0-1";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:256:15
[INFO] [stdout]     |
[INFO] [stdout] 256 |     pub const AUDIO_TCP: &str = "RTP/AVP/TCP;unicast;interleaved=2-3";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:259:15
[INFO] [stdout]     |
[INFO] [stdout] 259 |     pub const VIDEO_UDP: &str = "RTP/AVP;unicast;client_port=5000-5001;server_port=6000-6001";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:262:15
[INFO] [stdout]     |
[INFO] [stdout] 262 |     pub const AUDIO_UDP: &str = "RTP/AVP;unicast;client_port=5002-5003;server_port=6002-6003";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestRtmpServer` is never constructed
[INFO] [stdout]   --> tests/common/server_helper.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct TestRtmpServer {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `port`, `manager`, and `publish_url` are never used
[INFO] [stdout]   --> tests/common/server_helper.rs:23:18
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl TestRtmpServer {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 23 |     pub async fn start() -> Self {
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn port(&self) -> u16 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn manager(&self) -> Arc<StreamManager> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn publish_url(&self, app: &str, stream_key: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_tcp` is never used
[INFO] [stdout]   --> tests/common/server_helper.rs:59:10
[INFO] [stdout]    |
[INFO] [stdout] 59 | async fn wait_for_tcp(host: &str, port: u16, timeout: Duration) {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_stream` is never used
[INFO] [stdout]  --> tests/common/stream_helper.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub fn setup_test_stream(
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_test_streams` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub fn cleanup_test_streams(manager: &Arc<StreamManager>, stream_ids: &[&str]) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unique_stream_id` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn unique_stream_id(prefix: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_stream_active` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:56:8
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub fn is_stream_active(manager: &Arc<StreamManager>, stream_id: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_stream_active` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:66:14
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub async fn wait_for_stream_active(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_test_port` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn get_test_port() -> u16 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_command` is never used
[INFO] [stdout]   --> tests/common/verify.rs:20:4
[INFO] [stdout]    |
[INFO] [stdout] 20 | fn format_command(program: &str, args: &[String]) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamInfo` is never constructed
[INFO] [stdout]   --> tests/common/verify.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct StreamInfo {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FlvStats` is never constructed
[INFO] [stdout]   --> tests/common/verify.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct FlvStats {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HlsStats` is never constructed
[INFO] [stdout]   --> tests/common/verify.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub struct HlsStats {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HlsSegmentInfo` is never constructed
[INFO] [stdout]   --> tests/common/verify.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct HlsSegmentInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_check` is never used
[INFO] [stdout]    --> tests/common/verify.rs:105:14
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub async fn run_ffmpeg_decode_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_check_for_stream` is never used
[INFO] [stdout]    --> tests/common/verify.rs:123:14
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub async fn run_ffmpeg_decode_check_for_stream(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_check_inner` is never used
[INFO] [stdout]    --> tests/common/verify.rs:142:10
[INFO] [stdout]     |
[INFO] [stdout] 142 | async fn run_ffmpeg_decode_check_inner(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_stream_server_side` is never used
[INFO] [stdout]    --> tests/common/verify.rs:365:14
[INFO] [stdout]     |
[INFO] [stdout] 365 | pub async fn verify_stream_server_side(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `assert_stream_min_frames` is never used
[INFO] [stdout]    --> tests/common/verify.rs:415:14
[INFO] [stdout]     |
[INFO] [stdout] 415 | pub async fn assert_stream_min_frames(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `probe_stream_info` is never used
[INFO] [stdout]    --> tests/common/verify.rs:454:8
[INFO] [stdout]     |
[INFO] [stdout] 454 | pub fn probe_stream_info(url: &str, timeout_secs: u64) -> Result<StreamInfo, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `probe_stream_info_for_stream` is never used
[INFO] [stdout]    --> tests/common/verify.rs:458:8
[INFO] [stdout]     |
[INFO] [stdout] 458 | pub fn probe_stream_info_for_stream(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `probe_stream_info_inner` is never used
[INFO] [stdout]    --> tests/common/verify.rs:466:4
[INFO] [stdout]     |
[INFO] [stdout] 466 | fn probe_stream_info_inner(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_http_flv_stream` is never used
[INFO] [stdout]    --> tests/common/verify.rs:564:14
[INFO] [stdout]     |
[INFO] [stdout] 564 | pub async fn verify_http_flv_stream(url: &str, duration_secs: u64) -> Result<FlvStats, String> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_get_raw` is never used
[INFO] [stdout]    --> tests/common/verify.rs:577:10
[INFO] [stdout]     |
[INFO] [stdout] 577 | async fn http_get_raw(url: &str, max_duration: Duration) -> Result<Vec<u8>, String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_flv_data` is never used
[INFO] [stdout]    --> tests/common/verify.rs:645:4
[INFO] [stdout]     |
[INFO] [stdout] 645 | fn parse_flv_data(data: &[u8], expected_duration_secs: u64) -> Result<FlvStats, String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_hls_playlist` is never used
[INFO] [stdout]    --> tests/common/verify.rs:733:14
[INFO] [stdout]     |
[INFO] [stdout] 733 | pub async fn verify_hls_playlist(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_get_string` is never used
[INFO] [stdout]    --> tests/common/verify.rs:874:10
[INFO] [stdout]     |
[INFO] [stdout] 874 | async fn http_get_string(host: &str, port: u16, path: &str) -> Result<String, String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_get_raw_segment` is never used
[INFO] [stdout]    --> tests/common/verify.rs:888:10
[INFO] [stdout]     |
[INFO] [stdout] 888 | async fn http_get_raw_segment(host: &str, port: u16, path: &str) -> Result<Vec<u8>, String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_stream_all_layers` is never used
[INFO] [stdout]    --> tests/common/verify.rs:940:14
[INFO] [stdout]     |
[INFO] [stdout] 940 | pub async fn verify_stream_all_layers(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VeificationReport` is never constructed
[INFO] [stdout]     --> tests/common/verify.rs:1012:12
[INFO] [stdout]      |
[INFO] [stdout] 1012 | pub struct VeificationReport {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_http_url` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1023:4
[INFO] [stdout]      |
[INFO] [stdout] 1023 | fn parse_http_url(url: &str) -> Result<(String, u16, String), String> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dechunk_body` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1040:4
[INFO] [stdout]      |
[INFO] [stdout] 1040 | fn dechunk_body(data: &[u8]) -> Result<Vec<u8>, String> {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_http_body_start` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1089:4
[INFO] [stdout]      |
[INFO] [stdout] 1089 | fn find_http_body_start(data: &[u8]) -> Option<usize> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_base_url` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1095:4
[INFO] [stdout]      |
[INFO] [stdout] 1095 | fn extract_base_url(m3u8_url: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_m3u8_segments` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1102:4
[INFO] [stdout]      |
[INFO] [stdout] 1102 | fn parse_m3u8_segments(body: &str, _base_url: &str) -> Vec<String> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTMP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:67:15
[INFO] [stdout]    |
[INFO] [stdout] 67 |     pub const RTMP_PORT: u16 = 1935;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTSP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:68:15
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub const RTSP_PORT: u16 = 554;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HTTP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:69:15
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub const HTTP_PORT: u16 = 8081;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WEBRTC_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:70:15
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub const WEBRTC_PORT: u16 = 9080;
[INFO] [stdout]    |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `random_test_port` is never used
[INFO] [stdout]   --> tests/common/mod.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 |     pub fn random_test_port() -> u16 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FRAME_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:87:15
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub const FRAME_WAIT: Duration = Duration::from_millis(100);
[INFO] [stdout]    |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STREAM_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:88:15
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub const STREAM_WAIT: Duration = Duration::from_millis(500);
[INFO] [stdout]    |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CLEANUP_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:90:15
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub const CLEANUP_WAIT: Duration = Duration::from_millis(100);
[INFO] [stdout]    |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_video_keyframe`
[INFO] [stdout]  --> src/core/dispatch.rs:8:44
[INFO] [stdout]   |
[INFO] [stdout] 8 | use super::frame_ring::{is_playable_video, is_video_keyframe, SnapMode};
[INFO] [stdout]   |                                            ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `last_playable_idr_seq`
[INFO] [stdout]  --> src/core/live_play.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::dispatch::{last_playable_idr_seq, DispatchError, DispatchReader};
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OnceLock`
[INFO] [stdout]  --> src/core/metrics.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::sync::{Arc, OnceLock};
[INFO] [stdout]   |                      ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]   --> src/core/protocol.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     HTTP_FLV,
[INFO] [stdout]    |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_API` should have an upper camel case name
[INFO] [stdout]   --> src/core/protocol.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     HTTP_API,
[INFO] [stdout]    |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpApi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]    --> src/core/tester.rs:647:13
[INFO] [stdout]     |
[INFO] [stdout] 647 |         use std::sync::Arc;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `coalesce_flv_batch`
[INFO] [stdout]   --> src/core/mod.rs:15:20
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use dispatch::{coalesce_flv_batch, DispatchError, DispatchPolicy, DispatchReader};
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SnapMode` and `is_playable_video`
[INFO] [stdout]   --> src/core/mod.rs:16:22
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use frame_ring::{is_playable_video, is_video_keyframe, FrameRing, SnapMode};
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^^                                ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `StreamEventReceiver` and `StreamEvent`
[INFO] [stdout]   --> src/core/mod.rs:18:45
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use stream_manager::{PullSessionHandle, StreamEvent, StreamEventReceiver, StreamManager};
[INFO] [stdout]    |                                             ^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AnalysisConfig`, `DEFAULT_HLS_OUTPUT_DIR`, `DEFAULT_RECORD_OUTPUT_DIR`, `DEFAULT_SNAPSHOT_OUTPUT_DIR`, `DEFAULT_STORAGE_BASE_DIR`, `HttpConfig`, `RecordConfig`, `RtmpConfig`, `RtspConfig`, `ServerConfig`, `SnapshotConfig`, `StorageConfig`, and `WebrtcConfig`
[INFO] [stdout]   --> src/core/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     AnalysisConfig, Config, HttpConfig, RecordConfig, RtmpConfig, RtspConfig, ServerConfig,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^          ^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 25 |     SnapshotConfig, StorageConfig, TranscodeConfig, WebrtcConfig, DEFAULT_HLS_DIR,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^                   ^^^^^^^^^^^^
[INFO] [stdout] 26 |     DEFAULT_HLS_OUTPUT_DIR, DEFAULT_RECORD_DIR, DEFAULT_RECORD_OUTPUT_DIR, DEFAULT_SNAPSHOT_DIR,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^                      ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     DEFAULT_SNAPSHOT_OUTPUT_DIR, DEFAULT_STORAGE_BASE_DIR,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `codec` and `duration_secs` are never read
[INFO] [stdout]   --> tests/common/mod.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct TestConfig {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 22 |     pub stream_id: String,
[INFO] [stdout] 23 |     pub codec: TestCodec,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 24 |     pub duration_secs: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_duration` is never used
[INFO] [stdout]   --> tests/common/mod.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl TestConfig {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn with_duration(mut self, duration: u64) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_playable_video_frame`
[INFO] [stdout]   --> src/core/mod.rs:30:19
[INFO] [stdout]    |
[INFO] [stdout] 30 |     is_idr_frame, is_playable_video_frame, prepend_video_config, prime_live_play,
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str` and `payload_type` are never used
[INFO] [stdout]   --> tests/common/mod.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl TestCodec {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] 50 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn payload_type(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `video_bitrate` and `audio_bitrate` are never read
[INFO] [stdout]   --> tests/common/ffmpeg_helper.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct FfmpegTestConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub video_bitrate: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Audio bitrate in kbps.
[INFO] [stdout] 21 |     pub audio_bitrate: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FfmpegTestConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FirstFrameStats`, `PlayerCounts`, `RingStats`, and `StreamMetricsSnapshot`
[INFO] [stdout]   --> src/core/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     FirstFrameStats, HlsMetricsSnapshot, MetricsRegistry, MetricsSnapshot, PlaybackProtocol,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 35 |     PlayerCounts, RingStats, StreamMetricsSnapshot,
[INFO] [stdout]    |     ^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `pixel_format` is never used
[INFO] [stdout]   --> tests/common/ffmpeg_helper.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl FfmpegTestConfig {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn pixel_format(&self, codec: TestCodec) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_simple_rtmp_publish_command` is never used
[INFO] [stdout]    --> tests/common/ffmpeg_helper.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn create_simple_rtmp_publish_command(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ProtocolInfo`, `ProtocolRegistry`, `ProtocolType`, and `StreamSink`
[INFO] [stdout]   --> src/core/mod.rs:37:20
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub use protocol::{ProtocolInfo, ProtocolRegistry, ProtocolType, StreamSink};
[INFO] [stdout]    |                    ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `pusher::*`
[INFO] [stdout]   --> src/core/mod.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub use pusher::*;
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tester::StreamTester`
[INFO] [stdout]   --> src/core/mod.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub use tester::StreamTester;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `flv_timestamp_ms` and `media_timestamp_delta_ms`
[INFO] [stdout]   --> src/core/mod.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     flv_timestamp_ms, media_frame_timestamp_delta_ms, media_timestamp_delta_ms,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^                                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FLV_FRAME_INTER`, `H265_NAL_PPS`, `H265_NAL_SPS`, `H265_NAL_VPS`, `contains_h264_idr`, `extract_h264_sps_pps`, and `is_enhanced_rtmp_video`
[INFO] [stdout]   --> src/core/mod.rs:48:36
[INFO] [stdout]    |
[INFO] [stdout] 48 |     build_rtmp_video_from_annex_b, contains_h264_idr, contains_hevc_idr, ensure_annex_b,
[INFO] [stdout]    |                                    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 49 |     extract_h264_sps_pps, extract_hevc_param_sets, hevc_sprop_from_nals, hvcc_payload_to_annex_b,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 50 |     is_enhanced_rtmp_video, is_keyframe_annex_b, is_parameter_set_only, iter_annex_b_nal_ranges,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     HevcFuReassembler, FLV_FRAME_INTER, FLV_FRAME_KEY, FLV_IS_EX_HEADER, H265_NAL_PPS,
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^                                   ^^^^^^^^^^^^
[INFO] [stdout] 55 |     H265_NAL_SPS, H265_NAL_VPS, HEVC_FOURCC, RTMP_PKT_CODED_FRAMES, RTMP_PKT_CODED_FRAMES_X,
[INFO] [stdout]    |     ^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]    --> src/core/mod.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 |     HTTP_FLV,
[INFO] [stdout]     |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_hls_play_command` is never used
[INFO] [stdout]    --> tests/common/ffmpeg_helper.rs:263:8
[INFO] [stdout]     |
[INFO] [stdout] 263 | pub fn create_hls_play_command(m3u8_url: &str, duration_secs: u32) -> Vec<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_h265_p_frame` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:126:8
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub fn generate_h265_p_frame(frame_num: u32) -> Bytes {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_aac_frame` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:145:8
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub fn generate_aac_frame(frame_num: u32) -> Bytes {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `h264_nal_type` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:191:8
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub fn h264_nal_type(data: &[u8]) -> Option<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `output_dir` is never read
[INFO] [stdout]   --> tests/common/hls_helper.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct HlsTestHelper {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 10 |     stream_id: String,
[INFO] [stdout] 11 |     output_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HlsTestHelper` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]  --> src/server/hls/m3u8.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::{Duration, SystemTime, UNIX_EPOCH};
[INFO] [stdout]   |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> tests/common/hls_helper.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl HlsTestHelper {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn output_dir(&self) -> &PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn master_playlist_url(&self, host: &str, port: u16) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn playlist_url(&self, host: &str, port: u16, variant: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn segment_url(&self, host: &str, port: u16, variant: &str, segment: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn master_playlist_path(&self) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn playlist_path(&self, variant: &str) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn segment_path(&self, variant: &str, segment: &str) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_playable` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:140:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl M3u8Info {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn is_playable(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_SEGMENT_DURATION` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:158:11
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub const DEFAULT_SEGMENT_DURATION: u32 = 2;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_MAX_SEGMENTS` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:161:11
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub const DEFAULT_MAX_SEGMENTS: usize = 10;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_media_playlist` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:181:8
[INFO] [stdout]     |
[INFO] [stdout] 181 | pub fn generate_media_playlist(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HttpResponse` is never constructed
[INFO] [stdout]   --> tests/common/http_client.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct HttpResponse {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_get` is never used
[INFO] [stdout]   --> tests/common/http_client.rs:16:14
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub async fn http_get(host: &str, port: u16, path: &str) -> Result<HttpResponse, String> {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_get_inner` is never used
[INFO] [stdout]   --> tests/common/http_client.rs:22:10
[INFO] [stdout]    |
[INFO] [stdout] 22 | async fn http_get_inner(host: &str, port: u16, path: &str) -> Result<HttpResponse, String> {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_post_json` is never used
[INFO] [stdout]   --> tests/common/http_client.rs:44:14
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub async fn http_post_json(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_post_json_inner` is never used
[INFO] [stdout]   --> tests/common/http_client.rs:58:10
[INFO] [stdout]    |
[INFO] [stdout] 58 | async fn http_post_json_inner(
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_http_ok` is never used
[INFO] [stdout]   --> tests/common/http_client.rs:88:14
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub async fn wait_for_http_ok(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_http_response` is never used
[INFO] [stdout]    --> tests/common/http_client.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn parse_http_response(raw: &[u8]) -> Result<HttpResponse, String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_request` and `get_request_with_params` are never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl HttpFlvTestHelper {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn get_request(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn get_request_with_params(&self, params: &[(&str, &str)]) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_success_response` is never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub fn is_success_response(response: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_content_type` is never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn parse_content_type(response: &str) -> Option<&str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_flv_tag_header` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:162:8
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub fn parse_flv_tag_header(data: &[u8]) -> Option<(u8, usize)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub const AUDIO: u8 = 0x08;
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:128:15
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub const VIDEO: u8 = 0x09;
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCRIPT` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:131:15
[INFO] [stdout]     |
[INFO] [stdout] 131 |     pub const SCRIPT: u8 = 0x12;
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INTER_FRAME` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:139:19
[INFO] [stdout]     |
[INFO] [stdout] 139 |         pub const INTER_FRAME: u8 = 0x27;
[INFO] [stdout]     |                   ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/server/hls/ts_parser.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_keyframe_annex_b`
[INFO] [stdout]   --> src/server/hls/mod.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     is_keyframe_annex_b, prepend_annex_b_config_if_needed, CodecType, DispatchPolicy,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `annex_b_with_config`
[INFO] [stdout]   --> src/server/hls/mod.rs:26:29
[INFO] [stdout]    |
[INFO] [stdout] 26 | use crate::server::webrtc::{annex_b_with_config, request_publisher_keyframe};
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INFO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:142:19
[INFO] [stdout]     |
[INFO] [stdout] 142 |         pub const INFO: u8 = 0x20;
[INFO] [stdout]     |                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AAC` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:148:19
[INFO] [stdout]     |
[INFO] [stdout] 148 |         pub const AAC: u8 = 0xA0;
[INFO] [stdout]     |                   ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MP3` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:151:19
[INFO] [stdout]     |
[INFO] [stdout] 151 |         pub const MP3: u8 = 0x80;
[INFO] [stdout]     |                   ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerPorts` is never constructed
[INFO] [stdout]   --> tests/common/media_server_runner.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ServerPorts {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `available` is never used
[INFO] [stdout]   --> tests/common/media_server_runner.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | impl ServerPorts {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 40 |     /// Ask the OS for currently available listener ports for parallel tests.
[INFO] [stdout] 41 |     pub fn available() -> std::io::Result<Self> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MediaServer` is never constructed
[INFO] [stdout]   --> tests/common/media_server_runner.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct MediaServer {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::io::AsyncReadExt`
[INFO] [stdout]  --> src/server/http_flv/puller.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::io::AsyncReadExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/server/http_flv/puller.rs:8:35
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |                                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> tests/common/media_server_runner.rs:69:12
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl MediaServer {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  68 |     /// Start the media server on default ports (requires ports to be free).
[INFO] [stdout]  69 |     pub fn start() -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  74 |     pub fn start_isolated() -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn start_isolated_for_stream(stream_id: &str) -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn start_with_ports(ports: ServerPorts) -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     fn start_with_ports_inner(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub async fn wait_ready(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn rtmp_url(&self, app: &str, stream_key: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn rtsp_url(&self, stream_id: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn http_flv_url(&self, stream_id: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn hls_url(&self, stream_id: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn http_host(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn http_port(&self) -> u16 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub async fn post_json(&self, path: &str, json_body: &str) -> Result<HttpResponse, String> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub async fn get(&self, path: &str) -> Result<HttpResponse, String> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub async fn api_transcode_start(&self, json_body: &str) -> Result<HttpResponse, String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub async fn api_transcode_stop(&self, json_body: &str) -> Result<HttpResponse, String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub async fn api_rtmp_pull(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub async fn api_rtsp_pull(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn trigger_hls(&self, stream_id: &str) -> Result<(), String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn ports(&self) -> &ServerPorts {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `log_prefix` is never used
[INFO] [stdout]    --> tests/common/media_server_runner.rs:250:4
[INFO] [stdout]     |
[INFO] [stdout] 250 | fn log_prefix(log_label: Option<&str>) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_port` is never used
[INFO] [stdout]    --> tests/common/media_server_runner.rs:256:10
[INFO] [stdout]     |
[INFO] [stdout] 256 | async fn wait_for_port(host: &str, port: u16, deadline: tokio::time::Instant) {
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `bind_available_port` is never used
[INFO] [stdout]    --> tests/common/media_server_runner.rs:268:4
[INFO] [stdout]     |
[INFO] [stdout] 268 | fn bind_available_port() -> std::io::Result<StdTcpListener> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_test_config` is never used
[INFO] [stdout]    --> tests/common/media_server_runner.rs:272:4
[INFO] [stdout]     |
[INFO] [stdout] 272 | fn create_test_config(ports: &ServerPorts) -> std::io::Result<PathBuf> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_server_executable` is never used
[INFO] [stdout]    --> tests/common/media_server_runner.rs:332:4
[INFO] [stdout]     |
[INFO] [stdout] 332 | fn find_server_executable() -> std::io::Result<PathBuf> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_command` is never used
[INFO] [stdout]   --> tests/common/process_manager.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn format_command(program: &str, args: &[String]) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessManager` is never constructed
[INFO] [stdout]   --> tests/common/process_manager.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct ProcessManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> tests/common/process_manager.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | impl ProcessManager {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 40 |     /// Create a new process manager.
[INFO] [stdout] 41 |     pub fn new(stream_manager: Arc<StreamManager>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn spawn_ffmpeg_publish(&self, args: &[String]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn spawn_ffplay(&self, args: &[String]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn is_stream_active(&self, stream_id: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub async fn wait_for_stream_active(&self, stream_id: &str, timeout_secs: u64) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn get_stream_stats(&self, stream_id: &str) -> Option<StreamStats> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn cleanup(&self) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufMut`, `BytesMut`, and `Bytes`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use bytes::{BufMut, Bytes, BytesMut};
[INFO] [stdout]   |             ^^^^^^  ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spawn_ffmpeg` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:114:8
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub fn spawn_ffmpeg(args: &[String]) -> std::io::Result<Child> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spawn_ffmpeg_for_stream` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:119:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub fn spawn_ffmpeg_for_stream(stream_id: &str, args: &[String]) -> std::io::Result<Child> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spawn_ffmpeg_inner` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:123:4
[INFO] [stdout]     |
[INFO] [stdout] 123 | fn spawn_ffmpeg_inner(stream_id: Option<&str>, args: &[String]) -> std::io::Result<Child> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spawn_ffplay` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:141:8
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn spawn_ffplay(args: &[String]) -> std::io::Result<Child> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `stop_child` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:152:8
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub fn stop_child(child: &mut Child) -> std::io::Result<ExitStatus> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamStats` is never constructed
[INFO] [stdout]    --> tests/common/process_manager.rs:171:12
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub struct StreamStats {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PublishConfig` is never constructed
[INFO] [stdout]    --> tests/common/process_manager.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct PublishConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PublishCodec` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:194:10
[INFO] [stdout]     |
[INFO] [stdout] 194 | pub enum PublishCodec {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> tests/common/process_manager.rs:217:12
[INFO] [stdout]     |
[INFO] [stdout] 215 | impl PublishConfig {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 216 |     /// Create RTMP publish config.
[INFO] [stdout] 217 |     pub fn rtmp(host: &str, port: u16, app: &str, stream_key: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn rtsp(host: &str, port: u16, stream_id: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn resolution(mut self, width: u32, height: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn framerate(mut self, fps: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn duration(mut self, secs: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub fn continuous(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn codec(mut self, codec: PublishCodec) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn rtmp_enhanced_hevc(mut self, enabled: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 271 |     pub fn rtsp_transport_tcp(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 277 |     pub fn rtsp_transport_udp(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn ffmpeg_args(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PlayConfig` is never constructed
[INFO] [stdout]    --> tests/common/process_manager.rs:373:12
[INFO] [stdout]     |
[INFO] [stdout] 373 | pub struct PlayConfig {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, `info`, and `warn`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RtspTransport` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:384:10
[INFO] [stdout]     |
[INFO] [stdout] 384 | pub enum RtspTransport {
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PlayProtocol` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:390:10
[INFO] [stdout]     |
[INFO] [stdout] 390 | pub enum PlayProtocol {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> tests/common/process_manager.rs:398:12
[INFO] [stdout]     |
[INFO] [stdout] 397 | impl PlayConfig {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 398 |     pub fn rtmp(url: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 408 |     pub fn rtsp(url: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     pub fn http_flv(url: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 428 |     pub fn hls(url: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 438 |     pub fn duration(mut self, secs: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn enhanced_rtmp_hevc(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn rtsp_transport_tcp(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn rtsp_transport_udp(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn ffplay_args(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `assert_ffmpeg_publishing` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:495:14
[INFO] [stdout]     |
[INFO] [stdout] 495 | pub async fn assert_ffmpeg_publishing(ffmpeg: &mut Child, warm_up: Duration) -> Result<(), String> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffplay_playback` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:504:14
[INFO] [stdout]     |
[INFO] [stdout] 504 | pub async fn run_ffplay_playback(play: &PlayConfig) -> Result<(), String> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufMut`
[INFO] [stdout]  --> src/server/rtmp/chunk.rs:3:18
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::{Buf, BufMut, BytesMut};
[INFO] [stdout]   |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_and_hls_playback` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:535:14
[INFO] [stdout]     |
[INFO] [stdout] 535 | pub async fn publish_and_hls_playback(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info`, `trace`, and `warn`
[INFO] [stdout]  --> src/server/rtmp/chunk.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, error, info, trace, warn};
[INFO] [stdout]   |                             ^^^^  ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_api_pull_and_play` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:560:14
[INFO] [stdout]     |
[INFO] [stdout] 560 | pub async fn publish_api_pull_and_play(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_and_playback` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:596:14
[INFO] [stdout]     |
[INFO] [stdout] 596 | pub async fn publish_and_playback(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_with_api_check` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:620:14
[INFO] [stdout]     |
[INFO] [stdout] 620 | pub async fn run_ffmpeg_decode_with_api_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_without_api_check` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:649:14
[INFO] [stdout]     |
[INFO] [stdout] 649 | pub async fn run_ffmpeg_decode_without_api_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_and_decode_check` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:773:14
[INFO] [stdout]     |
[INFO] [stdout] 773 | pub async fn publish_and_decode_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_http_flv_stream` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:817:14
[INFO] [stdout]     |
[INFO] [stdout] 817 | pub async fn verify_http_flv_stream(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_hls_playlist` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:838:14
[INFO] [stdout]     |
[INFO] [stdout] 838 | pub async fn verify_hls_playlist(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_ffmpeg_available` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:850:8
[INFO] [stdout]     |
[INFO] [stdout] 850 | pub fn is_ffmpeg_available() -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_ffplay_available` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:860:8
[INFO] [stdout]     |
[INFO] [stdout] 860 | pub fn is_ffplay_available() -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_MAGIC` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MARKER_MAGIC: u16 = 0x5A3C;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_BYTES` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:22:7
[INFO] [stdout]    |
[INFO] [stdout] 22 | const MARKER_BYTES: usize = 14;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_BITS` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MARKER_BITS: usize = MARKER_BYTES * 8;
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::BytesMut`
[INFO] [stdout]  --> src/server/rtmp/pusher.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::BytesMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_COLS` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:24:7
[INFO] [stdout]    |
[INFO] [stdout] 24 | const MARKER_COLS: usize = 16;
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_BLOCK` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:25:7
[INFO] [stdout]    |
[INFO] [stdout] 25 | const MARKER_BLOCK: usize = 10;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_X` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const MARKER_X: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MARKER_Y` is never used
[INFO] [stdout]   --> tests/common/realtime_probe.rs:27:7
[INFO] [stdout]    |
[INFO] [stdout] 27 | const MARKER_Y: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RealtimeProbeConfig` is never constructed
[INFO] [stdout]   --> tests/common/realtime_probe.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct RealtimeProbeConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/server/rtmp/pusher.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RealtimeStats` is never constructed
[INFO] [stdout]   --> tests/common/realtime_probe.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct RealtimeStats {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TimestampVideoPublisher` is never constructed
[INFO] [stdout]   --> tests/common/realtime_probe.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct TimestampVideoPublisher {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TimestampPublisherConfig` is never constructed
[INFO] [stdout]   --> tests/common/realtime_probe.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct TimestampPublisherConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start` and `stop` are never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout]  84 | impl TimestampVideoPublisher {
[INFO] [stdout]     | ---------------------------- associated items in this implementation
[INFO] [stdout]  85 |     pub fn start(
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `measure_realtime_playback` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:130:14
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub async fn measure_realtime_playback(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ChunkAssembler`, `ChunkHeader`, and `RtmpMessage`
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:12:26
[INFO] [stdout]    |
[INFO] [stdout] 12 | use super::chunk::{self, ChunkAssembler, ChunkHeader, RtmpMessage};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `assert_realtime_stats` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn assert_realtime_stats(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FrameMarker` is never constructed
[INFO] [stdout]    --> tests/common/realtime_probe.rs:348:8
[INFO] [stdout]     |
[INFO] [stdout] 348 | struct FrameMarker {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtmpUrl`
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:14:37
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::puller::{parse_rtmp_url, RtmpUrl};
[INFO] [stdout]    |                                     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_args` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:353:4
[INFO] [stdout]     |
[INFO] [stdout] 353 | fn publish_args(publisher: &TimestampPublisherConfig, config: &RealtimeProbeConfig) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spawn_frame_writer` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn spawn_frame_writer(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_timestamp_frame` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:474:4
[INFO] [stdout]     |
[INFO] [stdout] 474 | fn generate_timestamp_frame(config: &RealtimeProbeConfig, marker: FrameMarker) -> Vec<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `paint_marker_block` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:500:4
[INFO] [stdout]     |
[INFO] [stdout] 500 | fn paint_marker_block(frame: &mut [u8], width: usize, bit_index: usize, bit: u8) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_marker` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:517:4
[INFO] [stdout]     |
[INFO] [stdout] 517 | fn decode_marker(frame: &[u8], width: usize, height: usize) -> Option<FrameMarker> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `percentile` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:550:4
[INFO] [stdout]     |
[INFO] [stdout] 550 | fn percentile(sorted: &[u64], percentile: usize) -> u64 {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/server/rtmp/session.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `now_ms` is never used
[INFO] [stdout]    --> tests/common/realtime_probe.rs:562:4
[INFO] [stdout]     |
[INFO] [stdout] 562 | fn now_ms() -> u64 {
[INFO] [stdout]     |    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Level`
[INFO] [stdout]  --> src/server/rtmp/session.rs:5:28
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, info, Level};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType`, `StreamProtocol`, and `StreamSourceMode`
[INFO] [stdout]  --> src/server/rtmp/session.rs:8:19
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::core::{CodecType, MediaFrame, StreamProtocol, StreamSourceMode};
[INFO] [stdout]   |                   ^^^^^^^^^              ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::server::webrtc::h264_util::is_keyframe_annex_b`
[INFO] [stdout]  --> src/server/rtmp/session.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::server::webrtc::h264_util::is_keyframe_annex_b;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RtmpConnection` and `RtmpHandshake`
[INFO] [stdout]  --> src/server/rtmp/mod.rs:8:22
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use connection::{RtmpConnection, RtmpHandshake};
[INFO] [stdout]   |                      ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `puller::RtmpPuller`
[INFO] [stdout]  --> src/server/rtmp/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use puller::RtmpPuller;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `pusher::RtmpPusher`
[INFO] [stdout]   --> src/server/rtmp/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use pusher::RtmpPusher;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]   --> src/server/rtmp/mod.rs:16:17
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::BytesMut`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use bytes::BytesMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TcpStream`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stdout]   |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Duration`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:11:30
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::core::{CodecType, MediaFrame, StreamManager, StreamProtocol, StreamSourceMode, Track};
[INFO] [stdout]    |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]  --> src/server/rtsp/client_session.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType` and `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:15:19
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::core::{CodecType, MediaFrame, StreamManager, Track};
[INFO] [stdout]    |                   ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::core::recv_coalesced_play_frame`
[INFO] [stdout]   --> src/server/rtsp/play_egress.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub use crate::core::recv_coalesced_play_frame;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `app` and `host` are never read
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct RtmpTestHelper {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 11 |     stream_id: String,
[INFO] [stdout] 12 |     app: String,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 13 |     host: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RtmpTestHelper` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::net::TcpStream`
[INFO] [stdout]  --> src/server/rtsp/pusher.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::net::TcpStream;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:15:16
[INFO] [stdout]    |
[INFO] [stdout] 15 |     CodecType, MediaFrame, MediaTransport, PusherId, StreamManager, StreamProtocol, StreamPusher,
[INFO] [stdout]    |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `host`, `publish_command`, `play_command`, and `rtmp_url` are never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl RtmpTestHelper {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn host(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn publish_command(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn play_command(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn rtmp_url(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `Sender`, and `channel`
[INFO] [stdout]  --> src/server/rtsp/server_session.rs:7:25
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]   |                         ^^^^^^^  ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_rtmp_play_command` is never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub fn create_rtmp_play_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtspRequest`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:17:25
[INFO] [stdout]    |
[INFO] [stdout] 17 |     InterleavedChannel, RtspRequest, RtspResponse, RtspServer, RtspSessionState, TransportMode,
[INFO] [stdout]    |                         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_create_stream_command` is never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn build_rtmp_create_stream_command() -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_release_stream_command` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:105:8
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub fn build_rtmp_release_stream_command(stream_key: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::core::hevc_sprop_from_nals`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::core::hevc_sprop_from_nals;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_fcpublish_command` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:120:8
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub fn build_rtmp_fcpublish_command(stream_key: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `chunk_header_size` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:152:8
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub fn chunk_header_size(chunk_stream_id: u8) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_h264_video_header` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn build_rtmp_h264_video_header(is_keyframe: bool, codec_id: u8) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SocketReader` and `spawn_write_loop`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:25:39
[INFO] [stdout]    |
[INFO] [stdout] 25 | use crate::server::socket_transport::{spawn_write_loop, ChannelSocketWriter, SocketReader};
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^^^^                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `client_session::RtspClientSession`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub use client_session::RtspClientSession;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `is_udp_transport`, `parse_transport_server_ports`, and `url_prefers_udp`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:26:61
[INFO] [stdout]    |
[INFO] [stdout] 26 |     extract_stream_id, extract_track_id, extract_transport, is_udp_transport,
[INFO] [stdout]    |                                                             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     parse_transport_server_ports, url_prefers_udp, TransportInfo,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:37:12
[INFO] [stdout]     |
[INFO] [stdout]  16 | impl RtspTestHelper {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  37 |     pub fn options_request(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn describe_request(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn setup_video_request(&self, transport: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn setup_audio_request(&self, transport: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn play_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn pause_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn teardown_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     fn next_cseq(&self) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_cseq` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn parse_cseq(response: &str) -> Option<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTP_AVP_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:247:15
[INFO] [stdout]     |
[INFO] [stdout] 247 |     pub const RTP_AVP_TCP: &str = "RTP/AVP/TCP;interleaved=0-1";
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RtpHeader` and `UdpTransport`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:30:18
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub use common::{RtpHeader, RtspCommon, UdpTransport};
[INFO] [stdout]    |                  ^^^^^^^^^              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTP_AVP_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:250:15
[INFO] [stdout]     |
[INFO] [stdout] 250 |     pub const RTP_AVP_UDP: &str = "RTP/AVP;unicast;client_port=5000-5001";
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:253:15
[INFO] [stdout]     |
[INFO] [stdout] 253 |     pub const VIDEO_TCP: &str = "RTP/AVP/TCP;unicast;interleaved=0-1";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/server/socket_transport.rs:5:25
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]   |                         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:256:15
[INFO] [stdout]     |
[INFO] [stdout] 256 |     pub const AUDIO_TCP: &str = "RTP/AVP/TCP;unicast;interleaved=2-3";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:259:15
[INFO] [stdout]     |
[INFO] [stdout] 259 |     pub const VIDEO_UDP: &str = "RTP/AVP;unicast;client_port=5000-5001;server_port=6000-6001";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> src/server/socket_transport.rs:7:29
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{debug, error, info};
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:262:15
[INFO] [stdout]     |
[INFO] [stdout] 262 |     pub const AUDIO_UDP: &str = "RTP/AVP;unicast;client_port=5002-5003;server_port=6002-6003";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestRtmpServer` is never constructed
[INFO] [stdout]   --> tests/common/server_helper.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct TestRtmpServer {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/server/transport/adapters.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `port`, `manager`, and `publish_url` are never used
[INFO] [stdout]   --> tests/common/server_helper.rs:23:18
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl TestRtmpServer {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 23 |     pub async fn start() -> Self {
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn port(&self) -> u16 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn manager(&self) -> Arc<StreamManager> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn publish_url(&self, app: &str, stream_key: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_tcp` is never used
[INFO] [stdout]   --> tests/common/server_helper.rs:59:10
[INFO] [stdout]    |
[INFO] [stdout] 59 | async fn wait_for_tcp(host: &str, port: u16, timeout: Duration) {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unique_stream_id` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn unique_stream_id(prefix: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_stream_active` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:56:8
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub fn is_stream_active(manager: &Arc<StreamManager>, stream_id: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_stream_active` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:66:14
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub async fn wait_for_stream_active(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_test_port` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn get_test_port() -> u16 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_command` is never used
[INFO] [stdout]   --> tests/common/verify.rs:20:4
[INFO] [stdout]    |
[INFO] [stdout] 20 | fn format_command(program: &str, args: &[String]) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamInfo` is never constructed
[INFO] [stdout]   --> tests/common/verify.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct StreamInfo {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FlvStats` is never constructed
[INFO] [stdout]   --> tests/common/verify.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct FlvStats {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HlsStats` is never constructed
[INFO] [stdout]   --> tests/common/verify.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub struct HlsStats {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HlsSegmentInfo` is never constructed
[INFO] [stdout]   --> tests/common/verify.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct HlsSegmentInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_check` is never used
[INFO] [stdout]    --> tests/common/verify.rs:105:14
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub async fn run_ffmpeg_decode_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_check_for_stream` is never used
[INFO] [stdout]    --> tests/common/verify.rs:123:14
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub async fn run_ffmpeg_decode_check_for_stream(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_check_inner` is never used
[INFO] [stdout]    --> tests/common/verify.rs:142:10
[INFO] [stdout]     |
[INFO] [stdout] 142 | async fn run_ffmpeg_decode_check_inner(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_stream_server_side` is never used
[INFO] [stdout]    --> tests/common/verify.rs:365:14
[INFO] [stdout]     |
[INFO] [stdout] 365 | pub async fn verify_stream_server_side(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `assert_stream_min_frames` is never used
[INFO] [stdout]    --> tests/common/verify.rs:415:14
[INFO] [stdout]     |
[INFO] [stdout] 415 | pub async fn assert_stream_min_frames(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `probe_stream_info` is never used
[INFO] [stdout]    --> tests/common/verify.rs:454:8
[INFO] [stdout]     |
[INFO] [stdout] 454 | pub fn probe_stream_info(url: &str, timeout_secs: u64) -> Result<StreamInfo, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `probe_stream_info_for_stream` is never used
[INFO] [stdout]    --> tests/common/verify.rs:458:8
[INFO] [stdout]     |
[INFO] [stdout] 458 | pub fn probe_stream_info_for_stream(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `probe_stream_info_inner` is never used
[INFO] [stdout]    --> tests/common/verify.rs:466:4
[INFO] [stdout]     |
[INFO] [stdout] 466 | fn probe_stream_info_inner(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_http_flv_stream` is never used
[INFO] [stdout]    --> tests/common/verify.rs:564:14
[INFO] [stdout]     |
[INFO] [stdout] 564 | pub async fn verify_http_flv_stream(url: &str, duration_secs: u64) -> Result<FlvStats, String> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_get_raw` is never used
[INFO] [stdout]    --> tests/common/verify.rs:577:10
[INFO] [stdout]     |
[INFO] [stdout] 577 | async fn http_get_raw(url: &str, max_duration: Duration) -> Result<Vec<u8>, String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_flv_data` is never used
[INFO] [stdout]    --> tests/common/verify.rs:645:4
[INFO] [stdout]     |
[INFO] [stdout] 645 | fn parse_flv_data(data: &[u8], expected_duration_secs: u64) -> Result<FlvStats, String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_hls_playlist` is never used
[INFO] [stdout]    --> tests/common/verify.rs:733:14
[INFO] [stdout]     |
[INFO] [stdout] 733 | pub async fn verify_hls_playlist(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_get_string` is never used
[INFO] [stdout]    --> tests/common/verify.rs:874:10
[INFO] [stdout]     |
[INFO] [stdout] 874 | async fn http_get_string(host: &str, port: u16, path: &str) -> Result<String, String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `http_get_raw_segment` is never used
[INFO] [stdout]    --> tests/common/verify.rs:888:10
[INFO] [stdout]     |
[INFO] [stdout] 888 | async fn http_get_raw_segment(host: &str, port: u16, path: &str) -> Result<Vec<u8>, String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_stream_all_layers` is never used
[INFO] [stdout]    --> tests/common/verify.rs:940:14
[INFO] [stdout]     |
[INFO] [stdout] 940 | pub async fn verify_stream_all_layers(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VeificationReport` is never constructed
[INFO] [stdout]     --> tests/common/verify.rs:1012:12
[INFO] [stdout]      |
[INFO] [stdout] 1012 | pub struct VeificationReport {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_http_url` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1023:4
[INFO] [stdout]      |
[INFO] [stdout] 1023 | fn parse_http_url(url: &str) -> Result<(String, u16, String), String> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dechunk_body` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1040:4
[INFO] [stdout]      |
[INFO] [stdout] 1040 | fn dechunk_body(data: &[u8]) -> Result<Vec<u8>, String> {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_http_body_start` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1089:4
[INFO] [stdout]      |
[INFO] [stdout] 1089 | fn find_http_body_start(data: &[u8]) -> Option<usize> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_base_url` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1095:4
[INFO] [stdout]      |
[INFO] [stdout] 1095 | fn extract_base_url(m3u8_url: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_m3u8_segments` is never used
[INFO] [stdout]     --> tests/common/verify.rs:1102:4
[INFO] [stdout]      |
[INFO] [stdout] 1102 | fn parse_m3u8_segments(body: &str, _base_url: &str) -> Vec<String> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTMP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:67:15
[INFO] [stdout]    |
[INFO] [stdout] 67 |     pub const RTMP_PORT: u16 = 1935;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTSP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:68:15
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub const RTSP_PORT: u16 = 554;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HTTP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:69:15
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub const HTTP_PORT: u16 = 8081;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WEBRTC_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:70:15
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub const WEBRTC_PORT: u16 = 9080;
[INFO] [stdout]    |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `random_test_port` is never used
[INFO] [stdout]   --> tests/common/mod.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 |     pub fn random_test_port() -> u16 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FRAME_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:87:15
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub const FRAME_WAIT: Duration = Duration::from_millis(100);
[INFO] [stdout]    |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STREAM_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:88:15
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub const STREAM_WAIT: Duration = Duration::from_millis(500);
[INFO] [stdout]    |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SERVER_START` is never used
[INFO] [stdout]   --> tests/common/mod.rs:89:15
[INFO] [stdout]    |
[INFO] [stdout] 89 |     pub const SERVER_START: Duration = Duration::from_secs(5);
[INFO] [stdout]    |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CLEANUP_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:90:15
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub const CLEANUP_WAIT: Duration = Duration::from_millis(100);
[INFO] [stdout]    |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/server/transport/adapters.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `StreamManager` and `TransportStatus`
[INFO] [stdout]  --> src/server/transport/adapters.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 |     MediaTransport, StreamManager, StreamProtocol, StreamPuller, TransportConfig, TransportStatus,
[INFO] [stdout]   |                     ^^^^^^^^^^^^^                                                 ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `webrtc::track::track_local::TrackLocalWriter`
[INFO] [stdout]  --> src/server/webrtc/outbound_h264.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use webrtc::track::track_local::TrackLocalWriter;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `contains_idr_nalu`
[INFO] [stdout]   --> src/server/webrtc/player.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     contains_idr_nalu, contains_sps_or_pps_nalu, describe_annex_b, duration_from_rtp_timestamps,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> tests/common/process_manager.rs:670:12
[INFO] [stdout]     |
[INFO] [stdout] 670 |         Ok(s) => {
[INFO] [stdout]     |            ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:62:54
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub fn create_rtmp_publish_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |                                                      ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:67:51
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub fn create_rtmp_play_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |                                                   ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream`
[INFO] [stdout]   --> tests/common/stream_helper.rs:57:17
[INFO] [stdout]    |
[INFO] [stdout] 57 |     if let Some(stream) = manager.get_stream(&stream_id.to_string()) {
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `last_error` is never read
[INFO] [stdout]     --> tests/play_tests.rs:1085:34
[INFO] [stdout]      |
[INFO] [stdout] 1085 |             let mut last_error = "no readiness check result".to_string();
[INFO] [stdout]      |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 1090 |                     Err(e) => last_error = e,
[INFO] [stdout]      |                               ---------- `last_error` is overwritten here before the previous value is read
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `server_stream_id` is never read
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:478:41
[INFO] [stdout]     |
[INFO] [stdout] 478 |         let mut server_stream_id: u32 = 1;
[INFO] [stdout]     |                                         ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 492 |         server_stream_id = wait_for_create_stream(&mut conn, tx_id).await? as u32;
[INFO] [stdout]     |         ------------------------------------------------------------------------- `server_stream_id` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestConfig` is never constructed
[INFO] [stdout]   --> tests/common/mod.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct TestConfig {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `with_duration` are never used
[INFO] [stdout]   --> tests/common/mod.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl TestConfig {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 28 |     pub fn new(stream_id: &str, codec: TestCodec) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn with_duration(mut self, duration: u64) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str` and `payload_type` are never used
[INFO] [stdout]   --> tests/common/mod.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl TestCodec {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] 50 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn payload_type(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `video_bitrate` and `audio_bitrate` are never read
[INFO] [stdout]   --> tests/common/ffmpeg_helper.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct FfmpegTestConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub video_bitrate: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Audio bitrate in kbps.
[INFO] [stdout] 21 |     pub audio_bitrate: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FfmpegTestConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `pixel_format` is never used
[INFO] [stdout]   --> tests/common/ffmpeg_helper.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl FfmpegTestConfig {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn pixel_format(&self, codec: TestCodec) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_hls_play_command` is never used
[INFO] [stdout]    --> tests/common/ffmpeg_helper.rs:263:8
[INFO] [stdout]     |
[INFO] [stdout] 263 | pub fn create_hls_play_command(m3u8_url: &str, duration_secs: u32) -> Vec<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_h265_vps_sps_pps` is never used
[INFO] [stdout]   --> tests/common/frame_generators.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn generate_h265_vps_sps_pps() -> Bytes {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_h265_p_frame` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:126:8
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub fn generate_h265_p_frame(frame_num: u32) -> Bytes {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_aac_frame` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:145:8
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub fn generate_aac_frame(frame_num: u32) -> Bytes {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `h264_nal_type` is never used
[INFO] [stdout]    --> tests/common/frame_generators.rs:191:8
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub fn h264_nal_type(data: &[u8]) -> Option<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `output_dir` is never read
[INFO] [stdout]   --> tests/common/hls_helper.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct HlsTestHelper {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 10 |     stream_id: String,
[INFO] [stdout] 11 |     output_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HlsTestHelper` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> tests/common/hls_helper.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl HlsTestHelper {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn output_dir(&self) -> &PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn master_playlist_url(&self, host: &str, port: u16) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn playlist_url(&self, host: &str, port: u16, variant: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn segment_url(&self, host: &str, port: u16, variant: &str, segment: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn master_playlist_path(&self) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn playlist_path(&self, variant: &str) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn segment_path(&self, variant: &str, segment: &str) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_playable` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:140:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl M3u8Info {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn is_playable(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_SEGMENT_DURATION` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:158:11
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub const DEFAULT_SEGMENT_DURATION: u32 = 2;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_MAX_SEGMENTS` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:161:11
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub const DEFAULT_MAX_SEGMENTS: usize = 10;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_media_playlist` is never used
[INFO] [stdout]    --> tests/common/hls_helper.rs:181:8
[INFO] [stdout]     |
[INFO] [stdout] 181 | pub fn generate_media_playlist(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_http_ok` is never used
[INFO] [stdout]   --> tests/common/http_client.rs:88:14
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub async fn wait_for_http_ok(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `port`, `get_request`, and `get_request_with_params` are never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl HttpFlvTestHelper {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn port(&self) -> u16 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn get_request(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn get_request_with_params(&self, params: &[(&str, &str)]) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_success_response` is never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub fn is_success_response(response: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_content_type` is never used
[INFO] [stdout]   --> tests/common/http_flv_helper.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn parse_content_type(response: &str) -> Option<&str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_flv_tag_header` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:162:8
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub fn parse_flv_tag_header(data: &[u8]) -> Option<(u8, usize)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub const AUDIO: u8 = 0x08;
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:128:15
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub const VIDEO: u8 = 0x09;
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCRIPT` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:131:15
[INFO] [stdout]     |
[INFO] [stdout] 131 |     pub const SCRIPT: u8 = 0x12;
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INTER_FRAME` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:139:19
[INFO] [stdout]     |
[INFO] [stdout] 139 |         pub const INTER_FRAME: u8 = 0x27;
[INFO] [stdout]     |                   ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INFO` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:142:19
[INFO] [stdout]     |
[INFO] [stdout] 142 |         pub const INFO: u8 = 0x20;
[INFO] [stdout]     |                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AAC` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:148:19
[INFO] [stdout]     |
[INFO] [stdout] 148 |         pub const AAC: u8 = 0xA0;
[INFO] [stdout]     |                   ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MP3` is never used
[INFO] [stdout]    --> tests/common/http_flv_helper.rs:151:19
[INFO] [stdout]     |
[INFO] [stdout] 151 |         pub const MP3: u8 = 0x80;
[INFO] [stdout]     |                   ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `start_with_ports`, `api_transcode_start`, and `api_transcode_stop` are never used
[INFO] [stdout]    --> tests/common/media_server_runner.rs:69:12
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl MediaServer {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  68 |     /// Start the media server on default ports (requires ports to be free).
[INFO] [stdout]  69 |     pub fn start() -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn start_with_ports(ports: ServerPorts) -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub async fn api_transcode_start(&self, json_body: &str) -> Result<HttpResponse, String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub async fn api_transcode_stop(&self, json_body: &str) -> Result<HttpResponse, String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessManager` is never constructed
[INFO] [stdout]   --> tests/common/process_manager.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct ProcessManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> tests/common/process_manager.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | impl ProcessManager {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 40 |     /// Create a new process manager.
[INFO] [stdout] 41 |     pub fn new(stream_manager: Arc<StreamManager>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn spawn_ffmpeg_publish(&self, args: &[String]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn spawn_ffplay(&self, args: &[String]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn is_stream_active(&self, stream_id: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub async fn wait_for_stream_active(&self, stream_id: &str, timeout_secs: u64) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn get_stream_stats(&self, stream_id: &str) -> Option<StreamStats> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn cleanup(&self) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamStats` is never constructed
[INFO] [stdout]    --> tests/common/process_manager.rs:171:12
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub struct StreamStats {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_with_api_check` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:620:14
[INFO] [stdout]     |
[INFO] [stdout] 620 | pub async fn run_ffmpeg_decode_with_api_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `publish_and_decode_check` is never used
[INFO] [stdout]    --> tests/common/process_manager.rs:773:14
[INFO] [stdout]     |
[INFO] [stdout] 773 | pub async fn publish_and_decode_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `app` and `host` are never read
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct RtmpTestHelper {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 11 |     stream_id: String,
[INFO] [stdout] 12 |     app: String,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 13 |     host: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RtmpTestHelper` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `host`, `publish_command`, `play_command`, and `rtmp_url` are never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl RtmpTestHelper {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn host(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn publish_command(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn play_command(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn rtmp_url(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_rtmp_publish_command` is never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:62:8
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub fn create_rtmp_publish_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_rtmp_play_command` is never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub fn create_rtmp_play_command(stream_key: &str, app: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_create_stream_command` is never used
[INFO] [stdout]   --> tests/common/rtmp_helper.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn build_rtmp_create_stream_command() -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_release_stream_command` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:105:8
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub fn build_rtmp_release_stream_command(stream_key: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_fcpublish_command` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:120:8
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub fn build_rtmp_fcpublish_command(stream_key: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `chunk_header_size` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:152:8
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub fn chunk_header_size(chunk_stream_id: u8) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_rtmp_h264_video_header` is never used
[INFO] [stdout]    --> tests/common/rtmp_helper.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn build_rtmp_h264_video_header(is_keyframe: bool, codec_id: u8) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:37:12
[INFO] [stdout]     |
[INFO] [stdout]  16 | impl RtspTestHelper {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  37 |     pub fn options_request(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn describe_request(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn setup_video_request(&self, transport: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn setup_audio_request(&self, transport: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn play_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn pause_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn teardown_request(&self, session: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     fn next_cseq(&self) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_rtsp_announce_sdp` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:141:8
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn create_rtsp_announce_sdp(codec: TestCodec) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_cseq` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn parse_cseq(response: &str) -> Option<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTP_AVP_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:247:15
[INFO] [stdout]     |
[INFO] [stdout] 247 |     pub const RTP_AVP_TCP: &str = "RTP/AVP/TCP;interleaved=0-1";
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTP_AVP_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:250:15
[INFO] [stdout]     |
[INFO] [stdout] 250 |     pub const RTP_AVP_UDP: &str = "RTP/AVP;unicast;client_port=5000-5001";
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:253:15
[INFO] [stdout]     |
[INFO] [stdout] 253 |     pub const VIDEO_TCP: &str = "RTP/AVP/TCP;unicast;interleaved=0-1";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO_TCP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:256:15
[INFO] [stdout]     |
[INFO] [stdout] 256 |     pub const AUDIO_TCP: &str = "RTP/AVP/TCP;unicast;interleaved=2-3";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VIDEO_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:259:15
[INFO] [stdout]     |
[INFO] [stdout] 259 |     pub const VIDEO_UDP: &str = "RTP/AVP;unicast;client_port=5000-5001;server_port=6000-6001";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO_UDP` is never used
[INFO] [stdout]    --> tests/common/rtsp_helper.rs:262:15
[INFO] [stdout]     |
[INFO] [stdout] 262 |     pub const AUDIO_UDP: &str = "RTP/AVP;unicast;client_port=5002-5003;server_port=6002-6003";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestRtmpServer` is never constructed
[INFO] [stdout]   --> tests/common/server_helper.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct TestRtmpServer {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `port`, `manager`, and `publish_url` are never used
[INFO] [stdout]   --> tests/common/server_helper.rs:23:18
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl TestRtmpServer {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 23 |     pub async fn start() -> Self {
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn port(&self) -> u16 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn manager(&self) -> Arc<StreamManager> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn publish_url(&self, app: &str, stream_key: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_tcp` is never used
[INFO] [stdout]   --> tests/common/server_helper.rs:59:10
[INFO] [stdout]    |
[INFO] [stdout] 59 | async fn wait_for_tcp(host: &str, port: u16, timeout: Duration) {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_stream` is never used
[INFO] [stdout]  --> tests/common/stream_helper.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub fn setup_test_stream(
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_test_streams` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub fn cleanup_test_streams(manager: &Arc<StreamManager>, stream_ids: &[&str]) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unique_stream_id` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn unique_stream_id(prefix: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_stream_active` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:56:8
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub fn is_stream_active(manager: &Arc<StreamManager>, stream_id: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_stream_active` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:66:14
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub async fn wait_for_stream_active(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_test_port` is never used
[INFO] [stdout]   --> tests/common/stream_helper.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn get_test_port() -> u16 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `errors` is never read
[INFO] [stdout]   --> tests/common/verify.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct StreamInfo {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub errors: Vec<String>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StreamInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `metadata_tags` and `duration_ms` are never read
[INFO] [stdout]   --> tests/common/verify.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct FlvStats {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub metadata_tags: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 68 |     pub total_bytes: usize,
[INFO] [stdout] 69 |     pub duration_ms: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FlvStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `segments`, `target_duration`, and `errors` are never read
[INFO] [stdout]   --> tests/common/verify.rs:77:9
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub struct HlsStats {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub segments: Vec<HlsSegmentInfo>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 78 |     pub target_duration: Option<f64>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 79 |     pub errors: Vec<String>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HlsStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `url`, `duration`, and `bytes` are never read
[INFO] [stdout]   --> tests/common/verify.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct HlsSegmentInfo {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 84 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 85 |     pub duration: Option<f64>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 86 |     pub bytes: usize,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HlsSegmentInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ffmpeg_decode_check` is never used
[INFO] [stdout]    --> tests/common/verify.rs:105:14
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub async fn run_ffmpeg_decode_check(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `assert_stream_min_frames` is never used
[INFO] [stdout]    --> tests/common/verify.rs:415:14
[INFO] [stdout]     |
[INFO] [stdout] 415 | pub async fn assert_stream_min_frames(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `probe_stream_info` is never used
[INFO] [stdout]    --> tests/common/verify.rs:454:8
[INFO] [stdout]     |
[INFO] [stdout] 454 | pub fn probe_stream_info(url: &str, timeout_secs: u64) -> Result<StreamInfo, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_stream_all_layers` is never used
[INFO] [stdout]    --> tests/common/verify.rs:940:14
[INFO] [stdout]     |
[INFO] [stdout] 940 | pub async fn verify_stream_all_layers(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VeificationReport` is never constructed
[INFO] [stdout]     --> tests/common/verify.rs:1012:12
[INFO] [stdout]      |
[INFO] [stdout] 1012 | pub struct VeificationReport {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTMP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:67:15
[INFO] [stdout]    |
[INFO] [stdout] 67 |     pub const RTMP_PORT: u16 = 1935;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RTSP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:68:15
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub const RTSP_PORT: u16 = 554;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HTTP_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:69:15
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub const HTTP_PORT: u16 = 8081;
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WEBRTC_PORT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:70:15
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub const WEBRTC_PORT: u16 = 9080;
[INFO] [stdout]    |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `random_test_port` is never used
[INFO] [stdout]   --> tests/common/mod.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 |     pub fn random_test_port() -> u16 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FRAME_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:87:15
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub const FRAME_WAIT: Duration = Duration::from_millis(100);
[INFO] [stdout]    |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STREAM_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:88:15
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub const STREAM_WAIT: Duration = Duration::from_millis(500);
[INFO] [stdout]    |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CLEANUP_WAIT` is never used
[INFO] [stdout]   --> tests/common/mod.rs:90:15
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub const CLEANUP_WAIT: Duration = Duration::from_millis(100);
[INFO] [stdout]    |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `time::format_description::parse`: use `parse_borrowed` with the appropriate version for clarity
[INFO] [stdout]    --> src/main.rs:117:44
[INFO] [stdout]     |
[INFO] [stdout] 117 |     let format = time::format_description::parse(
[INFO] [stdout]     |                                            ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `initial_buf_len`
[INFO] [stdout]    --> src/server/rtmp/mod.rs:312:17
[INFO] [stdout]     |
[INFO] [stdout] 312 |             let initial_buf_len = buf.len();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_initial_buf_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset` is never read
[INFO] [stdout]     --> src/server/rtmp/mod.rs:1522:21
[INFO] [stdout]      |
[INFO] [stdout] 1522 |                     offset = offset.saturating_add(1);
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset` is never read
[INFO] [stdout]     --> src/server/rtmp/mod.rs:1526:21
[INFO] [stdout]      |
[INFO] [stdout] 1526 |                     offset = offset.saturating_add(1);
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `response_buffer`
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut response_buffer = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_response_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `request`
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:453:21
[INFO] [stdout]     |
[INFO] [stdout] 453 |                 let request = RtspRequest::new("GET_PARAMETER", &remote_url)
[INFO] [stdout]     |                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_request`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_video_keyframe`
[INFO] [stdout]  --> src/core/dispatch.rs:8:44
[INFO] [stdout]   |
[INFO] [stdout] 8 | use super::frame_ring::{is_playable_video, is_video_keyframe, SnapMode};
[INFO] [stdout]   |                                            ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `last_playable_idr_seq`
[INFO] [stdout]  --> src/core/live_play.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::dispatch::{last_playable_idr_seq, DispatchError, DispatchReader};
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OnceLock`
[INFO] [stdout]  --> src/core/metrics.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::sync::{Arc, OnceLock};
[INFO] [stdout]   |                      ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]   --> src/core/protocol.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     HTTP_FLV,
[INFO] [stdout]    |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_API` should have an upper camel case name
[INFO] [stdout]   --> src/core/protocol.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     HTTP_API,
[INFO] [stdout]    |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpApi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `coalesce_flv_batch`
[INFO] [stdout]   --> src/core/mod.rs:15:20
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use dispatch::{coalesce_flv_batch, DispatchError, DispatchPolicy, DispatchReader};
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FrameRing`, `SnapMode`, and `is_playable_video`
[INFO] [stdout]   --> src/core/mod.rs:16:22
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use frame_ring::{is_playable_video, is_video_keyframe, FrameRing, SnapMode};
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^^                     ^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `StreamEventReceiver` and `StreamEvent`
[INFO] [stdout]   --> src/core/mod.rs:18:45
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use stream_manager::{PullSessionHandle, StreamEvent, StreamEventReceiver, StreamManager};
[INFO] [stdout]    |                                             ^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AnalysisConfig`, `DEFAULT_HLS_OUTPUT_DIR`, `DEFAULT_RECORD_OUTPUT_DIR`, `DEFAULT_SNAPSHOT_OUTPUT_DIR`, `DEFAULT_STORAGE_BASE_DIR`, `HttpConfig`, `RecordConfig`, `RtmpConfig`, `RtspConfig`, `ServerConfig`, `SnapshotConfig`, `StorageConfig`, and `WebrtcConfig`
[INFO] [stdout]   --> src/core/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     AnalysisConfig, Config, HttpConfig, RecordConfig, RtmpConfig, RtspConfig, ServerConfig,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^          ^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 25 |     SnapshotConfig, StorageConfig, TranscodeConfig, WebrtcConfig, DEFAULT_HLS_DIR,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^                   ^^^^^^^^^^^^
[INFO] [stdout] 26 |     DEFAULT_HLS_OUTPUT_DIR, DEFAULT_RECORD_DIR, DEFAULT_RECORD_OUTPUT_DIR, DEFAULT_SNAPSHOT_DIR,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^                      ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     DEFAULT_SNAPSHOT_OUTPUT_DIR, DEFAULT_STORAGE_BASE_DIR,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_playable_video_frame`
[INFO] [stdout]   --> src/core/mod.rs:30:19
[INFO] [stdout]    |
[INFO] [stdout] 30 |     is_idr_frame, is_playable_video_frame, prepend_video_config, prime_live_play,
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FirstFrameStats`, `PlayerCounts`, `RingStats`, and `StreamMetricsSnapshot`
[INFO] [stdout]   --> src/core/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     FirstFrameStats, HlsMetricsSnapshot, MetricsRegistry, MetricsSnapshot, PlaybackProtocol,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 35 |     PlayerCounts, RingStats, StreamMetricsSnapshot,
[INFO] [stdout]    |     ^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ProtocolInfo`, `ProtocolRegistry`, `ProtocolType`, and `StreamSink`
[INFO] [stdout]   --> src/core/mod.rs:37:20
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub use protocol::{ProtocolInfo, ProtocolRegistry, ProtocolType, StreamSink};
[INFO] [stdout]    |                    ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `pusher::*`
[INFO] [stdout]   --> src/core/mod.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub use pusher::*;
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tester::StreamTester`
[INFO] [stdout]   --> src/core/mod.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub use tester::StreamTester;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `flv_timestamp_ms` and `media_timestamp_delta_ms`
[INFO] [stdout]   --> src/core/mod.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     flv_timestamp_ms, media_frame_timestamp_delta_ms, media_timestamp_delta_ms,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^                                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FLV_FRAME_INTER`, `FLV_FRAME_KEY`, `FLV_IS_EX_HEADER`, `H265_NAL_PPS`, `H265_NAL_SPS`, `H265_NAL_VPS`, `HEVC_FOURCC`, `contains_h264_idr`, `extract_h264_sps_pps`, and `is_enhanced_rtmp_video`
[INFO] [stdout]   --> src/core/mod.rs:48:36
[INFO] [stdout]    |
[INFO] [stdout] 48 |     build_rtmp_video_from_annex_b, contains_h264_idr, contains_hevc_idr, ensure_annex_b,
[INFO] [stdout]    |                                    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 49 |     extract_h264_sps_pps, extract_hevc_param_sets, hevc_sprop_from_nals, hvcc_payload_to_annex_b,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 50 |     is_enhanced_rtmp_video, is_keyframe_annex_b, is_parameter_set_only, iter_annex_b_nal_ranges,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     HevcFuReassembler, FLV_FRAME_INTER, FLV_FRAME_KEY, FLV_IS_EX_HEADER, H265_NAL_PPS,
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 55 |     H265_NAL_SPS, H265_NAL_VPS, HEVC_FOURCC, RTMP_PKT_CODED_FRAMES, RTMP_PKT_CODED_FRAMES_X,
[INFO] [stdout]    |     ^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `HTTP_FLV` should have an upper camel case name
[INFO] [stdout]    --> src/core/mod.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 |     HTTP_FLV,
[INFO] [stdout]     |     ^^^^^^^^ help: convert the identifier to upper camel case: `HttpFlv`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/common.rs:844:17
[INFO] [stdout]     |
[INFO] [stdout] 844 |             let mut rtp = Self::build_rtp_packet(96, seq, timestamp, ssrc, false, sps);
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/common.rs:850:17
[INFO] [stdout]     |
[INFO] [stdout] 850 |             let mut rtp = Self::build_rtp_packet(96, seq + 1, timestamp, ssrc, false, pps);
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]  --> src/server/hls/m3u8.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::{Duration, SystemTime, UNIX_EPOCH};
[INFO] [stdout]   |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MILLISECOND_CLOCK_RATE` and `VIDEO_RTP_CLOCK_RATE`
[INFO] [stdout]  --> src/server/hls/timing.rs:6:42
[INFO] [stdout]   |
[INFO] [stdout] 6 |     media_timestamp_delta_ms_with_clock, MILLISECOND_CLOCK_RATE, VIDEO_RTP_CLOCK_RATE,
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/server/hls/ts_parser.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `is_keyframe_annex_b`
[INFO] [stdout]   --> src/server/hls/mod.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     is_keyframe_annex_b, prepend_annex_b_config_if_needed, CodecType, DispatchPolicy,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `annex_b_with_config`
[INFO] [stdout]   --> src/server/hls/mod.rs:26:29
[INFO] [stdout]    |
[INFO] [stdout] 26 | use crate::server::webrtc::{annex_b_with_config, request_publisher_keyframe};
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::io::AsyncReadExt`
[INFO] [stdout]  --> src/server/http_flv/puller.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::io::AsyncReadExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/server/http_flv/puller.rs:8:35
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |                                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufMut`, `BytesMut`, and `Bytes`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use bytes::{BufMut, Bytes, BytesMut};
[INFO] [stdout]   |             ^^^^^^  ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, `info`, and `warn`
[INFO] [stdout]  --> src/server/http_flv/mod.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufMut`
[INFO] [stdout]  --> src/server/rtmp/chunk.rs:3:18
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::{Buf, BufMut, BytesMut};
[INFO] [stdout]   |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info`, `trace`, and `warn`
[INFO] [stdout]  --> src/server/rtmp/chunk.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, error, info, trace, warn};
[INFO] [stdout]   |                             ^^^^  ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::BytesMut`
[INFO] [stdout]  --> src/server/rtmp/pusher.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use bytes::BytesMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/server/rtmp/pusher.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ChunkAssembler`, `ChunkHeader`, and `RtmpMessage`
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:12:26
[INFO] [stdout]    |
[INFO] [stdout] 12 | use super::chunk::{self, ChunkAssembler, ChunkHeader, RtmpMessage};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtmpUrl`
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:14:37
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::puller::{parse_rtmp_url, RtmpUrl};
[INFO] [stdout]    |                                     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/server/rtmp/session.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Level`
[INFO] [stdout]  --> src/server/rtmp/session.rs:5:28
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, info, Level};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType`, `StreamProtocol`, and `StreamSourceMode`
[INFO] [stdout]  --> src/server/rtmp/session.rs:8:19
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::core::{CodecType, MediaFrame, StreamProtocol, StreamSourceMode};
[INFO] [stdout]   |                   ^^^^^^^^^              ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::server::webrtc::h264_util::is_keyframe_annex_b`
[INFO] [stdout]  --> src/server/rtmp/session.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::server::webrtc::h264_util::is_keyframe_annex_b;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RtmpConnection` and `RtmpHandshake`
[INFO] [stdout]  --> src/server/rtmp/mod.rs:8:22
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use connection::{RtmpConnection, RtmpHandshake};
[INFO] [stdout]   |                      ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `puller::RtmpPuller`
[INFO] [stdout]  --> src/server/rtmp/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use puller::RtmpPuller;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `pusher::RtmpPusher`
[INFO] [stdout]   --> src/server/rtmp/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use pusher::RtmpPusher;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]   --> src/server/rtmp/mod.rs:16:17
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::BytesMut`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use bytes::BytesMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TcpStream`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stdout]   |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Duration`
[INFO] [stdout]  --> src/server/rtsp/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:11:30
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::core::{CodecType, MediaFrame, StreamManager, StreamProtocol, StreamSourceMode, Track};
[INFO] [stdout]    |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]  --> src/server/rtsp/client_session.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CodecType` and `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:15:19
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::core::{CodecType, MediaFrame, StreamManager, Track};
[INFO] [stdout]    |                   ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]  --> src/server/rtsp/play_egress.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::{Duration, Instant};
[INFO] [stdout]   |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::core::recv_coalesced_play_frame`
[INFO] [stdout]   --> src/server/rtsp/play_egress.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub use crate::core::recv_coalesced_play_frame;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::net::TcpStream`
[INFO] [stdout]  --> src/server/rtsp/pusher.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::net::TcpStream;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaFrame`
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:15:16
[INFO] [stdout]    |
[INFO] [stdout] 15 |     CodecType, MediaFrame, MediaTransport, PusherId, StreamManager, StreamProtocol, StreamPusher,
[INFO] [stdout]    |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `Sender`, and `channel`
[INFO] [stdout]  --> src/server/rtsp/server_session.rs:7:25
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]   |                         ^^^^^^^  ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtspRequest`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:17:25
[INFO] [stdout]    |
[INFO] [stdout] 17 |     InterleavedChannel, RtspRequest, RtspResponse, RtspServer, RtspSessionState, TransportMode,
[INFO] [stdout]    |                         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::core::hevc_sprop_from_nals`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::core::hevc_sprop_from_nals;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SocketReader` and `spawn_write_loop`
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:25:39
[INFO] [stdout]    |
[INFO] [stdout] 25 | use crate::server::socket_transport::{spawn_write_loop, ChannelSocketWriter, SocketReader};
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^^^^                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `client_session::RtspClientSession`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub use client_session::RtspClientSession;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `is_udp_transport`, `parse_transport_server_ports`, and `url_prefers_udp`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:26:61
[INFO] [stdout]    |
[INFO] [stdout] 26 |     extract_stream_id, extract_track_id, extract_transport, is_udp_transport,
[INFO] [stdout]    |                                                             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     parse_transport_server_ports, url_prefers_udp, TransportInfo,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RtpHeader` and `UdpTransport`
[INFO] [stdout]   --> src/server/rtsp/mod.rs:30:18
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub use common::{RtpHeader, RtspCommon, UdpTransport};
[INFO] [stdout]    |                  ^^^^^^^^^              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/server/socket_transport.rs:5:25
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]   |                         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> src/server/socket_transport.rs:7:29
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{debug, error, info};
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/server/transport/adapters.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/server/transport/adapters.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `StreamManager` and `TransportStatus`
[INFO] [stdout]  --> src/server/transport/adapters.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 |     MediaTransport, StreamManager, StreamProtocol, StreamPuller, TransportConfig, TransportStatus,
[INFO] [stdout]   |                     ^^^^^^^^^^^^^                                                 ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `webrtc::track::track_local::TrackLocalWriter`
[INFO] [stdout]  --> src/server/webrtc/outbound_h264.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use webrtc::track::track_local::TrackLocalWriter;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `contains_idr_nalu`
[INFO] [stdout]   --> src/server/webrtc/player.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     contains_idr_nalu, contains_sps_or_pps_nalu, describe_annex_b, duration_from_rtp_timestamps,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_url`
[INFO] [stdout]    --> src/server/rtsp/puller.rs:436:29
[INFO] [stdout]     |
[INFO] [stdout] 436 |     async fn send_keepalive(remote_url: String) {
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_url`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/rtsp/sdp_builder.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut session = SessionDescription {
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sps_cache`
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:994:13
[INFO] [stdout]     |
[INFO] [stdout] 994 |         let sps_cache = Arc::clone(&self.sps_cache);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sps_cache`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_cache`
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:995:13
[INFO] [stdout]     |
[INFO] [stdout] 995 |         let pps_cache = Arc::clone(&self.pps_cache);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_cache`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:489:13
[INFO] [stdout]     |
[INFO] [stdout] 489 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq).header(
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:497:13
[INFO] [stdout]     |
[INFO] [stdout] 497 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:520:13
[INFO] [stdout]     |
[INFO] [stdout] 520 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:542:13
[INFO] [stdout]     |
[INFO] [stdout] 542 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:563:13
[INFO] [stdout]     |
[INFO] [stdout] 563 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:568:13
[INFO] [stdout]     |
[INFO] [stdout] 568 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:573:13
[INFO] [stdout]     |
[INFO] [stdout] 573 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:578:13
[INFO] [stdout]     |
[INFO] [stdout] 578 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:585:13
[INFO] [stdout]     |
[INFO] [stdout] 585 |         let mut response = RtspResponse::new(status_code, reason).header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `time::format_description::parse`: use `parse_borrowed` with the appropriate version for clarity
[INFO] [stdout]    --> src/main.rs:117:44
[INFO] [stdout]     |
[INFO] [stdout] 117 |     let format = time::format_description::parse(
[INFO] [stdout]     |                                            ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream_manager` is never read
[INFO] [stdout]   --> src/process/transcode/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct TranscodeManager {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] 67 |     sessions: Arc<RwLock<HashMap<String, ActiveTranscodeSession>>>,
[INFO] [stdout] 68 |     stream_manager: Arc<StreamManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TranscodeManager` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `segment_wall_secs` and `output_dir` are never used
[INFO] [stdout]    --> src/server/hls/mod.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl HlsSession {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 199 |     fn segment_wall_secs(&self) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 553 |     pub fn output_dir(&self) -> &Path {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `download_segment` is never used
[INFO] [stdout]    --> src/server/hls/puller.rs:811:10
[INFO] [stdout]     |
[INFO] [stdout] 811 | async fn download_segment(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_ts_segment_hls` is never used
[INFO] [stdout]     --> src/server/hls/puller.rs:1186:10
[INFO] [stdout]      |
[INFO] [stdout] 1186 | async fn process_ts_segment_hls(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TS_PACKET_SIZE` is never used
[INFO] [stdout]     --> src/server/hls/puller.rs:1231:7
[INFO] [stdout]      |
[INFO] [stdout] 1231 | const TS_PACKET_SIZE: usize = 188;
[INFO] [stdout]      |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prepare_h264_au_for_ts` is never used
[INFO] [stdout]    --> src/server/hls/ts_muxer.rs:277:4
[INFO] [stdout]     |
[INFO] [stdout] 277 | fn prepare_h264_au_for_ts(data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `starts_with_aud` is never used
[INFO] [stdout]    --> src/server/hls/ts_muxer.rs:290:4
[INFO] [stdout]     |
[INFO] [stdout] 290 | fn starts_with_aud(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_paused` is never used
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl RtmpPusher {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 75 |     fn is_paused(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `build_setup_udp_response` is never used
[INFO] [stdout]    --> src/server/rtsp/mod.rs:527:8
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl RtspServer {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 527 |     fn build_setup_udp_response(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream_manager` is never read
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct RtspClientSession {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     stream_manager: Arc<StreamManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rtcp_socket` and `server_rtcp_addr` are never read
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | struct TrackUdpTransport {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 29 |     rtp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout] 30 |     rtcp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 31 |     server_rtp_addr: SocketAddr,
[INFO] [stdout] 32 |     server_rtcp_addr: SocketAddr,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `vps_cache` is never read
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct RtspPusher {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     vps_cache: Arc<parking_lot::RwLock<Option<Vec<u8>>>>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_paused` is never used
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:70:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl RtspPusher {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 70 |     fn is_paused(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sdp_generated` is never read
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct RtspServerSession {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 43 |     sdp_generated: Arc<parking_lot::RwLock<bool>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rtcp_socket` and `client_rtcp_addr` are never read
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | struct UdpTrackTransport {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 48 |     rtp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout] 49 |     rtcp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 50 |     client_rtp_addr: SocketAddr,
[INFO] [stdout] 51 |     client_rtcp_addr: SocketAddr,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UdpTrackTransport` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `send_rtp_over_udp_track`, `extract_h264_sps_pps_from_payload`, and `is_h264_keyframe` are never used
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:256:14
[INFO] [stdout]     |
[INFO] [stdout]  54 | impl RtspServerSession {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 256 |     async fn send_rtp_over_udp_track(&self, data: &[u8], track_id: u8) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 374 |     fn extract_h264_sps_pps_from_payload(payload: &[u8]) -> (Option<Vec<u8>>, Option<Vec<u8>>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 697 |     fn is_h264_keyframe(payload: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_rtp_stale_in_gop` is never used
[INFO] [stdout]   --> src/server/webrtc/h264_util.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn is_rtp_stale_in_gop(curr: u64, prev: u64) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `h264_payload_type_from_sdp` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h264.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn h264_payload_type_from_sdp(sdp: &str) -> Option<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_video_media_description` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h264.rs:54:4
[INFO] [stdout]    |
[INFO] [stdout] 54 | fn find_video_media_description(sdp: &SessionDescription) -> Option<&MediaDescription> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_video_media_description` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h265.rs:40:4
[INFO] [stdout]    |
[INFO] [stdout] 40 | fn find_video_media_description(sdp: &SessionDescription) -> Option<&MediaDescription> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Lagged` is never constructed
[INFO] [stdout]    --> src/server/webrtc/player.rs:785:5
[INFO] [stdout]     |
[INFO] [stdout] 783 | enum RecvCoalesced {
[INFO] [stdout]     |      ------------- variant in this enum
[INFO] [stdout] 784 |     Frame(MediaFrame, u64),
[INFO] [stdout] 785 |     Lagged(u64),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:189:25
[INFO] [stdout]     |
[INFO] [stdout] 189 | /                         Self::send_rtmp_message(
[INFO] [stdout] 190 | |                             &mut writer,
[INFO] [stdout] 191 | |                             0x08,
[INFO] [stdout] 192 | |                             msg_stream_id,
[INFO] [stdout] ...   |
[INFO] [stdout] 198 | |                         .await;
[INFO] [stdout]     | |______________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 189 |                         let _ = Self::send_rtmp_message(
[INFO] [stdout]     |                         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/http_flv/puller.rs:517:9
[INFO] [stdout]     |
[INFO] [stdout] 517 |     let mut pps_sent = false;
[INFO] [stdout]     |         ----^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/http_flv/puller.rs:521:9
[INFO] [stdout]     |
[INFO] [stdout] 521 |     let mut prev_tag_size: u32 = 0;
[INFO] [stdout]     |         ----^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:127:17
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(crate::core::dispatch::DispatchError::Closed) => break,
[INFO] [stdout]     |                 ------------------------------------------------- matches all the relevant values
[INFO] [stdout] 127 |                 Err(e) => {
[INFO] [stdout]     |                 ^^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtmp/mod.rs:247:13
[INFO] [stdout]     |
[INFO] [stdout] 247 |         let mut reader = SocketReader::new(reader);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtmp/mod.rs:833:21
[INFO] [stdout]     |
[INFO] [stdout] 833 |                 let mut result_values = vec![
[INFO] [stdout]     |                     ----^^^^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut response_buffer = String::new();
[INFO] [stdout]     |                 ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]    --> src/server/rtsp/puller.rs:441:9
[INFO] [stdout]     |
[INFO] [stdout] 438 | /         loop {
[INFO] [stdout] 439 | |             tokio::time::sleep(Duration::from_secs(30)).await;
[INFO] [stdout] 440 | |         }
[INFO] [stdout]     | |_________- any code following this expression is unreachable
[INFO] [stdout] 441 |           info!("[RTSP Puller] [Keepalive] Keepalive loop ended");
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout]     = note: this warning originates in the macro `$crate::event` which comes from the expansion of the macro `info` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/http_flv/puller.rs:517:9
[INFO] [stdout]     |
[INFO] [stdout] 517 |     let mut pps_sent = false;
[INFO] [stdout]     |         ----^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/http_flv/puller.rs:521:9
[INFO] [stdout]     |
[INFO] [stdout] 521 |     let mut prev_tag_size: u32 = 0;
[INFO] [stdout]     |         ----^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/socket_transport.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 |                 let mut final_result = result[..pos + delimiter.len()].to_vec();
[INFO] [stdout]    |                     ----^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:127:17
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(crate::core::dispatch::DispatchError::Closed) => break,
[INFO] [stdout]     |                 ------------------------------------------------- matches all the relevant values
[INFO] [stdout] 127 |                 Err(e) => {
[INFO] [stdout]     |                 ^^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtmp/mod.rs:247:13
[INFO] [stdout]     |
[INFO] [stdout] 247 |         let mut reader = SocketReader::new(reader);
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtmp/mod.rs:833:21
[INFO] [stdout]     |
[INFO] [stdout] 833 |                 let mut result_values = vec![
[INFO] [stdout]     |                     ----^^^^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut response_buffer = String::new();
[INFO] [stdout]     |                 ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]    --> src/server/rtsp/puller.rs:441:9
[INFO] [stdout]     |
[INFO] [stdout] 438 | /         loop {
[INFO] [stdout] 439 | |             tokio::time::sleep(Duration::from_secs(30)).await;
[INFO] [stdout] 440 | |         }
[INFO] [stdout]     | |_________- any code following this expression is unreachable
[INFO] [stdout] 441 |           info!("[RTSP Puller] [Keepalive] Keepalive loop ended");
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout]     = note: this warning originates in the macro `$crate::event` which comes from the expansion of the macro `info` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/socket_transport.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 |                 let mut final_result = result[..pos + delimiter.len()].to_vec();
[INFO] [stdout]    |                     ----^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaTransport`
[INFO] [stdout]  --> src/server/transport/adapters.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     MediaTransport, StreamManager, StreamProtocol, StreamPuller, TransportConfig, TransportStatus,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/core/metrics.rs:383:13
[INFO] [stdout]     |
[INFO] [stdout] 383 |             mut hls,
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]   --> src/core/tester.rs:86:17
[INFO] [stdout]    |
[INFO] [stdout] 86 |             let tracks = vec![
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream`
[INFO] [stdout]    --> src/core/tester.rs:217:13
[INFO] [stdout]     |
[INFO] [stdout] 217 |         let stream = manager.create_stream(
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:233:13
[INFO] [stdout]     |
[INFO] [stdout] 233 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:255:13
[INFO] [stdout]     |
[INFO] [stdout] 255 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:279:13
[INFO] [stdout]     |
[INFO] [stdout] 279 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:308:13
[INFO] [stdout]     |
[INFO] [stdout] 308 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buf`
[INFO] [stdout]    --> src/core/tester.rs:404:13
[INFO] [stdout]     |
[INFO] [stdout] 404 |         let buf = vec![
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_buf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream`
[INFO] [stdout]    --> src/core/tester.rs:718:13
[INFO] [stdout]     |
[INFO] [stdout] 718 |         let stream = manager.create_stream(
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:736:13
[INFO] [stdout]     |
[INFO] [stdout] 736 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MediaTransport`
[INFO] [stdout]  --> src/server/transport/adapters.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     MediaTransport, StreamManager, StreamProtocol, StreamPuller, TransportConfig, TransportStatus,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/core/metrics.rs:383:13
[INFO] [stdout]     |
[INFO] [stdout] 383 |             mut hls,
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_segments`
[INFO] [stdout]    --> src/server/hls/m3u8.rs:199:41
[INFO] [stdout]     |
[INFO] [stdout] 199 |     pub fn slot_filename(sequence: u64, max_segments: usize) -> String {
[INFO] [stdout]     |                                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_segments`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `playlist_body` is never read
[INFO] [stdout]    --> src/server/hls/puller.rs:314:9
[INFO] [stdout]     |
[INFO] [stdout] 314 |         playlist_body = body.clone();
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]   --> src/core/tester.rs:86:17
[INFO] [stdout]    |
[INFO] [stdout] 86 |             let tracks = vec![
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tracks`
[INFO] [stdout]    --> src/core/tester.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         let tracks = vec![Track {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/http_flv/puller.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let mut best_bandwidth = u64::MAX;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `best_bandwidth`
[INFO] [stdout]   --> src/server/http_flv/puller.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let mut best_bandwidth = u64::MAX;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_best_bandwidth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `current_bandwidth` is assigned to, but never used
[INFO] [stdout]   --> src/server/http_flv/puller.rs:33:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let mut current_bandwidth = 0u64;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: consider using `_current_bandwidth` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_bandwidth` is never read
[INFO] [stdout]   --> src/server/http_flv/puller.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |                         current_bandwidth = bw_str.parse().unwrap_or(0);
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_audio`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:310:9
[INFO] [stdout]     |
[INFO] [stdout] 310 |     let has_audio = es_map.contains_key(&all_audio_pid.unwrap_or(0xFFFF));
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_audio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `pps_found` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:329:13
[INFO] [stdout]     |
[INFO] [stdout] 329 |         let mut pps_found = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_pps_found` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_bytes`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:377:25
[INFO] [stdout]     |
[INFO] [stdout] 377 |                     let pps_bytes = nal_unit[4..].to_vec();
[INFO] [stdout]     |                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_bytes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `pps_found` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:368:21
[INFO] [stdout]     |
[INFO] [stdout] 368 |                     pps_found = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 379 |                     pps_found = true;
[INFO] [stdout]     |                     ---------------- `pps_found` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `pps_found` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:379:21
[INFO] [stdout]     |
[INFO] [stdout] 379 |                     pps_found = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `sps_sent` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:516:9
[INFO] [stdout]     |
[INFO] [stdout] 516 |     let mut sps_sent = false;
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_sps_sent` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_sent`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:517:9
[INFO] [stdout]     |
[INFO] [stdout] 517 |     let mut pps_sent = false;
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_sent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prev_tag_size`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:521:9
[INFO] [stdout]     |
[INFO] [stdout] 521 |     let mut prev_tag_size: u32 = 0;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_prev_tag_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `current_tag_offset` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:522:9
[INFO] [stdout]     |
[INFO] [stdout] 522 |     let mut current_tag_offset = 0usize;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_current_tag_offset` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sps_sent` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:606:45
[INFO] [stdout]     |
[INFO] [stdout] 606 | ...                   sps_sent = true;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 661 | ...                       sps_sent = true;
[INFO] [stdout]     |                           --------------- `sps_sent` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sps_sent` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:661:49
[INFO] [stdout]     |
[INFO] [stdout] 661 | ...                   sps_sent = true;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_tag_offset` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:557:13
[INFO] [stdout]     |
[INFO] [stdout] 557 |             current_tag_offset = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_video`
[INFO] [stdout]    --> src/server/http_flv/mod.rs:150:43
[INFO] [stdout]     |
[INFO] [stdout] 150 | fn generate_metadata_tag(stream_id: &str, has_video: bool, has_audio: bool) -> Vec<u8> {
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_video`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_audio`
[INFO] [stdout]    --> src/server/http_flv/mod.rs:150:60
[INFO] [stdout]     |
[INFO] [stdout] 150 | fn generate_metadata_tag(stream_id: &str, has_video: bool, has_audio: bool) -> Vec<u8> {
[INFO] [stdout]     |                                                            ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_audio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_segments`
[INFO] [stdout]    --> src/server/hls/m3u8.rs:199:41
[INFO] [stdout]     |
[INFO] [stdout] 199 |     pub fn slot_filename(sequence: u64, max_segments: usize) -> String {
[INFO] [stdout]     |                                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_segments`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `playlist_body` is never read
[INFO] [stdout]    --> src/server/hls/puller.rs:314:9
[INFO] [stdout]     |
[INFO] [stdout] 314 |         playlist_body = body.clone();
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `server_stream_id` is never read
[INFO] [stdout]    --> src/server/rtmp/puller.rs:114:41
[INFO] [stdout]     |
[INFO] [stdout] 114 |           let mut server_stream_id: u32 = 1;
[INFO] [stdout]     |                                           ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 140 | /         server_stream_id = wait_for_create_stream(
[INFO] [stdout] 141 | |             &mut read_half,
[INFO] [stdout] 142 | |             &mut buf,
[INFO] [stdout] 143 | |             &mut chunk_states,
[INFO] [stdout] ...   |
[INFO] [stdout] 148 | |         .await? as u32;
[INFO] [stdout]     | |______________________- `server_stream_id` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/http_flv/puller.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let mut best_bandwidth = u64::MAX;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `best_bandwidth`
[INFO] [stdout]   --> src/server/http_flv/puller.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let mut best_bandwidth = u64::MAX;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_best_bandwidth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `current_bandwidth` is assigned to, but never used
[INFO] [stdout]   --> src/server/http_flv/puller.rs:33:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let mut current_bandwidth = 0u64;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: consider using `_current_bandwidth` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_bandwidth` is never read
[INFO] [stdout]   --> src/server/http_flv/puller.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |                         current_bandwidth = bw_str.parse().unwrap_or(0);
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_audio`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:310:9
[INFO] [stdout]     |
[INFO] [stdout] 310 |     let has_audio = es_map.contains_key(&all_audio_pid.unwrap_or(0xFFFF));
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_audio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `pps_found` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:329:13
[INFO] [stdout]     |
[INFO] [stdout] 329 |         let mut pps_found = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_pps_found` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_bytes`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:377:25
[INFO] [stdout]     |
[INFO] [stdout] 377 |                     let pps_bytes = nal_unit[4..].to_vec();
[INFO] [stdout]     |                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_bytes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `pps_found` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:368:21
[INFO] [stdout]     |
[INFO] [stdout] 368 |                     pps_found = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 379 |                     pps_found = true;
[INFO] [stdout]     |                     ---------------- `pps_found` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `pps_found` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:379:21
[INFO] [stdout]     |
[INFO] [stdout] 379 |                     pps_found = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `sps_sent` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:516:9
[INFO] [stdout]     |
[INFO] [stdout] 516 |     let mut sps_sent = false;
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_sps_sent` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_sent`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:517:9
[INFO] [stdout]     |
[INFO] [stdout] 517 |     let mut pps_sent = false;
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_sent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prev_tag_size`
[INFO] [stdout]    --> src/server/http_flv/puller.rs:521:9
[INFO] [stdout]     |
[INFO] [stdout] 521 |     let mut prev_tag_size: u32 = 0;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_prev_tag_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `current_tag_offset` is assigned to, but never used
[INFO] [stdout]    --> src/server/http_flv/puller.rs:522:9
[INFO] [stdout]     |
[INFO] [stdout] 522 |     let mut current_tag_offset = 0usize;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_current_tag_offset` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sps_sent` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:606:45
[INFO] [stdout]     |
[INFO] [stdout] 606 | ...                   sps_sent = true;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 661 | ...                       sps_sent = true;
[INFO] [stdout]     |                           --------------- `sps_sent` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sps_sent` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:661:49
[INFO] [stdout]     |
[INFO] [stdout] 661 | ...                   sps_sent = true;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_tag_offset` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:557:13
[INFO] [stdout]     |
[INFO] [stdout] 557 |             current_tag_offset = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `server_stream_id` is never read
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:478:41
[INFO] [stdout]     |
[INFO] [stdout] 478 |         let mut server_stream_id: u32 = 1;
[INFO] [stdout]     |                                         ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 492 |         server_stream_id = wait_for_create_stream(&mut conn, tx_id).await? as u32;
[INFO] [stdout]     |         ------------------------------------------------------------------------- `server_stream_id` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `initial_buf_len`
[INFO] [stdout]    --> src/server/rtmp/mod.rs:312:17
[INFO] [stdout]     |
[INFO] [stdout] 312 |             let initial_buf_len = buf.len();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_initial_buf_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_video`
[INFO] [stdout]    --> src/server/http_flv/mod.rs:150:43
[INFO] [stdout]     |
[INFO] [stdout] 150 | fn generate_metadata_tag(stream_id: &str, has_video: bool, has_audio: bool) -> Vec<u8> {
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_video`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_audio`
[INFO] [stdout]    --> src/server/http_flv/mod.rs:150:60
[INFO] [stdout]     |
[INFO] [stdout] 150 | fn generate_metadata_tag(stream_id: &str, has_video: bool, has_audio: bool) -> Vec<u8> {
[INFO] [stdout]     |                                                            ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_audio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset` is never read
[INFO] [stdout]     --> src/server/rtmp/mod.rs:1522:21
[INFO] [stdout]      |
[INFO] [stdout] 1522 |                     offset = offset.saturating_add(1);
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset` is never read
[INFO] [stdout]     --> src/server/rtmp/mod.rs:1526:21
[INFO] [stdout]      |
[INFO] [stdout] 1526 |                     offset = offset.saturating_add(1);
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `response_buffer`
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut response_buffer = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_response_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `request`
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:453:21
[INFO] [stdout]     |
[INFO] [stdout] 453 |                 let request = RtspRequest::new("GET_PARAMETER", &remote_url)
[INFO] [stdout]     |                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_request`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/common.rs:844:17
[INFO] [stdout]     |
[INFO] [stdout] 844 |             let mut rtp = Self::build_rtp_packet(96, seq, timestamp, ssrc, false, sps);
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/common.rs:850:17
[INFO] [stdout]     |
[INFO] [stdout] 850 |             let mut rtp = Self::build_rtp_packet(96, seq + 1, timestamp, ssrc, false, pps);
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_url`
[INFO] [stdout]    --> src/server/rtsp/puller.rs:436:29
[INFO] [stdout]     |
[INFO] [stdout] 436 |     async fn send_keepalive(remote_url: String) {
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_url`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `server_stream_id` is never read
[INFO] [stdout]    --> src/server/rtmp/puller.rs:114:41
[INFO] [stdout]     |
[INFO] [stdout] 114 |           let mut server_stream_id: u32 = 1;
[INFO] [stdout]     |                                           ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 140 | /         server_stream_id = wait_for_create_stream(
[INFO] [stdout] 141 | |             &mut read_half,
[INFO] [stdout] 142 | |             &mut buf,
[INFO] [stdout] 143 | |             &mut chunk_states,
[INFO] [stdout] ...   |
[INFO] [stdout] 148 | |         .await? as u32;
[INFO] [stdout]     | |______________________- `server_stream_id` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/rtsp/sdp_builder.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut session = SessionDescription {
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `server_stream_id` is never read
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:478:41
[INFO] [stdout]     |
[INFO] [stdout] 478 |         let mut server_stream_id: u32 = 1;
[INFO] [stdout]     |                                         ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 492 |         server_stream_id = wait_for_create_stream(&mut conn, tx_id).await? as u32;
[INFO] [stdout]     |         ------------------------------------------------------------------------- `server_stream_id` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sps_cache`
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:994:13
[INFO] [stdout]     |
[INFO] [stdout] 994 |         let sps_cache = Arc::clone(&self.sps_cache);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sps_cache`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_cache`
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:995:13
[INFO] [stdout]     |
[INFO] [stdout] 995 |         let pps_cache = Arc::clone(&self.pps_cache);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_cache`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `initial_buf_len`
[INFO] [stdout]    --> src/server/rtmp/mod.rs:312:17
[INFO] [stdout]     |
[INFO] [stdout] 312 |             let initial_buf_len = buf.len();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_initial_buf_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:489:13
[INFO] [stdout]     |
[INFO] [stdout] 489 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq).header(
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:497:13
[INFO] [stdout]     |
[INFO] [stdout] 497 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:520:13
[INFO] [stdout]     |
[INFO] [stdout] 520 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:542:13
[INFO] [stdout]     |
[INFO] [stdout] 542 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:563:13
[INFO] [stdout]     |
[INFO] [stdout] 563 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:568:13
[INFO] [stdout]     |
[INFO] [stdout] 568 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:573:13
[INFO] [stdout]     |
[INFO] [stdout] 573 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:578:13
[INFO] [stdout]     |
[INFO] [stdout] 578 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:585:13
[INFO] [stdout]     |
[INFO] [stdout] 585 |         let mut response = RtspResponse::new(status_code, reason).header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset` is never read
[INFO] [stdout]     --> src/server/rtmp/mod.rs:1522:21
[INFO] [stdout]      |
[INFO] [stdout] 1522 |                     offset = offset.saturating_add(1);
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset` is never read
[INFO] [stdout]     --> src/server/rtmp/mod.rs:1526:21
[INFO] [stdout]      |
[INFO] [stdout] 1526 |                     offset = offset.saturating_add(1);
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `response_buffer`
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut response_buffer = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_response_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `request`
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:453:21
[INFO] [stdout]     |
[INFO] [stdout] 453 |                 let request = RtspRequest::new("GET_PARAMETER", &remote_url)
[INFO] [stdout]     |                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_request`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/common.rs:844:17
[INFO] [stdout]     |
[INFO] [stdout] 844 |             let mut rtp = Self::build_rtp_packet(96, seq, timestamp, ssrc, false, sps);
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/common.rs:850:17
[INFO] [stdout]     |
[INFO] [stdout] 850 |             let mut rtp = Self::build_rtp_packet(96, seq + 1, timestamp, ssrc, false, pps);
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_url`
[INFO] [stdout]    --> src/server/rtsp/puller.rs:436:29
[INFO] [stdout]     |
[INFO] [stdout] 436 |     async fn send_keepalive(remote_url: String) {
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_url`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/server/rtsp/sdp_builder.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut session = SessionDescription {
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sps_cache`
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:994:13
[INFO] [stdout]     |
[INFO] [stdout] 994 |         let sps_cache = Arc::clone(&self.sps_cache);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sps_cache`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pps_cache`
[INFO] [stdout]    --> src/server/rtsp/server_session.rs:995:13
[INFO] [stdout]     |
[INFO] [stdout] 995 |         let pps_cache = Arc::clone(&self.pps_cache);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pps_cache`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:489:13
[INFO] [stdout]     |
[INFO] [stdout] 489 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq).header(
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:497:13
[INFO] [stdout]     |
[INFO] [stdout] 497 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:520:13
[INFO] [stdout]     |
[INFO] [stdout] 520 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:542:13
[INFO] [stdout]     |
[INFO] [stdout] 542 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:563:13
[INFO] [stdout]     |
[INFO] [stdout] 563 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:568:13
[INFO] [stdout]     |
[INFO] [stdout] 568 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:573:13
[INFO] [stdout]     |
[INFO] [stdout] 573 |         let mut response = RtspResponse::new(200, "OK").header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:578:13
[INFO] [stdout]     |
[INFO] [stdout] 578 |         let mut response = RtspResponse::new(200, "OK")
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/server/rtsp/mod.rs:585:13
[INFO] [stdout]     |
[INFO] [stdout] 585 |         let mut response = RtspResponse::new(status_code, reason).header("CSeq", cseq);
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `add_track` is never used
[INFO] [stdout]   --> src/core/mod.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 79 | impl Stream {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] 80 |     pub fn add_track(&mut self, track: Track) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_error` and `is_terminated` are never used
[INFO] [stdout]    --> src/core/mod.rs:122:12
[INFO] [stdout]     |
[INFO] [stdout]  95 | impl StreamStatus {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn is_error(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn is_terminated(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Paused` is never constructed
[INFO] [stdout]    --> src/core/mod.rs:135:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub enum PlaybackStatus {
[INFO] [stdout]     |          -------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 135 |     Paused,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PlaybackStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_playing` is never used
[INFO] [stdout]    --> src/core/mod.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl PlaybackStatus {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn is_playing(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str` and `description` are never used
[INFO] [stdout]    --> src/core/mod.rs:185:12
[INFO] [stdout]     |
[INFO] [stdout] 184 | impl StreamSinkMode {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] 185 |     pub fn as_str(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn description(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Connecting`, `Error`, and `Stopped` are never constructed
[INFO] [stdout]    --> src/core/mod.rs:203:5
[INFO] [stdout]     |
[INFO] [stdout] 201 | pub enum ReceiverStatus {
[INFO] [stdout]     |          -------------- variants in this enum
[INFO] [stdout] 202 |     Idle,
[INFO] [stdout] 203 |     Connecting,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     Error(String),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 207 |     Stopped,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ReceiverStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str` and `description` are never used
[INFO] [stdout]    --> src/core/mod.rs:211:12
[INFO] [stdout]     |
[INFO] [stdout] 210 | impl ReceiverStatus {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] 211 |     pub fn as_str(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn description(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `extra_params` is never read
[INFO] [stdout]    --> src/core/mod.rs:285:9
[INFO] [stdout]     |
[INFO] [stdout] 280 | pub struct Track {
[INFO] [stdout]     |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub extra_params: HashMap<String, String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Track` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_extra_params` is never used
[INFO] [stdout]    --> src/core/mod.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl Track {
[INFO] [stdout]     | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn with_extra_params(mut self, key: &str, value: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `mime_type` is never used
[INFO] [stdout]    --> src/core/mod.rs:348:12
[INFO] [stdout]     |
[INFO] [stdout] 335 | impl CodecType {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 348 |     pub fn mime_type(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtpPacket` is never constructed
[INFO] [stdout]    --> src/core/mod.rs:410:12
[INFO] [stdout]     |
[INFO] [stdout] 410 | pub struct RtpPacket {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max_size_mb` and `max_files` are never read
[INFO] [stdout]    --> src/core/config.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub struct LogConfig {
[INFO] [stdout]     |            --------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub max_size_mb: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 116 |     pub max_files: usize,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LogConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `policy`, `set_cursor`, `advance_cursor`, `cursor_media_lag_ms`, and `recv_live_edge_batch` are never used
[INFO] [stdout]    --> src/core/dispatch.rs:96:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl DispatchReader {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn policy(&self) -> DispatchPolicy {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn set_cursor(&mut self, cursor: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn advance_cursor(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn cursor_media_lag_ms(&self) -> Option<u64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 483 |     pub async fn recv_live_edge_batch(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `iter_idr_seqs_rev` and `find_frame_rev` are never used
[INFO] [stdout]    --> src/core/frame_ring.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl FrameRing {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn iter_idr_seqs_rev(&self) -> impl Iterator<Item = u64> + '_ {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn find_frame_rev(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `recv_coalesced_play_frame` is never used
[INFO] [stdout]    --> src/core/live_play.rs:155:14
[INFO] [stdout]     |
[INFO] [stdout] 155 | pub async fn recv_coalesced_play_frame(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `update_hls` is never used
[INFO] [stdout]    --> src/core/metrics.rs:289:12
[INFO] [stdout]     |
[INFO] [stdout] 181 | impl MetricsRegistry {
[INFO] [stdout]     | -------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn update_hls(stream_id: &str, update: HlsMetricsSnapshot) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `StreamSink` is never used
[INFO] [stdout]   --> src/core/protocol.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait StreamSink: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `StreamSource` is never used
[INFO] [stdout]   --> src/core/protocol.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub trait StreamSource: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ProtocolType` is never used
[INFO] [stdout]   --> src/core/protocol.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum ProtocolType {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `as_str` and `from_str` are never used
[INFO] [stdout]   --> src/core/protocol.rs:40:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | impl ProtocolType {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 40 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn from_str(s: &str) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProtocolInfo` is never constructed
[INFO] [stdout]   --> src/core/protocol.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub struct ProtocolInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProtocolRegistry` is never constructed
[INFO] [stdout]   --> src/core/protocol.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 82 | pub struct ProtocolRegistry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `register`, `list`, and `is_enabled` are never used
[INFO] [stdout]    --> src/core/protocol.rs:87:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl ProtocolRegistry {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  87 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn register(&mut self, info: ProtocolInfo) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn list(&self) -> &[ProtocolInfo] {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn is_enabled(&self, protocol: ProtocolType) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `latest_playable_idr_frame` and `find_frame_rev` are never used
[INFO] [stdout]    --> src/core/stream_hub.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl StreamHub {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn latest_playable_idr_frame<F>(&self, mut is_match: F) -> Option<MediaFrame>
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn find_frame_rev(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_pull_stop_requested`, `set_created`, `set_playback_idle`, and `set_playback_paused` are never used
[INFO] [stdout]    --> src/core/stream_manager.rs:197:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | impl StreamManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn is_pull_stop_requested(&self, stream_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 552 |     pub fn set_created(&self, stream_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 572 |     pub fn set_playback_idle(&self, stream_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 580 |     pub fn set_playback_paused(&self, stream_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/tester.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl StreamTester {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 15 |     pub fn new(stream_manager: Arc<StreamManager>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `flv_timestamp_ms` is never used
[INFO] [stdout]   --> src/core/timestamp.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn flv_timestamp_ms(codec: crate::core::CodecType, raw: u64) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Paused` is never constructed
[INFO] [stdout]   --> src/core/transport.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum TransportStatus {
[INFO] [stdout]    |          --------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 14 |     Paused,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TransportStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_active` is never used
[INFO] [stdout]   --> src/core/transport.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl TransportStatus {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `protocol`, `status`, `peer_addr`, `stream_id`, and `stop` are never used
[INFO] [stdout]   --> src/core/transport.rs:43:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub trait MediaTransport: Send + Sync + 'static {
[INFO] [stdout]    |           -------------- methods in this trait
[INFO] [stdout] 43 |     fn protocol(&self) -> StreamProtocol;
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 44 |     fn status(&self) -> TransportStatus;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 45 |     fn peer_addr(&self) -> String;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 46 |     fn stream_id(&self) -> String;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     async fn stop(&mut self) -> Result<()>;
[INFO] [stdout]    |              ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `StreamPusher` is never used
[INFO] [stdout]   --> src/core/transport.rs:60:11
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub trait StreamPusher: MediaTransport {
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `enabled` is never used
[INFO] [stdout]    --> src/process/analysis/mod.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl AnalysisManager {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn enabled(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream_manager` is never read
[INFO] [stdout]   --> src/process/transcode/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct TranscodeManager {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] 67 |     sessions: Arc<RwLock<HashMap<String, ActiveTranscodeSession>>>,
[INFO] [stdout] 68 |     stream_manager: Arc<StreamManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TranscodeManager` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_bitrate` is never used
[INFO] [stdout]    --> src/process/transcode/mod.rs:446:8
[INFO] [stdout]     |
[INFO] [stdout] 446 | pub fn parse_bitrate(bitrate: &str) -> Result<i64, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_resolution` is never used
[INFO] [stdout]    --> src/process/transcode/mod.rs:466:8
[INFO] [stdout]     |
[INFO] [stdout] 466 | pub fn parse_resolution(resolution: &str) -> Result<(u32, u32), String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `segment_wall_secs` and `output_dir` are never used
[INFO] [stdout]    --> src/server/hls/mod.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl HlsSession {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 199 |     fn segment_wall_secs(&self) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 553 |     pub fn output_dir(&self) -> &Path {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `list_streams` and `output_dir` are never used
[INFO] [stdout]    --> src/server/hls/mod.rs:924:12
[INFO] [stdout]     |
[INFO] [stdout] 577 | impl HlsServer {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 924 |     pub fn list_streams(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 953 |     pub fn output_dir(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sequence` is never read
[INFO] [stdout]   --> src/server/hls/m3u8.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Segment {
[INFO] [stdout]    |            ------- field in this struct
[INFO] [stdout] 13 |     /// Segment sequence number
[INFO] [stdout] 14 |     pub sequence: u64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Segment` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `set_ended` and `slot_filename` are never used
[INFO] [stdout]    --> src/server/hls/m3u8.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout]  43 | impl M3u8Generator {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn set_ended(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn slot_filename(sequence: u64, max_segments: usize) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `peer_addr` is never read
[INFO] [stdout]   --> src/server/hls/puller.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub struct HlsPuller {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 90 |     peer_addr: String,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `download_segment` is never used
[INFO] [stdout]    --> src/server/hls/puller.rs:811:10
[INFO] [stdout]     |
[INFO] [stdout] 811 | async fn download_segment(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_ts_segment_hls` is never used
[INFO] [stdout]     --> src/server/hls/puller.rs:1186:10
[INFO] [stdout]      |
[INFO] [stdout] 1186 | async fn process_ts_segment_hls(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TS_PACKET_SIZE` is never used
[INFO] [stdout]     --> src/server/hls/puller.rs:1231:7
[INFO] [stdout]      |
[INFO] [stdout] 1231 | const TS_PACKET_SIZE: usize = 188;
[INFO] [stdout]      |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `hard_reset` is never used
[INFO] [stdout]   --> src/server/hls/ts_muxer.rs:93:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | impl TsMuxer {
[INFO] [stdout]    | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn hard_reset(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prepare_h264_au_for_ts` is never used
[INFO] [stdout]    --> src/server/hls/ts_muxer.rs:277:4
[INFO] [stdout]     |
[INFO] [stdout] 277 | fn prepare_h264_au_for_ts(data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `starts_with_aud` is never used
[INFO] [stdout]    --> src/server/hls/ts_muxer.rs:290:4
[INFO] [stdout]     |
[INFO] [stdout] 290 | fn starts_with_aud(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `feed` is never used
[INFO] [stdout]    --> src/server/hls/ts_parser.rs:662:12
[INFO] [stdout]     |
[INFO] [stdout] 589 | impl TsStreamDecoder {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 662 |     pub fn feed(&mut self, chunk: &[u8]) -> Vec<(TsCodec, bool, Vec<u8>)> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `timeline` is never read
[INFO] [stdout]    --> src/server/http_flv/mod.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub struct HttpFlvSession {
[INFO] [stdout]     |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 216 |     timeline: FlvPlayTimeline,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `tag_timestamp_ms` and `frame_to_flv_with_timestamp` are never used
[INFO] [stdout]    --> src/server/http_flv/mod.rs:231:8
[INFO] [stdout]     |
[INFO] [stdout] 219 | impl HttpFlvSession {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 231 |     fn tag_timestamp_ms(&mut self, frame: &MediaFrame) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn frame_to_flv_with_timestamp(&mut self, frame: &MediaFrame) -> (Vec<u8>, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `has_stream` and `dispatch_subscribe` are never used
[INFO] [stdout]    --> src/server/http_flv/mod.rs:348:12
[INFO] [stdout]     |
[INFO] [stdout] 342 | impl HttpFlvServer {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 348 |     pub fn has_stream(&self, stream_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |     pub fn dispatch_subscribe(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `peer_addr` is never read
[INFO] [stdout]    --> src/server/http_flv/puller.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub struct FlvPuller {
[INFO] [stdout]     |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 112 |     peer_addr: String,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `peer_addr` is never read
[INFO] [stdout]   --> src/server/mp4/puller.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct Mp4Puller {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     peer_addr: String,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Undefined` is never constructed
[INFO] [stdout]   --> src/server/rtmp/amf0.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub enum Amf0Value {
[INFO] [stdout]    |          --------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 13 |     Undefined,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Amf0Value` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_bool` is never used
[INFO] [stdout]   --> src/server/rtmp/amf0.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Amf0Value {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn as_bool(&self) -> Option<bool> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_command` is never used
[INFO] [stdout]    --> src/server/rtmp/amf0.rs:283:8
[INFO] [stdout]     |
[INFO] [stdout] 283 | pub fn encode_command(name: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_number_prop` is never used
[INFO] [stdout]    --> src/server/rtmp/amf0.rs:312:8
[INFO] [stdout]     |
[INFO] [stdout] 312 | pub fn get_number_prop(val: &Amf0Value, key: &str) -> Option<f64> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtmpConnection` is never constructed
[INFO] [stdout]   --> src/server/rtmp/connection.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct RtmpConnection {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/rtmp/connection.rs:21:12
[INFO] [stdout]     |
[INFO] [stdout]  20 | impl RtmpConnection {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  21 |     pub fn new(stream: TcpStream) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  33 |     pub async fn server_handshake(&mut self, peer_addr: std::net::SocketAddr) -> Result<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  74 |     pub async fn client_handshake(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub async fn read(&mut self) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub async fn read_timeout(&mut self, timeout: std::time::Duration) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn parse_chunks(&mut self) -> Vec<RtmpMessage> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub async fn send_message(
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub async fn send_message_with_timestamp(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn handle_control_message(&mut self, payload: &[u8], msg_type: u8) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn set_chunk_size(&mut self, size: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn chunk_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn buf_len(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn into_inner(
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn writer_clone(&self) -> tokio::net::tcp::OwnedWriteHalf {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RtmpHandshakeState` is never used
[INFO] [stdout]    --> src/server/rtmp/connection.rs:197:10
[INFO] [stdout]     |
[INFO] [stdout] 197 | pub enum RtmpHandshakeState {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtmpHandshake` is never constructed
[INFO] [stdout]    --> src/server/rtmp/connection.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub struct RtmpHandshake {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `server`, `client`, `is_completed`, `server_handle_data`, and `client_perform` are never used
[INFO] [stdout]    --> src/server/rtmp/connection.rs:211:12
[INFO] [stdout]     |
[INFO] [stdout] 210 | impl RtmpHandshake {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 211 |     pub fn server(peer_addr: std::net::SocketAddr) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn client() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn is_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub async fn server_handle_data(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub async fn client_perform(&mut self, stream: &mut TcpStream) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `peer_addr` is never read
[INFO] [stdout]   --> src/server/rtmp/puller.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub struct RtmpPuller {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 69 |     peer_addr: String,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtmpPusher` is never constructed
[INFO] [stdout]   --> src/server/rtmp/pusher.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct RtmpPusher {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:39:12
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl RtmpPusher {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  39 |     pub fn new(stream_manager: Arc<StreamManager>, remote_url: &str, stream_id: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn set_tracks(&mut self, tracks: Vec<Track>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     fn set_status(&self, status: TransportStatus) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     fn is_paused(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     fn set_paused(&self, paused: bool) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     async fn rtmp_send_loop(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     async fn send_sequence_headers(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     async fn cache_and_send_h264_frame(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 341 |     async fn cache_and_send_h265_frame(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 390 |     async fn send_rtmp_message(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     async fn client_handshake(conn: &mut RtmpConnection) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_publish_command` is never used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:581:4
[INFO] [stdout]     |
[INFO] [stdout] 581 | fn build_publish_command(tx_id: f64, stream_name: &str, msg_stream_id: u32) -> Vec<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_result` is never used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:592:10
[INFO] [stdout]     |
[INFO] [stdout] 592 | async fn wait_for_result(conn: &mut RtmpConnection, tx_id: f64, command: &str) -> Result<()> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_create_stream` is never used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:627:10
[INFO] [stdout]     |
[INFO] [stdout] 627 | async fn wait_for_create_stream(conn: &mut RtmpConnection, tx_id: f64) -> Result<f64> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_publish_start` is never used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:661:10
[INFO] [stdout]     |
[INFO] [stdout] 661 | async fn wait_for_publish_start(conn: &mut RtmpConnection) -> Result<()> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `monitor_connection` is never used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:697:10
[INFO] [stdout]     |
[INFO] [stdout] 697 | async fn monitor_connection(mut reader: tokio::net::tcp::OwnedReadHalf) {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `CreateStream` is never constructed
[INFO] [stdout]   --> src/server/rtmp/session.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum SessionState {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 19 |     CreateStream,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SessionState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream_key`, `client_chunk_size`, `avc_header_sent`, `aac_header_sent`, and `metadata_sent` are never read
[INFO] [stdout]   --> src/server/rtmp/session.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct RtmpSession {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub stream_key: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub client_chunk_size: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub avc_header_sent: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 50 |     /// Whether we've sent the AAC sequence header
[INFO] [stdout] 51 |     pub aac_header_sent: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 52 |     /// Whether we've sent onMetaData
[INFO] [stdout] 53 |     pub metadata_sent: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_set_chunk_size` and `next_transaction_id` are never used
[INFO] [stdout]    --> src/server/rtmp/session.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout]  70 | impl RtmpSession {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn handle_set_chunk_size(&mut self, payload: &[u8]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn next_transaction_id(&mut self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_metadata` is never used
[INFO] [stdout]    --> src/server/rtmp/session.rs:349:8
[INFO] [stdout]     |
[INFO] [stdout] 349 | pub fn build_metadata(width: u32, height: u32, stream_name: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `build_rtp_packet`, `wrap_interleaved`, and `build_setup_udp_response` are never used
[INFO] [stdout]    --> src/server/rtsp/mod.rs:461:12
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl RtspServer {
[INFO] [stdout]     | --------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn build_rtp_packet(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 479 |     pub fn wrap_interleaved(data: &[u8], channel: u8) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     fn build_setup_udp_response(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream_manager` is never read
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct RtspClientSession {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     stream_manager: Arc<StreamManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rtcp_socket` and `server_rtcp_addr` are never read
[INFO] [stdout]   --> src/server/rtsp/client_session.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | struct TrackUdpTransport {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 29 |     rtp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout] 30 |     rtcp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 31 |     server_rtp_addr: SocketAddr,
[INFO] [stdout] 32 |     server_rtcp_addr: SocketAddr,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/rtsp/client_session.rs:107:18
[INFO] [stdout]     |
[INFO] [stdout]  35 | impl RtspClientSession {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub async fn send_rtp_over_udp_track(&self, track_idx: usize, data: &[u8]) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn is_udp_configured(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub async fn send_request_with_body(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 433 |     pub fn remote_url(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 437 |     pub fn transport_mode(&self) -> TransportMode {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 441 |     pub async fn start_keepalive(&mut self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 471 |     pub async fn write_all(&mut self, data: &[u8]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 499 |     pub fn wrap_interleaved(data: &[u8], channel: u8) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 503 |     pub fn parse_interleaved(data: &[u8]) -> Option<(u8, &[u8])> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/rtsp/common.rs:153:18
[INFO] [stdout]     |
[INFO] [stdout] 152 | impl RtspCommon {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 153 |     pub async fn read_response(reader: &mut tokio::net::tcp::OwnedReadHalf) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub fn parse_interleaved(data: &[u8]) -> Option<(u8, &[u8])> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn convert_timestamp_to_rtp(frame_timestamp_ms: u64, clock_rate: u32) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn convert_rtp_timestamp_to_ms(rtp_timestamp: u32, clock_rate: u32) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 471 |     pub async fn write_request(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 481 |     pub async fn write_response(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 490 |     pub fn parse_rtp_header(data: &[u8]) -> Option<RtpHeader> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 553 |     pub fn build_rtcp_rr(ssrc: u32, last_seq: u16, jitter: u32, lsr: u32, dlsr: u32) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 570 |     pub fn build_rtcp_sr(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 604 |     pub const H264_NAL_SPS: u8 = 7;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 605 |     pub const H264_NAL_PPS: u8 = 8;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 606 |     pub const H264_NAL_IDR: u8 = 5;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 607 |     pub const H264_NAL_NON_IDR: u8 = 1;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 608 |     pub const H264_NAL_SEI: u8 = 6;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 612 |     pub fn parse_h264_nal_units(payload: &[u8]) -> (Vec<Vec<u8>>, bool, bool, bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 824 |     pub fn h264_nal_to_rtp_payload(nal_unit: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 833 |     pub fn create_h264_keyframe_rtp_packets(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 858 |     pub fn h264_nal_units_to_rtp_payload(nal_units: &[Vec<u8>]) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtpHeader` is never constructed
[INFO] [stdout]    --> src/server/rtsp/common.rs:948:12
[INFO] [stdout]     |
[INFO] [stdout] 948 | pub struct RtpHeader {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UdpTransport` is never constructed
[INFO] [stdout]    --> src/server/rtsp/common.rs:961:12
[INFO] [stdout]     |
[INFO] [stdout] 961 | pub struct UdpTransport {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new_tcp` and `new_udp` are never used
[INFO] [stdout]    --> src/server/rtsp/common.rs:970:12
[INFO] [stdout]     |
[INFO] [stdout] 969 | impl UdpTransport {
[INFO] [stdout]     | ----------------- associated functions in this implementation
[INFO] [stdout] 970 |     pub fn new_tcp() -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 980 |     pub fn new_udp(client_rtp: u16, client_rtcp: u16, server_rtp: u16, server_rtcp: u16) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `read_request`, `send_rtp_packet`, `send_interleaved`, and `close` are never used
[INFO] [stdout]    --> src/server/rtsp/connection.rs:43:18
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl RtspConnection {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub async fn read_request(&mut self) -> Result<Option<RtspRequest>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub async fn send_rtp_packet(&self, data: &[u8]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub async fn send_interleaved(&self, data: &[u8], channel: u8) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub async fn close(&mut self) {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `parse`, `get_header`, and `cseq` are never used
[INFO] [stdout]    --> src/server/rtsp/messages.rs:53:12
[INFO] [stdout]     |
[INFO] [stdout]  12 | impl RtspRequest {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  53 |     pub fn parse(input: &str) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn get_header(&self, key: &str) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn cseq(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_header` and `cseq` are never used
[INFO] [stdout]    --> src/server/rtsp/messages.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout] 122 | impl RtspResponse {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn get_header(&self, key: &str) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn cseq(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `peer_addr` is never read
[INFO] [stdout]   --> src/server/rtsp/puller.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct RtspPuller {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     peer_addr: String,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `vps_cache`, and `peer_addr` are never read
[INFO] [stdout]   --> src/server/rtsp/pusher.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct RtspPusher {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 20 |     id: PusherId,
[INFO] [stdout]    |     ^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     vps_cache: Arc<parking_lot::RwLock<Option<Vec<u8>>>>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     peer_addr: String,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_paused`, `set_paused`, and `is_running` are never used
[INFO] [stdout]    --> src/server/rtsp/pusher.rs:70:8
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl RtspPusher {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  70 |     fn is_paused(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  74 |     fn set_paused(&self, paused: bool) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     pub fn is_running(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_sdp_for_tracks` is never used
[INFO] [stdout]    --> src/server/rtsp/sdp_builder.rs:230:8
[INFO] [stdout]     |
[INFO] [stdout] 230 | pub fn build_sdp_for_tracks(tracks: &[Track]) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_sdp_with_codec_params` is never used
[INFO] [stdout]    --> src/server/rtsp/sdp_builder.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn build_sdp_with_codec_params(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sdp_generated` is never read
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct RtspServerSession {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 43 |     sdp_generated: Arc<parking_lot::RwLock<bool>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rtcp_socket` and `client_rtcp_addr` are never read
[INFO] [stdout]   --> src/server/rtsp/server_session.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | struct UdpTrackTransport {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 48 |     rtp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout] 49 |     rtcp_socket: Arc<tokio::net::UdpSocket>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 50 |     client_rtp_addr: SocketAddr,
[INFO] [stdout] 51 |     client_rtcp_addr: SocketAddr,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UdpTrackTransport` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]     --> src/server/rtsp/server_session.rs:252:12
[INFO] [stdout]      |
[INFO] [stdout]   54 | impl RtspServerSession {
[INFO] [stdout]      | ---------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  252 |     pub fn is_udp_configured(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  256 |     async fn send_rtp_over_udp_track(&self, data: &[u8], track_id: u8) -> Result<()> {
[INFO] [stdout]      |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  266 |     pub fn peer_addr(&self) -> &SocketAddr {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  270 |     pub fn session(&self) -> &RtspSessionState {
[INFO] [stdout]      |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  274 |     pub fn writer(&self) -> &ChannelSocketWriter {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  278 |     pub async fn send_response(&mut self, response: &RtspResponse) -> Result<()> {
[INFO] [stdout]      |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  282 |     pub async fn send_rtp_packet(&self, data: &[u8]) -> Result<()> {
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  374 |     fn extract_h264_sps_pps_from_payload(payload: &[u8]) -> (Option<Vec<u8>>, Option<Vec<u8>>) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  697 |     fn is_h264_keyframe(payload: &[u8]) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  714 |     fn video_codec_for_track(&self, track_id: u8) -> CodecType {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1148 |     pub async fn close(&mut self) {
[INFO] [stdout]      |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1153 |     pub fn get_sps(&self) -> Option<Vec<u8>> {
[INFO] [stdout]      |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1157 |     pub fn get_pps(&self) -> Option<Vec<u8>> {
[INFO] [stdout]      |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1161 |     pub fn is_sdp_ready(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1171 |     pub fn build_sdp_with_codec_params(&self, stream_id: &str) -> String {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `buffer` is never read
[INFO] [stdout]   --> src/server/socket_transport.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SocketReader<R> {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 10 |     reader: R,
[INFO] [stdout] 11 |     buffer: BytesMut,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/server/socket_transport.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl<R: AsyncReadExt + Unpin> SocketReader<R> {
[INFO] [stdout]    | --------------------------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub fn with_timeout(mut self, timeout: Duration) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub async fn read_buf(&mut self) -> Result<usize> {
[INFO] [stdout]    |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub async fn read_until(&mut self, delimiter: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]    |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub async fn read_to_string(&mut self) -> Result<String> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub fn buffer(&self) -> &BytesMut {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 94 |     pub fn buffer_mut(&mut self) -> &mut BytesMut {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn into_inner(self) -> R {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SocketWriter` is never constructed
[INFO] [stdout]    --> src/server/socket_transport.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct SocketWriter<W> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server/socket_transport.rs:109:12
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl<W: AsyncWriteExt + Unpin> SocketWriter<W> {
[INFO] [stdout]     | ---------------------------------------------- associated items in this implementation
[INFO] [stdout] 109 |     pub fn new(writer: W) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn with_timeout(mut self, timeout: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub async fn write(&mut self, buf: &[u8]) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub async fn write_all(&mut self, buf: &[u8]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub async fn flush(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub async fn write_and_flush(&mut self, buf: &[u8]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn into_inner(self) -> W {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SocketTransport` is never constructed
[INFO] [stdout]    --> src/server/socket_transport.rs:156:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub struct SocketTransport<R, W> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_timeout`, `reader`, `writer`, and `into_inner` are never used
[INFO] [stdout]    --> src/server/socket_transport.rs:162:12
[INFO] [stdout]     |
[INFO] [stdout] 161 | impl<R: AsyncReadExt + Unpin, W: AsyncWriteExt + Unpin> SocketTransport<R, W> {
[INFO] [stdout]     | ----------------------------------------------------------------------------- associated items in this implementation
[INFO] [stdout] 162 |     pub fn new(reader: R, writer: W) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn with_timeout(mut self, timeout: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn reader(&mut self) -> &mut SocketReader<R> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn writer(&mut self) -> &mut SocketWriter<W> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn into_inner(self) -> (R, W) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BufferedSocketReader` is never constructed
[INFO] [stdout]    --> src/server/socket_transport.rs:188:12
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub struct BufferedSocketReader<R> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `read_message`, `read_message_string`, and `into_inner` are never used
[INFO] [stdout]    --> src/server/socket_transport.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 193 | impl<R: AsyncReadExt + Unpin> BufferedSocketReader<R> {
[INFO] [stdout]     | ----------------------------------------------------- associated items in this implementation
[INFO] [stdout] 194 |     pub fn new(reader: R, delimiter: &[u8]) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub async fn read_message(&mut self) -> Result<Option<Vec<u8>>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub async fn read_message_string(&mut self) -> Result<Option<String>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     pub fn into_inner(self) -> R {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `into_inner` is never used
[INFO] [stdout]    --> src/server/socket_transport.rs:243:12
[INFO] [stdout]     |
[INFO] [stdout] 227 | impl ChannelSocketWriter {
[INFO] [stdout]     | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub fn into_inner(self) -> Sender<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_rtp_stale_in_gop` is never used
[INFO] [stdout]   --> src/server/webrtc/h264_util.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn is_rtp_stale_in_gop(curr: u64, prev: u64) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `h264_payload_type_from_sdp` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h264.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn h264_payload_type_from_sdp(sdp: &str) -> Option<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_video_media_description` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h264.rs:54:4
[INFO] [stdout]    |
[INFO] [stdout] 54 | fn find_video_media_description(sdp: &SessionDescription) -> Option<&MediaDescription> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_video_media_description` is never used
[INFO] [stdout]   --> src/server/webrtc/sdp_h265.rs:40:4
[INFO] [stdout]    |
[INFO] [stdout] 40 | fn find_video_media_description(sdp: &SessionDescription) -> Option<&MediaDescription> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Lagged` is never constructed
[INFO] [stdout]    --> src/server/webrtc/player.rs:785:5
[INFO] [stdout]     |
[INFO] [stdout] 783 | enum RecvCoalesced {
[INFO] [stdout]     |      ------------- variant in this enum
[INFO] [stdout] 784 |     Frame(MediaFrame, u64),
[INFO] [stdout] 785 |     Lagged(u64),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/server/rtmp/pusher.rs:189:25
[INFO] [stdout]     |
[INFO] [stdout] 189 | /                         Self::send_rtmp_message(
[INFO] [stdout] 190 | |                             &mut writer,
[INFO] [stdout] 191 | |                             0x08,
[INFO] [stdout] 192 | |                             msg_stream_id,
[INFO] [stdout] ...   |
[INFO] [stdout] 198 | |                         .await;
[INFO] [stdout]     | |______________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 189 |                         let _ = Self::send_rtmp_message(
[INFO] [stdout]     |                         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `add_track` is never used
[INFO] [stdout]   --> src/core/mod.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 79 | impl Stream {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] 80 |     pub fn add_track(&mut self, track: Track) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Paused` is never constructed
[INFO] [stdout]   --> src/core/mod.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub enum StreamStatus {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 90 |     Paused,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StreamStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_error` and `is_terminated` are never used
[INFO] [stdout]    --> src/core/mod.rs:122:12
[INFO] [stdout]     |
[INFO] [stdout]  95 | impl StreamStatus {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn is_error(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn is_terminated(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Playing` and `Paused` are never constructed
[INFO] [stdout]    --> src/core/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub enum PlaybackStatus {
[INFO] [stdout]     |          -------------- variants in this enum
[INFO] [stdout] 133 |     Idle,
[INFO] [stdout] 134 |     Playing,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 135 |     Paused,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PlaybackStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_playing` is never used
[INFO] [stdout]    --> src/core/mod.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl PlaybackStatus {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn is_playing(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Pull` and `Push` are never constructed
[INFO] [stdout]    --> src/core/mod.rs:180:5
[INFO] [stdout]     |
[INFO] [stdout] 179 | pub enum StreamSinkMode {
[INFO] [stdout]     |          -------------- variants in this enum
[INFO] [stdout] 180 |     Pull,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 181 |     Push,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `StreamSinkMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str` and `description` are never used
[INFO] [stdout]    --> src/core/mod.rs:185:12
[INFO] [stdout]     |
[INFO] [stdout] 184 | impl StreamSinkMode {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] 185 |     pub fn as_str(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn description(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Idle`, `Connecting`, `Playing`, `Paused`, `Error`, and `Stopped` are never constructed
[INFO] [stdout]    --> src/core/mod.rs:202:5
[INFO] [stdout]     |
[INFO] [stdout] 201 | pub enum ReceiverStatus {
[INFO] [stdout]     |          -------------- variants in this enum
[INFO] [stdout] 202 |     Idle,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 203 |     Connecting,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 204 |     Playing,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 205 |     Paused,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 206 |     Error(String),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 207 |     Stopped,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ReceiverStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str` and `description` are never used
[INFO] [stdout]    --> src/core/mod.rs:211:12
[INFO] [stdout]     |
[INFO] [stdout] 210 | impl ReceiverStatus {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] 211 |     pub fn as_str(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn description(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/core/mod.rs:238:9
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub struct StreamReceiver {
[INFO] [stdout]     |            -------------- fields in this struct
[INFO] [stdout] 238 |     pub id: ReceiverId,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 239 |     pub stream_id: StreamId,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 240 |     pub mode: StreamSinkMode,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 241 |     pub protocol: StreamProtocol,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 242 |     pub client_addr: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 243 |     pub status: ReceiverStatus,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 244 |     pub push_addr: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `StreamReceiver` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_client_addr`, and `with_push_addr` are never used
[INFO] [stdout]    --> src/core/mod.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout] 247 | impl StreamReceiver {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 248 |     pub fn new(stream_id: &str, mode: StreamSinkMode, protocol: StreamProtocol) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn with_client_addr(mut self, addr: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub fn with_push_addr(mut self, addr: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `extra_params` is never read
[INFO] [stdout]    --> src/core/mod.rs:285:9
[INFO] [stdout]     |
[INFO] [stdout] 280 | pub struct Track {
[INFO] [stdout]     |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub extra_params: HashMap<String, String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Track` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_extra_params` is never used
[INFO] [stdout]    --> src/core/mod.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl Track {
[INFO] [stdout]     | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn with_extra_params(mut self, key: &str, value: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_pt` and `mime_type` are never used
[INFO] [stdout]    --> src/core/mod.rs:336:12
[INFO] [stdout]     |
[INFO] [stdout] 335 | impl CodecType {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 336 |     pub fn from_pt(pt: u8) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 348 |     pub fn mime_type(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtpPacket` is never constructed
[INFO] [stdout]    --> src/core/mod.rs:410:12
[INFO] [stdout]     |
[INFO] [stdout] 410 | pub struct RtpPacket {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max_size_mb` and `max_files` are never read
[INFO] [stdout]    --> src/core/config.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub struct LogConfig {
[INFO] [stdout]     |            --------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub max_size_mb: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 116 |     pub max_files: usize,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LogConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `LiveCoalesce` is never constructed
[INFO] [stdout]   --> src/core/dispatch.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub enum DispatchPolicy {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 27 |     /// RTMP / HTTP-FLV: live edge, coalesce video bursts, audio in order.
[INFO] [stdout] 28 |     LiveCoalesce,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DispatchPolicy` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `policy`, `set_cursor`, `advance_cursor`, `cursor_media_lag_ms`, and `recv_live_edge_batch` are never used
[INFO] [stdout]    --> src/core/dispatch.rs:96:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl DispatchReader {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn policy(&self) -> DispatchPolicy {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn set_cursor(&mut self, cursor: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn advance_cursor(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn cursor_media_lag_ms(&self) -> Option<u64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 483 |     pub async fn recv_live_edge_batch(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `iter_idr_seqs_rev` and `find_frame_rev` are never used
[INFO] [stdout]    --> src/core/frame_ring.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl FrameRing {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn iter_idr_seqs_rev(&self) -> impl Iterator<Item = u64> + '_ {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn find_frame_rev(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `recv_coalesced_play_frame` is never used
[INFO] [stdout]    --> src/core/live_play.rs:155:14
[INFO] [stdout]     |
[INFO] [stdout] 155 | pub async fn recv_coalesced_play_frame(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `update_hls` is never used
[INFO] [stdout]    --> src/core/metrics.rs:289:12
[INFO] [stdout]     |
[INFO] [stdout] 181 | impl MetricsRegistry {
[INFO] [stdout]     | -------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn update_hls(stream_id: &str, update: HlsMetricsSnapshot) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `StreamSink` is never used
[INFO] [stdout]   --> src/core/protocol.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait StreamSink: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `StreamSource` is never used
[INFO] [stdout]   --> src/core/protocol.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub trait StreamSource: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ProtocolType` is never used
[INFO] [stdout]   --> src/core/protocol.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum ProtocolType {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `as_str` and `from_str` are never used
[INFO] [stdout]   --> src/core/protocol.rs:40:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | impl ProtocolType {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 40 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn from_str(s: &str) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProtocolInfo` is never constructed
[INFO] [stdout]   --> src/core/protocol.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub struct ProtocolInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProtocolRegistry` is never constructed
[INFO] [stdout]   --> src/core/protocol.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 82 | pub struct ProtocolRegistry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `register`, `list`, and `is_enabled` are never used
[INFO] [stdout]    --> src/core/protocol.rs:87:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl ProtocolRegistry {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  87 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn register(&mut self, info: ProtocolInfo) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn list(&self) -> &[ProtocolInfo] {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn is_enabled(&self, protocol: ProtocolType) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `PullerId` is never used
[INFO] [stdout]  --> src/core/pusher.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub type PullerId = String;
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PusherInfo` is never constructed
[INFO] [stdout]   --> src/core/pusher.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct PusherInfo {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PullerInfo` is never constructed
[INFO] [stdout]   --> src/core/pusher.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct PullerInfo {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PusherConfig` is never constructed
[INFO] [stdout]   --> src/core/pusher.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct PusherConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/pusher.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl PusherConfig {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 34 |     pub fn new(stream_id: &str, remote_url: &str, protocol: StreamProtocol) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PullerConfig` is never constructed
[INFO] [stdout]   --> src/core/pusher.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct PullerConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/pusher.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl PullerConfig {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 50 |     pub fn new(stream_id: &str, remote_url: &str, protocol: StreamProtocol) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PusherState` is never constructed
[INFO] [stdout]   --> src/core/pusher.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct PusherState {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PullerState` is never constructed
[INFO] [stdout]   --> src/core/pusher.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub struct PullerState {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PushPullManager` is never constructed
[INFO] [stdout]   --> src/core/pusher.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct PushPullManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/pusher.rs:81:12
[INFO] [stdout]     |
[INFO] [stdout]  80 | impl PushPullManager {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  81 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub async fn register_pusher(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub async fn unregister_pusher(&self, pusher_id: &PusherId) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub async fn update_pusher_status(&self, pusher_id: &PusherId, status: TransportStatus) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub async fn get_pusher_info(&self, pusher_id: &PusherId) -> Option<PusherInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub async fn list_pushers(&self) -> Vec<PusherInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub async fn register_puller(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub async fn unregister_puller(&self, puller_id: &PullerId) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub async fn update_puller_status(&self, puller_id: &PullerId, status: TransportStatus) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn get_puller_info(&self, puller_id: &PullerId) -> Option<PullerInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub async fn list_pullers(&self) -> Vec<PullerInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `receivers` is never read
[INFO] [stdout]   --> src/core/stream_hub.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct StreamHub {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     receivers: RwLock<HashMap<ReceiverId, StreamReceiver>>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/stream_hub.rs:25:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl StreamHub {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout]  25 |     pub fn new(stream_id: &str) -> Arc<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub(crate) fn add_receiver(&self, receiver: StreamReceiver) -> StreamReceiver {
[INFO] [stdout]     |                   ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub(crate) fn remove_receiver(&self, receiver_id: &ReceiverId) -> Option<StreamReceiver> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub(crate) fn get_receiver(&self, receiver_id: &ReceiverId) -> Option<StreamReceiver> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub(crate) fn list_receiver_ids(&self) -> Vec<ReceiverId> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub(crate) fn list_receivers(&self) -> Vec<StreamReceiver> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub(crate) fn set_receiver_status(
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub(crate) fn current_publisher(&self) -> Option<String> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn latest_playable_idr_frame<F>(&self, mut is_match: F) -> Option<MediaFrame>
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn find_frame_rev(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream_id`, `source`, `protocol`, and `pull_url` are never read
[INFO] [stdout]   --> src/core/stream_manager.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |     StreamCreated {
[INFO] [stdout]    |     ------------- fields in this variant
[INFO] [stdout] 33 |         stream_id: StreamId,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 34 |         source: StreamSourceMode,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 35 |         protocol: StreamProtocol,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 36 |         pull_url: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StreamEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream_id` is never read
[INFO] [stdout]   --> src/core/stream_manager.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 39 |     StreamRemoved {
[INFO] [stdout]    |     ------------- field in this variant
[INFO] [stdout] 40 |         stream_id: StreamId,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StreamEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream_id`, `old_status`, and `new_status` are never read
[INFO] [stdout]   --> src/core/stream_manager.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 43 |     StreamStatusChanged {
[INFO] [stdout]    |     ------------------- fields in this variant
[INFO] [stdout] 44 |         stream_id: StreamId,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 45 |         old_status: StreamStatus,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 46 |         new_status: StreamStatus,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StreamEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream_id` and `publisher_id` are never read
[INFO] [stdout]   --> src/core/stream_manager.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 49 |     PublisherAcquired {
[INFO] [stdout]    |     ----------------- fields in this variant
[INFO] [stdout] 50 |         stream_id: StreamId,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 51 |         publisher_id: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StreamEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream_id` and `publisher_id` are never read
[INFO] [stdout]   --> src/core/stream_manager.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 54 |     PublisherReleased {
[INFO] [stdout]    |     ----------------- fields in this variant
[INFO] [stdout] 55 |         stream_id: StreamId,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 56 |         publisher_id: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StreamEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `ReceiverCreated`, `ReceiverRemoved`, and `ReceiverStatusChanged` are never constructed
[INFO] [stdout]   --> src/core/stream_manager.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub enum StreamEvent {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 59 |     ReceiverCreated {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     ReceiverRemoved {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     ReceiverStatusChanged {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StreamEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `StreamEventReceiver` is never used
[INFO] [stdout]   --> src/core/stream_manager.rs:81:10
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub type StreamEventReceiver = broadcast::Receiver<StreamEvent>;
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_active` is never used
[INFO] [stdout]   --> src/core/stream_manager.rs:93:12
[INFO] [stdout]    |
[INFO] [stdout] 88 | impl PullSessionHandle {
[INFO] [stdout]    | ---------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn new_active() -> Arc<Self> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/core/stream_manager.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | impl StreamManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn subscribe_events(&self) -> StreamEventReceiver {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn is_pull_stop_requested(&self, stream_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 536 |     pub fn set_playback_status(&self, stream_id: &str, status: PlaybackStatus) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 552 |     pub fn set_created(&self, stream_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 564 |     pub fn set_paused(&self, stream_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 572 |     pub fn set_playback_idle(&self, stream_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 576 |     pub fn set_playback_playing(&self, stream_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 580 |     pub fn set_playback_paused(&self, stream_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 645 |     pub fn current_publisher(&self, stream_id: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 650 |     pub fn create_receiver(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 683 |     pub fn create_pull_receiver(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 717 |     pub fn create_push_receiver(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 751 |     pub fn remove_receiver(&self, receiver_id: &ReceiverId) -> Option<StreamReceiver> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 772 |     pub fn get_receiver(&self, receiver_id: &ReceiverId) -> Option<StreamReceiver> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 779 |     pub fn list_receivers(&self) -> Vec<ReceiverId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 787 |     pub fn list_receivers_for_stream(&self, stream_id: &StreamId) -> Vec<StreamReceiver> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 793 |     pub fn set_receiver_status(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 917 |     pub fn update_stream_status(&self, stream_id: &StreamId, status: StreamStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/tester.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl StreamTester {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 15 |     pub fn new(stream_manager: Arc<StreamManager>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `media_timestamp_delta_ms` is never used
[INFO] [stdout]   --> src/core/timestamp.rs:22:8
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub fn media_timestamp_delta_ms(prev: u64, curr: u64) -> u64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `flv_timestamp_ms` is never used
[INFO] [stdout]   --> src/core/timestamp.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn flv_timestamp_ms(codec: crate::core::CodecType, raw: u64) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Connected` and `Paused` are never constructed
[INFO] [stdout]   --> src/core/transport.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum TransportStatus {
[INFO] [stdout]    |          --------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 11 |     Connected,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     Paused,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TransportStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_active` is never used
[INFO] [stdout]   --> src/core/transport.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl TransportStatus {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `protocol`, `status`, `peer_addr`, `stream_id`, and `stop` are never used
[INFO] [stdout]   --> src/core/transport.rs:43:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub trait MediaTransport: Send + Sync + 'static {
[INFO] [stdout]    |           -------------- methods in this trait
[INFO] [stdout] 43 |     fn protocol(&self) -> StreamProtocol;
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 44 |     fn status(&self) -> TransportStatus;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 45 |     fn peer_addr(&self) -> String;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 46 |     fn stream_id(&self) -> String;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     async fn stop(&mut self) -> Result<()>;
[INFO] [stdout]    |              ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `StreamPusher` is never used
[INFO] [stdout]   --> src/core/transport.rs:60:11
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub trait StreamPusher: MediaTransport {
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hevc_sprop_from_nals` is never used
[INFO] [stdout]    --> src/core/video_codec.rs:536:8
[INFO] [stdout]     |
[INFO] [stdout] 536 | pub fn hevc_sprop_from_nals(vps: &[u8], sps: &[u8], pps: &[u8]) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `enabled` is never used
[INFO] [stdout]    --> src/process/analysis/mod.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl AnalysisManager {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn enabled(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream_manager` is never read
[INFO] [stdout]   --> src/process/transcode/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct TranscodeManager {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] 67 |     sessions: Arc<RwLock<HashMap<String, ActiveTranscodeSession>>>,
[INFO] [stdout] 68 |     stream_manager: Arc<StreamManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TranscodeManager` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_bitrate` is never used
[INFO] [stdout]    --> src/process/transcode/mod.rs:446:8
[INFO] [stdout]     |
[INFO] [stdout] 446 | pub fn parse_bitrate(bitrate: &str) -> Result<i64, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[WARN] too many lines in the log, truncating it
