Expand description
Sans-IO RTMP 1.0 ingest (publish) session engine — Adobe Real-Time Messaging Protocol.
Spec grounding: Adobe RTMP 1.0, transcribed at
docs/rtmp.md (handshake §5.2, chunk stream §5.3,
protocol control messages §5.4, message format §6, message types §7.1,
command messages §7.2). AMF0 encoding (used by command/data messages) is
[AMF0] per that same document’s provenance section.
§Scope of this release
This crate implements two roles, both publish (ingest) only:
- An ingest server (
server::ServerSession): a broadcaster pushes a stream in viaconnect/createStream/publish; this engine drives the handshake and session state machine and hands back typed audio/video/ metadata messages as FLV bytes. - A publish client (
client::ClientSession): the other end of that same exchange — it drives the client-side handshake, auto-advancesconnect→createStream→publish, and offerssend_audio/send_video/send_metadataonce publishing. It has notokiosocket adapter of its own (unlikeserver::ServerSession, which gets one via featuretokio) — callers drive its sans-IOhandle_data/startdirectly over their own transport.
An egress (play) role — pulling a stream, on either the client or server side — is on the roadmap but not implemented yet.
§The sans-IO contract
No sockets live in the core. You drive the engine with bytes and read back
bytes + typed events: feed inbound bytes in, get outbound bytes to write
plus a stream of typed events out — mirroring the
rtsp_runtime sans-IO client/server split
in this same workspace.
An optional tokio socket adapter (feature tokio) drives real
connections over this same core.
§Module map
handshake— the C0/C1/C2 + S0/S1/S2 handshake (§5.2).chunk— the chunk stream: basic header, message header (4fmtvariants), extended timestamp (§5.3).message— RTMP message assembly from chunks, protocol control messages (§5.4), and the message type catalogue (§6, §7.1).amf0— AMF0 value encoding/decoding, used by command and data messages ([AMF0]).server— the ingest server session state machine (connect→createStream→publish, §7.2).client— the publish client session state machine, the other end of that same exchange (issue #744).io(featuretokio) — the async socket adapter driving the sans-IO server session over a realtokio::net::TcpStream. There is no equivalent client adapter;client::ClientSessionis sans-IO only.error— theRtmpErrortype.
The handshake/chunk/message/amf0/server sans-IO engine and the tokio
adapter (feature tokio) are all implemented (#738 Tasks 1-9); the
publish client engine (#744) is implemented on top of the same core.
Re-exports§
pub use error::RtmpError;
Modules§
- amf0
- AMF0 (Action Message Format 0) value encoding/decoding, used by RTMP command and data messages.
- chunk
- RTMP chunk stream — basic header, message header, extended timestamp (Adobe RTMP 1.0 §5.3).
- client
- RTMP client session engine —
connect→createStream→publish(Adobe RTMP 1.0 §7.2,NetConnection/NetStreamcommands). - error
- Error type for the RTMP ingest session engine.
- handshake
- RTMP handshake — C0/C1/C2 and S0/S1/S2 (Adobe RTMP 1.0 §5.2).
- io
tokio - Async
tokiosocket adapter driving the sans-IO ingest server session over a realtokio::net::TcpStream— the Layer-2 adapter (seedocs/rtmp.md§ Layer-2 adapter; mirrors thertsp_runtime::iotokio adapter shape in this same workspace). - message
- RTMP message assembly from chunks, protocol control messages, and the message type catalogue (Adobe RTMP 1.0 §5.4, §6, §7.1).
- server
- RTMP ingest server session state machine —
connect→createStream→publish(Adobe RTMP 1.0 §7.2,NetConnection/NetStreamcommands).
Constants§
- RTMP_
VERSION - The Adobe RTMP specification version this engine implements.