ONVIF-rs is a Rust client library implementation of the ONVIF specification.
- all ONVIF types are generated from official schema
- all ONVIF operations are generated from official schema
- operations are async (currently only tokio runtime is supported)
- device discovery on the local network using WS-discovery which is mandatory for all ONVIF devices
- authentication using WS-Security UsernameToken which is mandatory for all ONVIF devices
- zero unsafe
Cargo.toml:
[dependencies]
onvif = { git = "https://github.com/lumeohq/onvif-rs" }
If you have an issue with OpenSSL build under Ubuntu, perform the following actions:
sudo apt install openssl1.0 libssl1.0.0 libssl1.0-dev
cargo clean
export OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu
export OPENSSL_INCLUDE_DIR=/usr/include/openssl
cargo build
To discover devices on the local network:
cargo run --example discovery
To inspect and control a camera:
cargo run --example camera -- help
cargo run --example camera -- get-system-date-and-time \
--uri=http://192.168.0.2:8000
cargo run --example camera -- set-hostname \
--uri=http://192.168.0.2:8000 --username=admin --password=qwerty cam2
cargo run --example camera -- get-stream-uris --uri=http://192.168.0.2:8000
To pull events from a camera, adjust credentials in event.rs and run:
cargo run --example event
- XSD -> Rust code generation: xsd-parser-rs
- XML (de)serialization: yaserde
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.