rustrtc 0.3.80

A high-performance real-time communication library — WebRTC, RTP/SRTP, T.38 Fax, and RTP Latching
Documentation
## Summary

Fix ICE-TCP media transport and WHEP/answerer outbound RTP for browsers that connect over `TCP/TLS/RTP/SAVPF`.

Validated with Monibuca WHEP pull (ICE-TCP only): DTLS completes, SRTP flows, browser `framesDecoded > 0`.

### Changes

1. **ICE TCP read/write split** (`transports/ice/mod.rs`)
   - Split `TcpStream` into owned read/write halves so outbound DTLS/SRTP writes do not block the read loop on the same mutex.
   - RFC 4571 framing via `tcp_write_all` for STUN/DTLS/RTP on TCP.

2. **DTLS flight batching over TCP** (`transports/ice/conn.rs`, `transports/dtls/mod.rs`)
   - `send_dtls_record_batch`: frame multiple DTLS records and write in one syscall so Chrome sees complete handshake flights.
   - Unbounded handshake channel to avoid dropping inbound records during setup.

3. **abs-send-time extension non-fatal** (`transports/rtp.rs`)
   - If `set_extension` fails (small payloads), log and continue sending RTP instead of aborting the whole packet.

4. **WHEP answerer transceiver reuse** (`peer_connection.rs`)
   - `add_track_with_stream_id` reuses the offer-created transceiver (with MID) instead of adding a second same-kind transceiver.

5. **DTLS runner lifecycle** (`peer_connection.rs`)
   - Spawn DTLS handshake loop before flushing buffered packets to avoid try_send races.

6. **ICE-TCP nomination / keepalive** (`transports/ice/mod.rs`)
   - `nudge_passive_tcp_nomination` for controlled peers with inbound passive TCP.
   - Longer disconnect threshold when TCP is selected (recv-only WHEP may not send STUN immediately).

## Test plan

- [x] `cargo build`
- [x] `cargo test --lib` (396 tests)
- [x] Manual: Monibuca WHEP ICE-TCP pull, Chrome `framesDecoded > 0`

## Related

Monibuca notes: `docs/webrtc-ice-tcp-whep.md` in [Monibuca/v6-dev](https://github.com/Monibuca/Enterprise) (vendor path `third_party/rustrtc`).