All Projects → scottlamb → retina

scottlamb / retina

Licence: Apache-2.0, MIT licenses found Licenses found Apache-2.0 LICENSE-APACHE.txt MIT LICENSE-MIT.txt
High-level RTSP multimedia streaming library, in Rust

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to retina

rrtsp client
Rust high level RTSP client
Stars: ✭ 12 (-85%)
Mutual labels:  rtsp, ip-camera
WebRTC
Home Assistant custom component for viewing IP cameras RTSP stream in real time using WebRTC and MSE technology
Stars: ✭ 538 (+572.5%)
Mutual labels:  rtsp, ip-camera
rtsp2html5
A small and simple PHP-script to convert RTSP-stream from IP-cameras to HTML5-video (with switch to MJPEG on failure)
Stars: ✭ 15 (-81.25%)
Mutual labels:  rtsp, ip-camera
rtsp-video-server
RTSP video streaming server implementation based on Live555 and FFmpeg
Stars: ✭ 36 (-55%)
Mutual labels:  rtsp
live555ProxyServerEx
Improved version of the "LIVE555 Proxy Server"
Stars: ✭ 35 (-56.25%)
Mutual labels:  rtsp
RTSPhuzz
RTSPhuzz - An RTSP Fuzzer written using the Boofuzz framework
Stars: ✭ 33 (-58.75%)
Mutual labels:  rtsp
rtsp-types
RTSP (RFC 7826) types and parsers/serializers
Stars: ✭ 16 (-80%)
Mutual labels:  rtsp
camera-live-streaming
Camera Live Streaming with Flask and Open-CV
Stars: ✭ 69 (-13.75%)
Mutual labels:  rtsp
react-native-vlc-media-player
React native media player for video streaming and playing. Supports RTSP, RTMP and other protocols supported by VLC player
Stars: ✭ 221 (+176.25%)
Mutual labels:  rtsp
rtsp-video-recorder
Provides an API to record RTSP video stream to filesystem.
Stars: ✭ 21 (-73.75%)
Mutual labels:  rtsp
wyzecam-hls
Converts MP4 files from WyzeCam NFS to HLS stream. Much more stable alternative to RTSP firmware.
Stars: ✭ 58 (-27.5%)
Mutual labels:  rtsp
hikvision-recover
Command-line tool for generating recovery codes for Hikvision IP Cameras
Stars: ✭ 40 (-50%)
Mutual labels:  ip-camera
streamer
Go Package built around spinning up streaming processes
Stars: ✭ 37 (-53.75%)
Mutual labels:  rtsp
docker-wyze-bridge
RTMP/RTSP/LL-HLS bridge for Wyze cams in a docker container
Stars: ✭ 1,146 (+1332.5%)
Mutual labels:  rtsp
mini
OpenSource Mini IP camera streamer
Stars: ✭ 64 (-20%)
Mutual labels:  rtsp
ArRtspTool
将RTSP或者NV-RTX上的摄像头流转为webrtc可直接观看的流,延迟低至200ms,Web无插件、Native等全平台低延时拉流
Stars: ✭ 38 (-52.5%)
Mutual labels:  rtsp
Plate-Minder
Monitor a video source for license plates and record them. Zero cloud dependencies.
Stars: ✭ 106 (+32.5%)
Mutual labels:  rtsp
plugin-rtsp
rtsp协议实现,接受RTSP推流以及提供拉流转发功能
Stars: ✭ 104 (+30%)
Mutual labels:  rtsp
EasyRTMP RTSP
基于Android手机、设备拉取远程RTSP流到本地,再转成RTMP,推送到RTMP服务器。。此Demo涉及到需要商业授权SDK。
Stars: ✭ 32 (-60%)
Mutual labels:  rtsp
v4l2web
V4L2 web interface
Stars: ✭ 20 (-75%)
Mutual labels:  rtsp

retina

crates.io version Documentation CI

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.

Progress:

  • 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.)
    • RTSP/1.0.
    • RTSP/2.0.
    • SRTP.
    • 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
    • async-std
    • synchronous with std only
  • codec depacketization
    • video: H.264 (RFC 6184)
      • SVC
      • periodic infra refresh
      • multiple slices per picture
      • multiple SPS/PPS
      • interleaved mode
      • AAC output format
      • Annex B output format (#44)
    • audio
      • AAC
        • interleaving
      • RFC 3551 codecs: G.711, G.723, L8/L16
    • application: ONVIF metadata
  • 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.)
  • benchmark

Help welcome!

Getting started

Try the 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

Example client

$ cargo run --package client <CMD>

Where 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 webrtc-rs.

$ cargo run --package webrtc-proxy -- --help

Acknowledgements

This builds on the whole Rust ecosystem. A couple folks have been especially helpful:

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].