High-level RTSP multimedia streaming library, in Rust
.github/workflows | ||
examples/client | ||
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE-APACHE.txt | ||
LICENSE-MIT.txt | ||
README.md |
retina
High-level RTSP multimedia streaming library, in Rust. Good support for IP surveillance cameras, as needed by Moonfire NVR.
Progress:
- client support
-
- digest authentication
-
- RTP over TCP via RTSP interleaved channels.
-
- RTP over UDP. (Shouldn't be hard but I haven't needed it.)
-
- SRTP
-
- ONVIF backchannel support (for sending audio).
- server support
- async
-
- tokio
-
- async-std. (Most of the crate's code is independent of the async library, so I don't expect this would be too hard to add.)
- codec depacketization
-
- video: H.264
-
-
- SVC
-
-
-
- periodic infra refresh
-
-
-
- partitioned slices
-
-
- audio
-
-
- AAC
-
-
-
-
- interleaving
-
-
-
-
- RFC 3551 codecs: G.711,G.723, L8/L16
-
-
- application: ONVIF metadata
- uniform, documented API. (Currently haphazard in terms of naming, what fields are exposed directly vs use an accessors, etc.)
- rich errors. (Currently uses untyped errors with the deprecated failure crate; some error messages are quite detailed, others aren't.)
- released versions of all deps. (crates.io publishing requirement.)
- good functional testing coverage. (Currently lightly / unevenly tested. The depacketizers have no test coverage, and there's at least one place left that can panic on bad input.)
- fuzz testing
Help welcome!
Why "retina"?
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:
$ egrep '^r.*t.*s.*p' /usr/share/dict/words' |
|
---|---|
retinoscope | close but too long, thus retina |
retrospect | good name for an NVR, but I already picked Moonfire |
rotascope | misspelling of "rotascope" (animation tool) or archaic name for "gyroscope"? |
License
Your choice of MIT or Apache; see LICENSE-MIT.txt or LICENSE-APACHE, respectively.