initialize method

Future<void> initialize()

Connect to the Onvif device and retrieve its capabilities

Implementation

Future<void> initialize() async {
  loggy.info('initializing ...');

  Media1? media1;
  Media2? media2;

  soap.Transport.timeDelta = await getTimeDelta();

  try {
    final serviceList = await deviceManagement.getServices(true);

    serviceMap.addAll(
        {for (var service in serviceList) service.nameSpace: service.xAddr});

    if (serviceMap.containsKey(soap.Xmlns.trt)) {
      media1 = Media1(
          transport: transport,
          uri: _serviceUriOfHost(serviceMap[soap.Xmlns.trt]!));
    }

    if (serviceMap.containsKey(soap.Xmlns.tr2)) {
      media2 = Media2(
          transport: transport,
          uri: _serviceUriOfHost(serviceMap[soap.Xmlns.tr2]!));
    }

    _media = Media(
      transport: transport,
      media1: media1,
      media2: media2,
    );

    if (serviceMap.containsKey('http://www.onvif.org/ver20/ptz/wsdl')) {
      _ptz = Ptz(
          transport: transport,
          uri: _serviceUriOfHost(
              serviceMap['http://www.onvif.org/ver20/ptz/wsdl']!));
    }
  } catch (error) {
    loggy.warning('GetServices command not supported');

    final capabilities = await deviceManagement.getCapabilities();

    if (capabilities.media?.xAddr != null) {
      _media = Media(
        transport: transport,
        media1: Media1(
            transport: transport,
            uri: _serviceUriOfHost(capabilities.media!.xAddr)),
      );
    }

    if (capabilities.ptz?.xAddr != null) {
      _ptz = Ptz(
          transport: transport,
          uri: _serviceUriOfHost(capabilities.ptz!.xAddr));
    }
  }

  loggy.info('initialization complete');
}