Skip to main content

Crate rtmp_runtime

Crate rtmp_runtime 

Source
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 via connect/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-advances connectcreateStreampublish, and offers send_audio/send_video/send_metadata once publishing. It has no tokio socket adapter of its own (unlike server::ServerSession, which gets one via feature tokio) — callers drive its sans-IO handle_data/start directly 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 (4 fmt variants), 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 (connectcreateStreampublish, §7.2).
  • client — the publish client session state machine, the other end of that same exchange (issue #744).
  • io (feature tokio) — the async socket adapter driving the sans-IO server session over a real tokio::net::TcpStream. There is no equivalent client adapter; client::ClientSession is sans-IO only.
  • error — the RtmpError type.

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 — connectcreateStreampublish (Adobe RTMP 1.0 §7.2, NetConnection/NetStream commands).
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).
iotokio
Async tokio socket adapter driving the sans-IO ingest server session over a real tokio::net::TcpStream — the Layer-2 adapter (see docs/rtmp.md § Layer-2 adapter; mirrors the rtsp_runtime::io tokio 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 — connectcreateStreampublish (Adobe RTMP 1.0 §7.2, NetConnection/NetStream commands).

Constants§

RTMP_VERSION
The Adobe RTMP specification version this engine implements.