Code Monkey home page Code Monkey logo

easy_onvif's Introduction

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).

pub package Build Status

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}');
}

New for version 1.0.7

This release has logging capabilities through use of the loggy package for Dart code and the flutter_loggy package for Flutter code. The code includes both a Dart example and a Flutter example that demonstreate usage. By default the logging level is set to LogLevel.error, which only logs exceptions.

New for version 1.0.0

As of the 1.0.0 release of this package, there is a cli utility included that can be used to return data for any API call currently supported by the package. If you want to get started quicky with the cli utility run these commands in a termainal session:

dart pub global activate easy_onvif

onvif --help

Please see the cli documentation README.md for more detailed usage information.

Getting Started

To use this package in your code, first add the dependency to your project:

dependencies:
  ...
  easy_onvif: ^2.0.5

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 ipaddress],
 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.

Supported Onvif Operations

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]
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> [ ]
Onvif Operation Dart Method Dart Return Type Test
AbsoluteMove absoluteMove Future<void> [ ]
ContinuousMove continuousMove Future<void> [ ]
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<void> [ ]
RelativeMove relativeMove Future<void> [ ]
RemovePreset removePreset Future<void> [ ]
SetPreset setPreset Future<String> [x]
Stop stop Future<void> [ ]

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
D-Link Corporation DCS-6511
Happytimesoft IPCamera
ONVIF ENP1A14-IR/25X
Unknown GX728MF-IR28

What's next

  • More comprehensive unit tests

A test image

easy_onvif's People

Contributors

faithoflifedev avatar yjsendbird avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.