|0.4.5||Feb 2, 2023|
|0.4.4||Dec 26, 2022|
|0.4.3||Sep 29, 2022|
|0.4.0||May 17, 2022|
|0.0.5||Jul 8, 2021|
#21 in Multimedia
214 downloads per month
High-level RTSP multimedia streaming library, in Rust. Good support for ONVIF RTSP/1.0 IP surveillance cameras, as needed by Moonfire NVR. Works around brokenness in cheap closed-source cameras.
Status: In production use in Moonfire NVR. Many missing features.
- client support
- basic authentication.
- digest authentication.
- RTP over TCP via RTSP interleaved channels.
- RTP over UDP (experimental).
- re-order buffer. (Out-of-order packets are dropped now.)
- ONVIF backchannel support (for sending audio).
- ONVIF replay mode.
- receiving RTCP Sender Reports (currently only uses the timestamp)
- sending RTCP Receiver Reports
- server support
- I/O modes
- async with tokio
- synchronous with std only
- codec depacketization
- clean, stable API. (See #47.)
- quality errors
- detailed error description text.
- programmatically inspectable error type.
- good functional testing coverage. (Currently lightly / unevenly tested. Most depacketizers have no tests.)
- fuzz testing. (In progress.)
mp4 example. It streams from an RTSP server to a
.mp4 file until
you hit ctrl-C.
$ cargo run --package client mp4 --url rtsp://ip.address.goes.here/ --username admin --password test out.mp4 ... ^C
$ cargo run --package client <CMD>
- info - Gets info about available streams and exits.
- mp4 - Writes RTSP streams to mp4 file; exit with Ctrl+C.
- onvif - Gets realtime onvif metadata if available; exit with Ctrl+C.
Example WebRTC proxy
This allows viewing a H.264 video stream from your browser, with the help of
$ cargo run --package webrtc-proxy -- --help
This builds on the whole Rust ecosystem. A couple folks have been especially helpful:
- Sebastian Dröge, author of
- David Holroyd, author of
It's a working name. Other ideas welcome. I started by looking at dictionary words with the letters R, T, S, and P in order and picking out ones related to video:
|retinoscope||close but too long, thus
|retrospect||good name for an NVR, but I already picked Moonfire|
|rotascope||misspelling of "rotascope" (animation tool) or archaic name for "gyroscope"?|
Your choice of MIT or Apache; see LICENSE-MIT.txt or LICENSE-APACHE, respectively.