docs: function OnvifServicePtz(params) {
  	this.xaddr = '';
  	this.user = '';
  	this.pass = '';
  
  	let err_msg = '';
  
  	if(err_msg = mOnvifSoap.isInvalidValue(params, 'object')) {
  		throw new Error('The value of "params" was invalid: ' + err_msg);
  	}
  
  	if('xaddr' in params) {
  		if(err_msg = mOnvifSoap.isInvalidValue(params['xaddr'], 'string')) {
  			throw new Error('The "xaddr" property was invalid: ' + err_msg);
  		} else {
  			this.xaddr = params['xaddr'];
  		}
  	} else {
  		throw new Error('The "xaddr" property is required.');
  	}
  
  	if('user' in params) {
  		if(err_msg = mOnvifSoap.isInvalidValue(params['user'], 'string', true)) {
  			throw new Error('The "user" property was invalid: ' + err_msg);
  		} else {
  			this.user = params['user'] || '';
  		}
  	}
  
  	if('pass' in params) {
  		if(err_msg = mOnvifSoap.isInvalidValue(params['pass'], 'string', true)) {
  			throw new Error('The "pass" property was invalid: ' + err_msg);
  		} else {
  			this.pass = params['pass'] || '';
  		}
  	}
  
  	this.oxaddr = mUrl.parse(this.xaddr);
  	if(this.user) {
  		this.oxaddr.auth = this.user + ':' + this.pass;
  	}
  
  	this.time_diff = params['time_diff'];
  	this.name_space_attr_list = [
  		'xmlns:ter="http://www.onvif.org/ver10/error"',
  		'xmlns:xs="http://www.w3.org/2001/XMLSchema"',
  		'xmlns:tt="http://www.onvif.org/ver10/schema"',
  		'xmlns:tptz="http://www.onvif.org/ver20/ptz/wsdl"'
  	];
  }