RTSP 1.0 sessions, authenticated media playback and publishing
moon new camera-client
cd camera-client
moon add wrMamba/moonrtsp@0.1.1import {
"moonbitlang/core/async",
"wrMamba/moonrtsp" @rtsp,
"wrMamba/moonrtsp/net" @net,
}
supported_targets = "native+wasm"
pkgtype(kind: "executable")moon run cmd/moonrtsp --target wasm -- publish-multi rtsp://127.0.0.1:8554/demo tcp 3000moon run cmd/moonrtsp --target wasm -- inspect rtsp://127.0.0.1:8554/demo
moon run cmd/moonrtsp --target wasm -- play rtsp://127.0.0.1:8554/demo tcp 20
moon run cmd/moonrtsp --target wasm -- play rtsp://127.0.0.1:8554/demo udp 20$env:MOONRTSP_USER = "camera-user"
$env:MOONRTSP_PASSWORD = "your-local-password"
moon run cmd/moonrtsp --target wasm -- inspect rtsp://127.0.0.1:8554/demo///|
async fn main {
let client = @net.Client::connect("rtsp://127.0.0.1:8554/demo")
defer client.close()
let description = client.describe()
for track in description.select([0]) {
ignore(client.setup(track.index))
}
ignore(client.play())
for i = 0; i < 20; i = i + 1 {
match client.receive() {
Rtp(track, packet) => println("track=" + track.to_string() + " bytes=" + packet.payload().length().to_string())
Rtcp(_, _) => ()
}
if client.keepalive_due() { client.keepalive() }
}
client.teardown()
}moon info
moon fmt --check
moon check --target wasm --deny-warn
moon test --target wasm --deny-warn
moon build --target wasm --deny-warn
moon run examples/protocol --target wasm --deny-warn
python scripts/audit.py
python scripts/interop.py --target wasmpub(all) suberror RtspError {
Invalid(String)
Limit(String)
State(String)
Remote(Int)
Closed
} derive(Debug)pub struct Authenticator {
// private fields
}fn Authenticator::authorization(self : Authenticator, verb : String, uri : String) -> String raise RtspErrorpub struct ChannelMap {
// private fields
}pub struct Clock {
// private fields
}pub struct Credentials {
// private fields
}pub struct Decoder {
// private fields
}pub struct Endpoint {
host : String
port : Int
path : String
}pub struct FrameAssembler {
// private fields
}fn FrameAssembler::new(codec : PayloadCodec, max_bytes? : Int, max_packets? : Int) -> FrameAssembler raise RtspErrorpub struct Headers {
// private fields
}pub struct MediaQueue {
// private fields
}pub struct Negotiated {
transport : Transport
server_ports : (Int, Int)?
source : String?
ssrc : String?
}pub(all) enum PlayRange {
Live
FromMillis(Int64)
Interval(Int64, Int64)
}pub struct ReconnectPolicy {
attempts : Int
initial_ms : Int
maximum_ms : Int
}fn ReconnectPolicy::new(attempts? : Int, initial_ms? : Int, maximum_ms? : Int) -> ReconnectPolicy raise RtspErrorpub struct Session {
// private fields
}pub struct StatsSnapshot {
packets : Int64
octets : Int64
forward_gaps : Int64
late_or_duplicate : Int64
source_changes : Int64
}pub struct TrackStats {
// private fields
}pub(all) enum Transport {
Tcp(Int, Int)
Udp(Int, Int)
}Install
Download zipRTSP 1.0 sessions, authenticated media playback and publishing