easy_onvif 2.0.13+3
easy_onvif: ^2.0.13+3 copied to clipboard
A pure Dart library designed primarily for command line automation of Onvif compatible devices, but can be used anywhere Dart is used.
ONVIF Client protocol Profile S (Live Streaming) Dart implementation #
This is a wrapper to ONVIF protocol which allows you to get information about your NVT (network video transmitter) device, its media sources, control PTZ (pan-tilt-zoom) movements and manage presets. It will also allow you to get information about your NVR (network video recorder).
Table of contents #
- New for version 2.0.0
- Getting Started
- Usage Example
- Connecting to an Onvif device
- Interacting with the device through Onvif operations
- Onvif cli (Onvif at the command prompt)
- Supported Onvif Operations
- Tested Onvif Devices
- What's next
New for version 2.0.0 #
Device discovery is finally here. If you're using that cli utilities that became available from v1.0.0, you can discover Onvif devices on your network with the command:
onvif probe
Or, in dart code:
final multicastProbe = MulticastProbe();
await multicastProbe.probe();
for (var device in multicastProbe.onvifDevices) {
print(
'${device.name} ${device.location} ${device.hardware} ${device.xaddr}');
}
Getting Started #
To use this package in your code, first add the dependency to your project:
dependencies:
...
easy_onvif: ^2.0.13+3
If you need additional help getting started with dart, check out these guides.
Usage Example #
Import the easy_onvif library.
import 'package:easy_onvif/onvif.dart';
Connecting to an Onvif device #
final onvif = await Onvif.connect(
host: [hostname or ip address],
username: [username],
password: [password]);
Interacting with the device through Onvif operations #
Refer to the tables below for the supported operations.
Through the deviceManagement operations you can get information about the connected device.
var deviceInfo = await onvif.deviceManagement.getDeviceInformation();
print(deviceInfo.model);
Many operations require you to supply a profileToken which can be retrieved through media operations.
var profiles = await onvif.media.getProfiles();
profiles.forEach((element) {
print('${element.name} ${element.token}');
});
var profileToken = profiles[0].token;
With the ptz operations you can get a list of camera presets from the connected device.
var presets = await onvif.ptz.getPresets(profileToken);
//get a specific preset
var preset = presets[11];
//print the preset values
print(
'preset: ${preset.position.panTilt?.x} ${preset.position.panTilt?.y} ${preset.position.zoom?.x}');
//use the GotoPreset operation to point the camera to the given preset
await onvif.ptz.gotoPreset(profileToken, preset);
Be sure to look through the API Reference for information about the parameters required for the supported Onvif operations.
Onvif cli (Onvif at the command prompt) #
A command line interface for controlling an Onvif device with cli commands
Install using dart pub:
dart pub global activate easy_onvif
Install using brew:
brew tap faithoflifedev/easy_onvif
brew install onvif
Run the following command to see help:
onvif --help
Result,
A command line interface for controlling Onvif compliant devices
Usage: onvif <command> [arguments]
Global options:
-h, --help Print this usage information.
--config-file (defaults to "$HOME/.onvif/credentials.json")
--log-level [all, debug, info, warning, error, off (default)]
Available commands:
authorize Generate an authentication file for an Onvif device
device-management Device management commands.
media Media commands.
probe Probe/device discovery command.
ptz PTZ commands.
Please see the cli documentation README.md for more detailed usage information.
Supported Onvif Operations #
Device Management #
| Onvif Operation | Dart Method | Dart Return Type | Test |
|---|---|---|---|
| CreateUsers | createUsers | Future<void> |
[ ] |
| DeleteUsers | deleteUsers | Future<void> |
[ ] |
| GetCapabilities | getCapabilities | Future<Capabilities> |
[x] |
| GetDeviceInformation | getDeviceInformation | Future<GetDeviceInformationResponse> |
[x] |
| GetHostname | getHostname | Future<HostnameInformation> |
[x] |
| GetNetworkProtocols | getNetworkProtocols | Future<List<NetworkProtocol>> |
[x] |
| GetNTP | getNtp | Future<NtpInformation> |
[x] |
| GetServiceCapabilities | getServiceCapabilities | Future<DeviceServiceCapabilities> |
[x] |
| GetServices | getServices | Future<List<Service>> |
[x] |
| GetSystemDateAndTime | getSystemDateAndTime | Future<SystemDateAndTime> |
[x] |
| GetSystemUris | getSystemUris | Future<GetSystemUrisResponse> |
[x] |
| GetUsers | getUsers | Future<List<User>> |
[x] |
Media #
| Onvif Operation | Dart Method | Dart Return Type | Test |
|---|---|---|---|
| GetAudioSources | getAudioSources | Future<AudioSource> |
[x] |
| GetProfiles | getProfiles | Future<List<Profile>> |
[x] |
| GetSnapshotUri | getSnapshotUri | Future<MediaUri> |
[x] |
| GetStreamUri | getStreamUri | Future<MediaUri> |
[x] |
| GetVideoSources | getVideoSources | Future<VideoSources> |
[x] |
| StartMulticastStreaming | startMulticastStreaming | Future<void> |
[ ] |
| StopMulticastStreaming | stopMulticastStreaming | Future<void> |
[ ] |
PTZ #
| Onvif Operation | Dart Method | Dart Return Type | Test |
|---|---|---|---|
| AbsoluteMove | absoluteMove | Future<bool> |
[ ] |
| ContinuousMove | continuousMove | Future<bool> |
[x] |
| GetCompatibleConfigurations | getCompatibleConfigurations | Future<List<PtzConfiguration>> |
[x] |
| GetConfiguration | getConfiguration | Future<PtzConfiguration> |
[x] |
| GetConfigurations | getConfigurations | Future<List<PtzConfiguration>> |
[x] |
| GetPresets | getPresets | Future<List<Preset>> |
[x] |
| GetStatus | getStatus | Future<PtzStatus> |
[x] |
| GotoPreset | gotoPreset | Future<bool> |
[ ] |
| RelativeMove | relativeMove | Future<void> |
[ ] |
| RemovePreset | removePreset | Future<void> |
[ ] |
| SetPreset | setPreset | Future<String> |
[x] |
| Stop | stop | Future<bool> |
[x] |
PTZ Helper Methods #
| Onvif Operation | Dart Method | Return Type |
|---|---|---|
| N/A | move | Future<void> |
| N/A | moveDown | Future<void> |
| N/A | moveLeft | Future<void> |
| N/A | moveRight | Future<void> |
| N/A | moveUp | Future<void> |
| N/A | zoomIn | Future<void> |
| N/A | zoomOut | Future<void> |
| N/A | getCurrentPreset | Future<Preset?> |
Tested Onvif Devices #
The values returned by the Onvif API GetDeviceInformation call.
| Manufacturer | Model | Known Issue |
|---|---|---|
| D-Link Corporation | DCS-6511 | |
| Happytimesoft | IPCamera | |
| ONVIF | ENP1A14-IR/25X | |
| TP-Link | TL-IPC43AN-4 | RelativeMove¹ |
| Unknown | GX728MF-IR28 |
¹ For TP-Link, RelativeMove is not properly supported on the tested device, however easy_onvif falls back to GetStatus and AbsoluteMove to simulate a relative move.
What's next #
- More comprehensive unit tests