High-level RTSP multimedia streaming library, in Rust
Go to file
2021-06-03 16:49:53 -07:00
.github/workflows initial commit 2021-06-03 16:49:53 -07:00
examples/client initial commit 2021-06-03 16:49:53 -07:00
src initial commit 2021-06-03 16:49:53 -07:00
.gitignore initial commit 2021-06-03 16:49:53 -07:00
Cargo.lock initial commit 2021-06-03 16:49:53 -07:00
Cargo.toml initial commit 2021-06-03 16:49:53 -07:00
LICENSE-APACHE.txt initial commit 2021-06-03 16:49:53 -07:00
LICENSE-MIT.txt initial commit 2021-06-03 16:49:53 -07:00
README.md initial commit 2021-06-03 16:49:53 -07:00

retina

CI

High-level RTSP multimedia RTSP 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.