Package: onvif2-zeep
‘<https://pepy.tech/badge/onvif2_zeep>’_ONVIF Client Implementation in Python base wsdl ver10/20, support hevc(h.265)Dependencieszeep>= 3.0.0Install python-onvif2-zeeppython-onvif-zeep ,seehttps://github.com/FalkTannhaeuser/python-onvif-zeep)From SourceYou should clone this repository and run setup.py:cd python-onvif2-zeep && python setup.py installAlternatively, you can run:pip install --upgrade onvif2_zeepGetting StartedInitialize an ONVIFCamera instancefrom onvif2 import ONVIFCamera
    from zeep.transports import Transport
mycam = ONVIFCamera('192.168.0.2', 80, 'user', 'passwd', wsdl_dir='/home/onvif2/wsdl')Now, an ONVIFCamera instance is available. By default, a devicemgmt service is also available if everything is OK.So, all operations defined in the WSDL document:/home/onvif2/ver10/device/wsdl/devicemgmt.wsdldownload the wsdl folder,and put to the /home/onvif2are available.Get media2 from your cameramedia2_service = self.mycam.create_media2_service()

## get the streamUri
profiles = media2_service.GetProfiles()
for profile in profiles:
    o = self.media2_service.create_type('GetStreamUri')
    o.ProfileToken = profile.token
    o.Protocol = 'RTSP'
    uri = self.media2_service.GetStreamUri(o)

    dic = {'token': profile.token,
           'rtsp': uri}
                print(dic)

## get video info , 'h265' or 'h264', 'width' 'height' 'gop' ....
configurations = media2_service.GetVideoEncoderConfigurations()

for configuration in configurations:
    if configuration['Encoding'].lower() == 'h264' or configuration['Encoding'].lower() == 'h265':
        width = configuration['Resolution']['Width']
        height = configuration['Resolution']['Height']
        dic = {'token': configuration['token'],
               'encoding': configuration['Encoding'],
               'ratio': "{}*{}".format(width, height),
               'fps': configuration['RateControl']['FrameRateLimit'],
               'bitrate': configuration['RateControl']['BitrateLimit'],
               'gop': configuration['GovLength'],
               'profile': configuration['Profile'],
               'quality': configuration['Quality']}
    else:
        dic = {'token': configuration['Name'], 'encoding': configuration['Encoding']}

    print(dic)Get information from your camera# Get Hostname
resp = mycam.devicemgmt.GetHostname()
print 'My camera`s hostname: ' + str(resp.Name)

# Get system date and time
dt = mycam.devicemgmt.GetSystemDateAndTime()
tz = dt.TimeZone
year = dt.UTCDateTime.Date.Year
hour = dt.UTCDateTime.Time.HourConfigure (Control) your cameraTo configure your camera, there are two ways to pass parameters to service methods.DictThis is the simpler way:params = {'Name': 'NewHostName'}
device_service.SetHostname(params)Type InstanceThis is the recommended way. Type instance will raise an
exception if you set an invalid (or non-existent) parameter.params = mycam.devicemgmt.create_type('SetHostname')
params.Hostname = 'NewHostName'
mycam.devicemgmt.SetHostname(params)

time_params = mycam.devicemgmt.create_type('SetSystemDateAndTime')
time_params.DateTimeType = 'Manual'
time_params.DaylightSavings = True
time_params.TimeZone.TZ = 'CST-8:00:00'
time_params.UTCDateTime.Date.Year = 2014
time_params.UTCDateTime.Date.Month = 12
time_params.UTCDateTime.Date.Day = 3
time_params.UTCDateTime.Time.Hour = 9
time_params.UTCDateTime.Time.Minute = 36
time_params.UTCDateTime.Time.Second = 11
mycam.devicemgmt.SetSystemDateAndTime(time_params)Use eventsmycam = ONVIFCamera(‘192.168.1.10’, 8899, ‘admin’, ‘admin’) #, no_cache=True)
event_service = mycam.create_events_service()
print(event_service.GetEventProperties())pullpoint = mycam.create_pullpoint_service()
req = pullpoint.create_type(‘PullMessages’)
req.MessageLimit=100
print(pullpoint.PullMessages({“Timeout”:timedelta(seconds=2),”MessageLimit”:10}))Use other servicesONVIF protocol has defined many services.
You can find all the services and operationshere.
ONVIFCamera has support methods to create new services:# Create ptz service
ptz_service = mycam.create_ptz_service()
# Get ptz configuration
mycam.ptz.GetConfiguration()
# Another way
# ptz_service.GetConfiguration()Or create an unofficial service:xaddr = 'http://192.168.0.3:8888/onvif/yourservice'
yourservice = mycam.create_onvif_service('service.wsdl', xaddr, 'yourservice')
yourservice.SomeOperation()
# Another way
# mycam.yourservice.SomeOperation()ONVIF CLIpython-onvif also provides a command line interactive interface: onvif-cli.
onvif-cli is installed automatically.Single command example$ onvif-cli devicemgmt GetHostname --user 'admin' --password '12345' --host '192.168.0.112' --port 80
True: {'FromDHCP': True, 'Name': hision}
$ onvif-cli devicemgmt SetHostname "{'Name': 'NewerHostname'}" --user 'admin' --password '12345' --host '192.168.0.112' --port 80
True: {}Interactive mode$ onvif-cli -u 'admin' -a '12345' --host '192.168.0.112' --port 80 --wsdl /etc/onvif/wsdl/
ONVIF >>> cmd
analytics   devicemgmt  events      imaging     media       ptz
ONVIF >>> cmd devicemgmt GetWsdlUrl
True: http://www.onvif.org/
ONVIF >>> cmd devicemgmt SetHostname {'Name': 'NewHostname'}
ONVIF >>> cmd devicemgmt GetHostname
True: {'Name': 'NewHostName'}
ONVIF >>> cmd devicemgmt SomeOperation
False: No Operation: SomeOperationNOTE: Tab completion is supported for interactive mode.Batch mode$ vim batchcmds
$ cat batchcmds
cmd devicemgmt GetWsdlUrl
cmd devicemgmt SetHostname {'Name': 'NewHostname', 'FromDHCP': True}
cmd devicemgmt GetHostname
$ onvif-cli --host 192.168.0.112 -u admin -a 12345 -w /etc/onvif/wsdl/ < batchcmds
ONVIF >>> True: http://www.onvif.org/
ONVIF >>> True: {}
ONVIF >>> True: {'FromDHCP': False, 'Name': NewHostname}ReferencesONVIF Offical WebsiteOperations IndexONVIF Develop DocumentsFoscam Python Lib