code: def observe_property(self, name, handler):
          
          self._property_handlers[name].append(handler)
          _mpv_observe_property(self._event_handle, hash(name)&0xffffffffffffffff, name.encode('utf-8'), MpvFormat.NODE)
docs: Register an observer on the named property. An observer is a function that is called with the new property
          value every time the property's value is changed. The basic function signature is ``fun(property_name,
          new_value)`` with new_value being the decoded property value as a python object. This function can be used as a
          function decorator if no handler is given.
  
          To unregister the observer, call either of ``mpv.unobserve_property(name, handler)``,
          ``mpv.unobserve_all_properties(handler)`` or the handler's ``unregister_mpv_properties`` attribute::
  
              @player.observe_property('volume')
              def my_handler(new_volume, *):
                  print("It's loud!", volume)
  
              my_handler.unregister_mpv_properties()