Merge branch 'feature-h264-videostorage' into monitor_packetqueue
This commit is contained in:
commit
21c46bb519
|
@ -0,0 +1 @@
|
|||
.git
|
|
@ -6,6 +6,7 @@ notifications:
|
|||
branches:
|
||||
except:
|
||||
- modern
|
||||
cache: ccache
|
||||
addons:
|
||||
sauce_connect:
|
||||
username: "zoneminder"
|
||||
|
|
|
@ -802,3 +802,9 @@ configure_file(
|
|||
add_custom_target(uninstall
|
||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake)
|
||||
|
||||
# Configure CCache if available
|
||||
find_program(CCACHE_FOUND ccache)
|
||||
if(CCACHE_FOUND)
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
|
||||
endif(CCACHE_FOUND)
|
||||
|
|
29
Dockerfile
29
Dockerfile
|
@ -3,11 +3,9 @@
|
|||
FROM ubuntu:trusty
|
||||
MAINTAINER Kyle Johnson <kjohnson@gnulnx.net>
|
||||
|
||||
# Let the container know that there is no tty
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
# Resynchronize the package index files
|
||||
RUN apt-get update && apt-get install -y \
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||
libpolkit-gobject-1-dev build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev \
|
||||
libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 \
|
||||
libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm cmake libjpeg-turbo8-dev \
|
||||
|
@ -16,7 +14,8 @@ RUN apt-get update && apt-get install -y \
|
|||
mysql-server libvlc-dev libvlc5 libvlccore-dev libvlccore7 vlc-data libcurl4-openssl-dev \
|
||||
libavformat-dev libswscale-dev libavutil-dev libavcodec-dev libavfilter-dev \
|
||||
libavresample-dev libavdevice-dev libpostproc-dev libv4l-dev libtool libnetpbm10-dev \
|
||||
libmime-lite-perl dh-autoreconf dpatch
|
||||
libmime-lite-perl dh-autoreconf dpatch \
|
||||
&& apt-get clean
|
||||
|
||||
# Copy local code into our container
|
||||
ADD . /ZoneMinder
|
||||
|
@ -31,11 +30,8 @@ WORKDIR /ZoneMinder
|
|||
#RUN ./configure --with-libarch=lib/$DEB_HOST_GNU_TYPE --disable-debug --host=$DEB_HOST_GNU_TYPE --build=$DEB_BUILD_GNU_TYPE --with-mysql=/usr --with-webdir=/var/www/zm --with-ffmpeg=/usr --with-cgidir=/usr/lib/cgi-bin --with-webuser=www-data --with-webgroup=www-data --enable-mmap=yes --enable-onvif ZM_SSL_LIB=openssl ZM_DB_USER=zm ZM_DB_PASS=zm
|
||||
RUN cmake .
|
||||
|
||||
# Build ZoneMinder
|
||||
RUN make
|
||||
|
||||
# Install ZoneMinder
|
||||
RUN make install
|
||||
# Build & install ZoneMinder
|
||||
RUN make && make install
|
||||
|
||||
# ensure writable folders
|
||||
RUN ./zmlinkcontent.sh
|
||||
|
@ -43,10 +39,6 @@ RUN ./zmlinkcontent.sh
|
|||
# Adding the start script
|
||||
ADD utils/docker/start.sh /tmp/start.sh
|
||||
|
||||
# Ensure we can run this
|
||||
# TODO - Files ADD'ed have 755 already...why do we need this?
|
||||
RUN chmod 755 /tmp/start.sh
|
||||
|
||||
# give files in /usr/local/share/zoneminder/
|
||||
RUN chown -R www-data:www-data /usr/local/share/zoneminder/
|
||||
|
||||
|
@ -65,7 +57,10 @@ RUN useradd -m -s /bin/bash -G sudo zoneminder
|
|||
RUN echo 'zoneminder:zoneminder' | chpasswd
|
||||
|
||||
# Expose ssh and http ports
|
||||
EXPOSE 80
|
||||
EXPOSE 22
|
||||
EXPOSE 22 80
|
||||
|
||||
# Initial database and apache setup:
|
||||
RUN "/ZoneMinder/utils/docker/setup.sh"
|
||||
|
||||
CMD ["/ZoneMinder/utils/docker/start.sh"]
|
||||
|
||||
CMD "/tmp/start.sh"
|
||||
|
|
|
@ -599,6 +599,7 @@ INSERT INTO `Controls` VALUES (NULL,'Wanscam HW0025','Libvlc','WanscamHW0025', 1
|
|||
INSERT INTO `Controls` VALUES (NULL,'IPCC 7210W','Libvlc','IPCC7210W', 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 350, 0, 0, 1, 0, 10, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 0, 0, 0, 0);
|
||||
INSERT INTO `Controls` VALUES (NULL,'Vivotek ePTZ','Remote','Vivotek_ePTZ',0,0,1,1,0,0,0,1,0,0,0,0,1,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,5,0,0,1,0,0,0,0,1,0,5,0,0,0,0);
|
||||
INSERT INTO `Controls` VALUES (NULL,'Netcat ONVIF','Ffmpeg','Netcat',0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,100,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,100,5,5,0,0,0,1,255,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0);
|
||||
INSERT INTO `Controls` VALUES (NULL,'Keekoon','Remote','Keekoon', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
|
||||
--
|
||||
-- Add some monitor preset values
|
||||
|
|
|
@ -27,9 +27,9 @@ override_dh_auto_configure:
|
|||
override_dh_auto_install:
|
||||
dh_auto_install --buildsystem=cmake
|
||||
install -D -m 0644 debian/apache.conf $(INSTDIR)/etc/zm/apache.conf
|
||||
rm $(INSTDIR)/usr/share/zoneminder/api/lib/Cake/LICENSE.txt
|
||||
rm $(INSTDIR)/usr/share/zoneminder/api/.gitignore
|
||||
rm -r $(INSTDIR)/usr/share/zoneminder/api/lib/Cake/Test
|
||||
rm $(INSTDIR)/usr/share/zoneminder/www/api/lib/Cake/LICENSE.txt
|
||||
rm $(INSTDIR)/usr/share/zoneminder/www/api/.gitignore
|
||||
rm -r $(INSTDIR)/usr/share/zoneminder/www/api/lib/Cake/Test
|
||||
|
||||
override_dh_auto_test:
|
||||
# do not run tests...
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
weekly
|
||||
notifempty
|
||||
missingok
|
||||
create 660 http http
|
||||
create 660 @WEB_USER@ @WEB_GROUP@
|
||||
}
|
||||
|
|
|
@ -23,6 +23,13 @@ command="$ZM_PATH_BIN/zmpkg.pl"
|
|||
|
||||
start() {
|
||||
echo -n "Starting $prog: "
|
||||
# Wait for mysqld to start. Continue if it takes too long.
|
||||
count=0
|
||||
while [ ! -e /var/run/mysqld/mysqld.sock ] && [ $count -lt 60 ]
|
||||
do
|
||||
sleep 1
|
||||
count=$((count+1))
|
||||
done
|
||||
export TZ=:/etc/localtime
|
||||
mkdir -p "$RUNDIR" && chown www-data:www-data "$RUNDIR"
|
||||
mkdir -p "$TMPDIR" && chown www-data:www-data "$TMPDIR"
|
||||
|
|
12
docs/api.rst
12
docs/api.rst
|
@ -272,7 +272,17 @@ This returns the full list of configuration parameters:
|
|||
|
||||
Each configuration parameter has an Id, Name, Value and other fields. Chances are you are likely only going to focus on these 3.
|
||||
|
||||
(Example of changing config TBD)
|
||||
The edit function of the Configs API is a little quirky at the moment. Its format deviates from the usual edit flow of other APIs. This will be fixed, eventually. For now, to change the "Value" of ZM_X10_HOUSE_CODE from A to B:
|
||||
|
||||
::
|
||||
|
||||
curl -XPUT http://server/zm/api/configs/edit/ZM_X10_HOUSE_CODE.json -d "Config[Value]=B"
|
||||
|
||||
To validate changes have been made:
|
||||
|
||||
::
|
||||
|
||||
curl -XGET http://server/zm/api/configs/view/ZM_X10_HOUSE_CODE.json
|
||||
|
||||
Run State Apis
|
||||
^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -698,7 +698,7 @@ Now go to http://zoneminder_IP/ and stop the ZM service. Continue to http://zon
|
|||
|
||||
I upgraded by distribution and ZM stopped working
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Some possibilties (Incomplete list and subject to correction)
|
||||
Some possibilities (Incomplete list and subject to correction)
|
||||
``[[/usr/local/bin/zmfix: /usr/lib/libmysqlclient.so.15: version `MYSQL_5.0' not found (required by /usr/local/bin/zmfix)]]`` :: Solution: Recompile and reinstall Zoneminder.
|
||||
Any time you update a major version that ZoneMinder depends on, you need to recompile ZoneMinder.
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ Zmrepo supports the two most recent, major releases of each Redhat based distro.
|
|||
|
||||
The following notes are based on real problems which have occurred:
|
||||
|
||||
- Zmrepo assumes you have installed the underlying distrubution **using the official installation media for that distro**. Third party "Spins" are not supported and may not work correctly.
|
||||
- Zmrepo assumes you have installed the underlying distribution **using the official installation media for that distro**. Third party "Spins" are not supported and may not work correctly.
|
||||
|
||||
- ZoneMinder is intended to be installed in an environment dedicated to ZoneMinder. While ZoneMinder will play well with many applications, some invariably will not. Asterisk is one such example.
|
||||
|
||||
|
|
|
@ -46,10 +46,19 @@ Linked Monitors
|
|||
This field allows you to select other monitors on your system that act as triggers for this monitor. So if you have a camera covering one aspect of your property you can force all cameras to record while that camera detects motion or other events. You can either directly enter a comma separated list of monitor ids or click on ‘Select’ to choose a selection. Be very careful not to create circular dependencies with this feature however you will have infinitely persisting alarms which is almost certainly not what you want! To unlink monitors you can ctrl-click.
|
||||
|
||||
Maximum FPS
|
||||
On some occasions you may have one or more cameras capable of high capture rates but find that you generally do not require this performance at all times and would prefer to lighten the load on your server. This option permits you to limit the maximum capture rate to a specified value. This may allow you to have more cameras supported on your system by reducing the CPU load or to allocate video bandwidth unevenly between cameras sharing the same video device. This value is only a rough guide and the lower the value you set the less close the actual FPS may approach it especially on shared devices where it can be difficult to synchronise two or more different capture rates precisely. This option controls the maximum FPS in the circumstance where no alarm is occurring only. (Note for IP cameras: ZoneMinder has no way to set or limit the mjpeg stream the camera passes, some cams you can set this through the url string, others do not. So if you're using mjpeg feeds you must NOT throttle here at the server end, only the cam end. If you want to use this feature, the server to throttle, then you MUST use jpeg instead of mjpeg method to get picture from the camera)
|
||||
|
||||
On some occasions you may have one or more cameras capable of high capture rates but find that you generally do not require this performance at all times and would prefer to lighten the load on your server. This option permits you to limit the maximum capture rate to a specified value. This may allow you to have more cameras supported on your system by reducing the CPU load or to allocate video bandwidth unevenly between cameras sharing the same video device. This value is only a rough guide and the lower the value you set the less close the actual FPS may approach it especially on shared devices where it can be difficult to synchronise two or more different capture rates precisely. This option controls the maximum FPS in the circumstance where no alarm is occurring only.
|
||||
|
||||
This feature is limited and will only work under the following conditions:
|
||||
|
||||
#. Local cameras
|
||||
#. Remote (IP) cameras in snapshot or jpeg mode **only**
|
||||
|
||||
Using this field for video streams from IP cameras will cause undesirable results when the value is equal to or less than the frame rate from the camera. Note that placing a value higher than the camera's frame rate is allowed and can help prevent cpu spikes when communication from the camera is lost.
|
||||
|
||||
Alarm Maximum FPS
|
||||
If you have specified a Maximum FPS it may be that you don’t want this limitation to apply when your monitor is recording motion or other event. This setting allows you to override the Maximum FPS value if this circumstance occurs. As with the Maximum FPS setting leaving this blank implies no limit so if you have set a maximum fps in the previous option then when an alarm occurs this limit would be ignored and ZoneMinder would capture as fast as possible for the duration of the alarm, returning to the limited value after the alarm has concluded. Equally you could set this to the same, or higher (or even lower) value than Maximum FPS for more precise control over the capture rate in the event of an alarm.
|
||||
|
||||
**IMPORTANT:** This field is subject to the same limitations as the Maxium FPS field. Ignoring these limitations will produce undesriable results.
|
||||
|
||||
Reference Image Blend %ge
|
||||
Each analysed image in ZoneMinder is a composite of previous images and is formed by applying the current image as a certain percentage of the previous reference image. Thus, if we entered the value of 10 here, each image’s part in the reference image will diminish by a factor of 0.9 each time round. So a typical reference image will be 10% the previous image, 9% the one before that and then 8.1%, 7.2%, 6.5% and so on of the rest of the way. An image will effectively vanish around 25 images later than when it was added. This blend value is what is specified here and if higher will make slower progressing events less detectable as the reference image would change more quickly. Similarly events will be deemed to be over much sooner as the reference image adapts to the new images more quickly. In signal processing terms the higher this value the steeper the event attack and decay of the signal. It depends on your particular requirements what the appropriate value would be for you but start with 10 here and adjust it (usually down) later if necessary.
|
||||
|
|
|
@ -49,10 +49,10 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Analytics::Types::MetadataStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
VideoAnalytics => { # ONVIF::Analytics::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Analytics::Types::Frame
|
||||
PTZStatus => { # ONVIF::Analytics::Types::PTZStatus
|
||||
Position => { # ONVIF::Analytics::Types::PTZVector
|
||||
|
@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new():
|
|||
},
|
||||
PTZ => { # ONVIF::Analytics::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Analytics::Types::PTZStatus
|
||||
Position => { # ONVIF::Analytics::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -235,7 +235,7 @@ of the corresponding class can be passed instead of the marked hash ref.
|
|||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
List items (i.e. multiple occurrences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
|
|
@ -208,7 +208,7 @@ of the corresponding class can be passed instead of the marked hash ref.
|
|||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
List items (i.e. multiple occurrences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Analytics::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange
|
||||
X => { # ONVIF::Analytics::Types::FloatRange
|
||||
|
|
|
@ -139,7 +139,7 @@ get_/set_ methods:
|
|||
|
||||
=item * token
|
||||
|
||||
Token that uniquely refernces this configuration. Length up to 64 characters.
|
||||
Token that uniquely references this configuration. Length up to 64 characters.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -114,10 +114,10 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Analytics::Types::MetadataStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
VideoAnalytics => { # ONVIF::Analytics::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Analytics::Types::Frame
|
||||
PTZStatus => { # ONVIF::Analytics::Types::PTZStatus
|
||||
Position => { # ONVIF::Analytics::Types::PTZVector
|
||||
|
@ -220,7 +220,7 @@ Constructor. The following data structure may be passed to new():
|
|||
},
|
||||
PTZ => { # ONVIF::Analytics::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Analytics::Types::PTZStatus
|
||||
Position => { # ONVIF::Analytics::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -107,7 +107,7 @@ Constructor. The following data structure may be passed to new():
|
|||
{ # ONVIF::Analytics::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Analytics::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange
|
||||
X => { # ONVIF::Analytics::Types::FloatRange
|
||||
|
|
|
@ -143,7 +143,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::Analytics::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Analytics::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange
|
||||
X => { # ONVIF::Analytics::Types::FloatRange
|
||||
|
@ -171,7 +171,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::Analytics::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Analytics::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange
|
||||
X => { # ONVIF::Analytics::Types::FloatRange
|
||||
|
|
|
@ -147,7 +147,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::Analytics::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Analytics::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange
|
||||
X => { # ONVIF::Analytics::Types::FloatRange
|
||||
|
@ -175,7 +175,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::Analytics::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Analytics::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange
|
||||
X => { # ONVIF::Analytics::Types::FloatRange
|
||||
|
|
|
@ -114,7 +114,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Analytics::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Analytics::Types::PTZVector
|
||||
|
|
|
@ -115,7 +115,7 @@ Constructor. The following data structure may be passed to new():
|
|||
{ # ONVIF::Analytics::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Analytics::Types::PTZVector
|
||||
|
|
|
@ -109,7 +109,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::Analytics::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Analytics::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Analytics::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Analytics::Types::PTZStatus
|
||||
Position => { # ONVIF::Analytics::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::Analytics::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Analytics::Types::PTZVector
|
||||
|
@ -187,7 +187,7 @@ Constructor. The following data structure may be passed to new():
|
|||
TourSpot => { # ONVIF::Analytics::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Analytics::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Analytics::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Analytics::Types::Frame
|
||||
PTZStatus => { # ONVIF::Analytics::Types::PTZStatus
|
||||
Position => { # ONVIF::Analytics::Types::PTZVector
|
||||
|
|
|
@ -49,10 +49,10 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Device::Types::MetadataStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
VideoAnalytics => { # ONVIF::Device::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Device::Types::Frame
|
||||
PTZStatus => { # ONVIF::Device::Types::PTZStatus
|
||||
Position => { # ONVIF::Device::Types::PTZVector
|
||||
|
@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new():
|
|||
},
|
||||
PTZ => { # ONVIF::Device::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Device::Types::PTZStatus
|
||||
Position => { # ONVIF::Device::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -2205,7 +2205,7 @@ of the corresponding class can be passed instead of the marked hash ref.
|
|||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
List items (i.e. multiple occurrences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
@ -2358,7 +2358,7 @@ Returns a L<ONVIF::Device::Elements::GetSystemLogResponse|ONVIF::Device::Element
|
|||
|
||||
=head3 GetSystemSupportInformation
|
||||
|
||||
This operation gets arbitary device diagnostics information from the device.
|
||||
This operation gets arbitrary device diagnostics information from the device.
|
||||
|
||||
Returns a L<ONVIF::Device::Elements::GetSystemSupportInformationResponse|ONVIF::Device::Elements::GetSystemSupportInformationResponse> object.
|
||||
|
||||
|
@ -2602,7 +2602,7 @@ Returns a L<ONVIF::Device::Elements::GetHostnameResponse|ONVIF::Device::Elements
|
|||
|
||||
=head3 SetHostname
|
||||
|
||||
A device shall accept string formated according to RFC 1123 section 2.1 or alternatively to RFC 952, other string shall be considered as invalid strings.
|
||||
A device shall accept string formatted according to RFC 1123 section 2.1 or alternatively to RFC 952, other string shall be considered as invalid strings.
|
||||
|
||||
Returns a L<ONVIF::Device::Elements::SetHostnameResponse|ONVIF::Device::Elements::SetHostnameResponse> object.
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Device::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange
|
||||
X => { # ONVIF::Device::Types::FloatRange
|
||||
|
|
|
@ -139,7 +139,7 @@ get_/set_ methods:
|
|||
|
||||
=item * token
|
||||
|
||||
Token that uniquely refernces this configuration. Length up to 64 characters.
|
||||
Token that uniquely references this configuration. Length up to 64 characters.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -114,10 +114,10 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Device::Types::MetadataStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
VideoAnalytics => { # ONVIF::Device::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Device::Types::Frame
|
||||
PTZStatus => { # ONVIF::Device::Types::PTZStatus
|
||||
Position => { # ONVIF::Device::Types::PTZVector
|
||||
|
@ -220,7 +220,7 @@ Constructor. The following data structure may be passed to new():
|
|||
},
|
||||
PTZ => { # ONVIF::Device::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Device::Types::PTZStatus
|
||||
Position => { # ONVIF::Device::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -107,7 +107,7 @@ Constructor. The following data structure may be passed to new():
|
|||
{ # ONVIF::Device::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Device::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange
|
||||
X => { # ONVIF::Device::Types::FloatRange
|
||||
|
|
|
@ -143,7 +143,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::Device::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Device::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange
|
||||
X => { # ONVIF::Device::Types::FloatRange
|
||||
|
@ -171,7 +171,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::Device::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Device::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange
|
||||
X => { # ONVIF::Device::Types::FloatRange
|
||||
|
|
|
@ -147,7 +147,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::Device::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Device::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange
|
||||
X => { # ONVIF::Device::Types::FloatRange
|
||||
|
@ -175,7 +175,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::Device::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Device::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange
|
||||
X => { # ONVIF::Device::Types::FloatRange
|
||||
|
|
|
@ -114,7 +114,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Device::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Device::Types::PTZVector
|
||||
|
|
|
@ -115,7 +115,7 @@ Constructor. The following data structure may be passed to new():
|
|||
{ # ONVIF::Device::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Device::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Device::Types::PTZVector
|
||||
|
|
|
@ -109,7 +109,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::Device::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Device::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Device::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Device::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Device::Types::PTZStatus
|
||||
Position => { # ONVIF::Device::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::Device::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Device::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Device::Types::PTZVector
|
||||
|
@ -187,7 +187,7 @@ Constructor. The following data structure may be passed to new():
|
|||
TourSpot => { # ONVIF::Device::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Device::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Device::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Device::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Device::Types::Frame
|
||||
PTZStatus => { # ONVIF::Device::Types::PTZStatus
|
||||
Position => { # ONVIF::Device::Types::PTZVector
|
||||
|
|
|
@ -125,7 +125,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::Media::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Media::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange
|
||||
X => { # ONVIF::Media::Types::FloatRange
|
||||
|
@ -153,7 +153,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::Media::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Media::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange
|
||||
X => { # ONVIF::Media::Types::FloatRange
|
||||
|
|
|
@ -49,10 +49,10 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Media::Types::MetadataStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
VideoAnalytics => { # ONVIF::Media::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Media::Types::Frame
|
||||
PTZStatus => { # ONVIF::Media::Types::PTZStatus
|
||||
Position => { # ONVIF::Media::Types::PTZVector
|
||||
|
@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new():
|
|||
},
|
||||
PTZ => { # ONVIF::Media::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Media::Types::PTZStatus
|
||||
Position => { # ONVIF::Media::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -2127,7 +2127,7 @@ of the corresponding class can be passed instead of the marked hash ref.
|
|||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
List items (i.e. multiple occurrences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Media::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange
|
||||
X => { # ONVIF::Media::Types::FloatRange
|
||||
|
|
|
@ -139,7 +139,7 @@ get_/set_ methods:
|
|||
|
||||
=item * token
|
||||
|
||||
Token that uniquely refernces this configuration. Length up to 64 characters.
|
||||
Token that uniquely references this configuration. Length up to 64 characters.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -114,10 +114,10 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Media::Types::MetadataStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
VideoAnalytics => { # ONVIF::Media::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Media::Types::Frame
|
||||
PTZStatus => { # ONVIF::Media::Types::PTZStatus
|
||||
Position => { # ONVIF::Media::Types::PTZVector
|
||||
|
@ -220,7 +220,7 @@ Constructor. The following data structure may be passed to new():
|
|||
},
|
||||
PTZ => { # ONVIF::Media::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Media::Types::PTZStatus
|
||||
Position => { # ONVIF::Media::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -107,7 +107,7 @@ Constructor. The following data structure may be passed to new():
|
|||
{ # ONVIF::Media::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Media::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange
|
||||
X => { # ONVIF::Media::Types::FloatRange
|
||||
|
|
|
@ -143,7 +143,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::Media::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Media::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange
|
||||
X => { # ONVIF::Media::Types::FloatRange
|
||||
|
@ -171,7 +171,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::Media::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Media::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange
|
||||
X => { # ONVIF::Media::Types::FloatRange
|
||||
|
|
|
@ -147,7 +147,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::Media::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Media::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange
|
||||
X => { # ONVIF::Media::Types::FloatRange
|
||||
|
@ -175,7 +175,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::Media::Types::OSDColorOptions
|
||||
Color => { # ONVIF::Media::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange
|
||||
X => { # ONVIF::Media::Types::FloatRange
|
||||
|
|
|
@ -114,7 +114,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Media::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Media::Types::PTZVector
|
||||
|
|
|
@ -115,7 +115,7 @@ Constructor. The following data structure may be passed to new():
|
|||
{ # ONVIF::Media::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Media::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Media::Types::PTZVector
|
||||
|
|
|
@ -109,7 +109,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::Media::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Media::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Media::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Media::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::Media::Types::PTZStatus
|
||||
Position => { # ONVIF::Media::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::Media::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Media::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Media::Types::PTZVector
|
||||
|
@ -187,7 +187,7 @@ Constructor. The following data structure may be passed to new():
|
|||
TourSpot => { # ONVIF::Media::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::Media::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::Media::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::Media::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::Media::Types::Frame
|
||||
PTZStatus => { # ONVIF::Media::Types::PTZStatus
|
||||
Position => { # ONVIF::Media::Types::PTZVector
|
||||
|
|
|
@ -117,7 +117,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
@ -149,7 +149,7 @@ Constructor. The following data structure may be passed to new():
|
|||
TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -117,7 +117,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
@ -149,7 +149,7 @@ Constructor. The following data structure may be passed to new():
|
|||
TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -49,10 +49,10 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::PTZ::Types::MetadataStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
VideoAnalytics => { # ONVIF::PTZ::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::PTZ::Types::Frame
|
||||
PTZStatus => { # ONVIF::PTZ::Types::PTZStatus
|
||||
Position => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new():
|
|||
},
|
||||
PTZ => { # ONVIF::PTZ::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::PTZ::Types::PTZStatus
|
||||
Position => { # ONVIF::PTZ::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -131,7 +131,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
@ -163,7 +163,7 @@ Constructor. The following data structure may be passed to new():
|
|||
TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -775,7 +775,7 @@ of the corresponding class can be passed instead of the marked hash ref.
|
|||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
List items (i.e. multiple occurrences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
@ -1136,7 +1136,7 @@ Returns a L<ONVIF::PTZ::Elements::ModifyPresetTourResponse|ONVIF::PTZ::Elements:
|
|||
CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
@ -1168,7 +1168,7 @@ Returns a L<ONVIF::PTZ::Elements::ModifyPresetTourResponse|ONVIF::PTZ::Elements:
|
|||
TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::PTZ::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange
|
||||
X => { # ONVIF::PTZ::Types::FloatRange
|
||||
|
|
|
@ -139,7 +139,7 @@ get_/set_ methods:
|
|||
|
||||
=item * token
|
||||
|
||||
Token that uniquely refernces this configuration. Length up to 64 characters.
|
||||
Token that uniquely references this configuration. Length up to 64 characters.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -114,10 +114,10 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::PTZ::Types::MetadataStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
VideoAnalytics => { # ONVIF::PTZ::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::PTZ::Types::Frame
|
||||
PTZStatus => { # ONVIF::PTZ::Types::PTZStatus
|
||||
Position => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
@ -220,7 +220,7 @@ Constructor. The following data structure may be passed to new():
|
|||
},
|
||||
PTZ => { # ONVIF::PTZ::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::PTZ::Types::PTZStatus
|
||||
Position => { # ONVIF::PTZ::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -107,7 +107,7 @@ Constructor. The following data structure may be passed to new():
|
|||
{ # ONVIF::PTZ::Types::OSDColorOptions
|
||||
Color => { # ONVIF::PTZ::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange
|
||||
X => { # ONVIF::PTZ::Types::FloatRange
|
||||
|
|
|
@ -143,7 +143,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::PTZ::Types::OSDColorOptions
|
||||
Color => { # ONVIF::PTZ::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange
|
||||
X => { # ONVIF::PTZ::Types::FloatRange
|
||||
|
@ -171,7 +171,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::PTZ::Types::OSDColorOptions
|
||||
Color => { # ONVIF::PTZ::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange
|
||||
X => { # ONVIF::PTZ::Types::FloatRange
|
||||
|
|
|
@ -147,7 +147,7 @@ Constructor. The following data structure may be passed to new():
|
|||
FontColor => { # ONVIF::PTZ::Types::OSDColorOptions
|
||||
Color => { # ONVIF::PTZ::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange
|
||||
X => { # ONVIF::PTZ::Types::FloatRange
|
||||
|
@ -175,7 +175,7 @@ Constructor. The following data structure may be passed to new():
|
|||
BackgroundColor => { # ONVIF::PTZ::Types::OSDColorOptions
|
||||
Color => { # ONVIF::PTZ::Types::ColorOptions
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
ColorList => ,
|
||||
ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange
|
||||
X => { # ONVIF::PTZ::Types::FloatRange
|
||||
|
|
|
@ -114,7 +114,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -115,7 +115,7 @@ Constructor. The following data structure may be passed to new():
|
|||
{ # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -109,7 +109,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::PTZ::Types::PTZStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PTZStatus => { # ONVIF::PTZ::Types::PTZStatus
|
||||
Position => { # ONVIF::PTZ::Types::PTZVector
|
||||
PanTilt => ,
|
||||
|
|
|
@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new():
|
|||
CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
@ -187,7 +187,7 @@ Constructor. The following data structure may be passed to new():
|
|||
TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot
|
||||
PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
PresetToken => $some_value, # ReferenceToken
|
||||
Home => $some_value, # boolean
|
||||
PTZPosition => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new():
|
|||
|
||||
{ # ONVIF::PTZ::Types::VideoAnalyticsStream
|
||||
# One of the following elements.
|
||||
# No occurance checks yet, so be sure to pass just one...
|
||||
# No occurrence checks yet, so be sure to pass just one...
|
||||
Frame => { # ONVIF::PTZ::Types::Frame
|
||||
PTZStatus => { # ONVIF::PTZ::Types::PTZStatus
|
||||
Position => { # ONVIF::PTZ::Types::PTZVector
|
||||
|
|
|
@ -104,7 +104,7 @@ of the corresponding class can be passed instead of the marked hash ref.
|
|||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
List items (i.e. multiple occurrences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
|
|
@ -127,7 +127,7 @@ of the corresponding class can be passed instead of the marked hash ref.
|
|||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
List items (i.e. multiple occurrences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
|
|
@ -127,7 +127,7 @@ of the corresponding class can be passed instead of the marked hash ref.
|
|||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
List items (i.e. multiple occurrences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
|
|
@ -89,8 +89,26 @@ BEGIN
|
|||
close( $CONFIG );
|
||||
|
||||
use DBI;
|
||||
my $socket;
|
||||
my ( $host, $portOrSocket ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ );
|
||||
|
||||
if ( defined($portOrSocket) )
|
||||
{
|
||||
if ( $portOrSocket =~ /^\// )
|
||||
{
|
||||
$socket = ";mysql_socket=".$portOrSocket;
|
||||
}
|
||||
else
|
||||
{
|
||||
$socket = ";host=".$host.";port=".$portOrSocket;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$socket = ";host=".$Config{ZM_DB_HOST};
|
||||
}
|
||||
my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}
|
||||
.";host=".$Config{ZM_DB_HOST}
|
||||
.$socket
|
||||
, $Config{ZM_DB_USER}
|
||||
, $Config{ZM_DB_PASS}
|
||||
) or croak( "Can't connect to db" );
|
||||
|
@ -136,7 +154,7 @@ sub loadConfigFromDB {
|
|||
#print( "Name = '$name'\n" );
|
||||
my $option = $options_hash{$name};
|
||||
if ( !$option ) {
|
||||
warn( "No option '$name' found, removing" );
|
||||
warn( "No option '$name' found, removing.\n" );
|
||||
next;
|
||||
}
|
||||
#next if ( $option->{category} eq 'hidden' );
|
||||
|
|
|
@ -1548,6 +1548,20 @@ our @options =
|
|||
type => $types{string},
|
||||
category => "web",
|
||||
},
|
||||
{
|
||||
name => "ZM_WEB_CONSOLE_BANNER",
|
||||
default => "",
|
||||
description => "Arbitrary text message near the top of the console",
|
||||
help => qqq("
|
||||
Allows the administrator to place an arbitrary text message
|
||||
near the top of the web console. This is useful for the developers
|
||||
to display a message which indicates the running instance of
|
||||
ZoneMinder is a development snapshot, but it can also be used for
|
||||
any other purpose as well.
|
||||
"),
|
||||
type => $types{string},
|
||||
category => "web",
|
||||
},
|
||||
{
|
||||
name => "ZM_WEB_RESIZE_CONSOLE",
|
||||
default => "yes",
|
||||
|
@ -1564,6 +1578,16 @@ our @options =
|
|||
type => $types{boolean},
|
||||
category => "web",
|
||||
},
|
||||
{
|
||||
name => "ZM_WEB_ID_ON_CONSOLE",
|
||||
default => "no",
|
||||
description => "Should the console list the monitor id",
|
||||
help => qqq("Some find it useful to have the id always visible
|
||||
on the console. This option will add a column listing it.
|
||||
"),
|
||||
type => $types{boolean},
|
||||
category => "web",
|
||||
},
|
||||
{
|
||||
name => "ZM_WEB_POPUP_ON_ALARM",
|
||||
default => "yes",
|
||||
|
|
|
@ -0,0 +1,297 @@
|
|||
# ==========================================================================
|
||||
#
|
||||
# ZoneMinder Keekoon Control Protocol Module
|
||||
# This code was mostly derived from other ZM Control modules
|
||||
#
|
||||
# ==========================================================================
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
# ==========================================================================
|
||||
#
|
||||
# Tested: KK002 (22 July 2016)
|
||||
#
|
||||
# Usage:
|
||||
# ======
|
||||
#
|
||||
# Copy this file to say /usr/share/perl5/ZoneMinder/Control (Debian/Ubuntu)
|
||||
#
|
||||
# Create a new Control Capabilities:
|
||||
# Main: Name Keekoon, Type = Remote, Protocol = Keekoon
|
||||
# Move: Can Move, Can Move Diagonally, Can Move Continous
|
||||
# Pan: Can Pan
|
||||
# Tilt: Can Tilt
|
||||
# Presets: Has Presets, Num Presets = 6, Can Set Presets
|
||||
#
|
||||
# Set the ControlAddress in the camera definition, use the format:
|
||||
# http(s)://username:password@address:port
|
||||
#
|
||||
# eg : http://admin:adminpass@10.10.10.1:80
|
||||
# or : https://admin:password@mycamera.example.co.uk:80
|
||||
#
|
||||
# Return Location to Preset 1
|
||||
# Auto Stop Timeout = 0.5 is a good starting point
|
||||
#
|
||||
# ===========================================================================
|
||||
# Problems: Enable debug and watch /tmp/zm_debug.log.<int> The
|
||||
# correct debug log can be found by date stamp.
|
||||
# Enable/disable the Source for the camera in the web GUI
|
||||
# each time you edit this script. If the pid doesn't
|
||||
# change then you have not restarted it.
|
||||
# Errors like this:
|
||||
# [Error in response to Request:'400 URL must be absolute']
|
||||
# means that you have not specified all the parts in ControlAddress or the
|
||||
# Regex has failed to parse it correctly
|
||||
#
|
||||
# =========================================================================
|
||||
# Notes:
|
||||
# Example command from docs, at http://www.keekoonvision.com/for-developers-a:
|
||||
# Up: http://camera_ip:web_port/decoder_control.cgi?command=0&user=username&pwd=password
|
||||
# However the camera actually uses basic auth and not user= etc
|
||||
#
|
||||
# Test URLs with something like this
|
||||
# curl -XGET -u user:pass "http://cam.example.co.uk:80/decoder_control.cgi?command=1
|
||||
#
|
||||
# These cameras have a default admin user but can have six more defined
|
||||
# with membership of three groups
|
||||
# https is not directly supported but could be via say HA Proxy, so that
|
||||
# is included rather than hardstrapping http://
|
||||
# ==========================================================================
|
||||
|
||||
package ZoneMinder::Control::Keekoon;
|
||||
|
||||
use 5.006;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
require ZoneMinder::Control;
|
||||
|
||||
our @ISA = qw(ZoneMinder::Control);
|
||||
|
||||
use ZoneMinder::Logger qw(:all);
|
||||
use ZoneMinder::Config qw(:all);
|
||||
use Time::HiRes qw( usleep );
|
||||
|
||||
sub new
|
||||
{
|
||||
|
||||
my $class = shift;
|
||||
my $id = shift;
|
||||
my $self = ZoneMinder::Control->new( $id );
|
||||
my $logindetails = "";
|
||||
bless( $self, $class );
|
||||
srand( time() );
|
||||
return $self;
|
||||
}
|
||||
|
||||
our $AUTOLOAD;
|
||||
|
||||
sub AUTOLOAD
|
||||
{
|
||||
my $self = shift;
|
||||
my $class = ref( ) || croak( "$self not object" );
|
||||
my $name = $AUTOLOAD;
|
||||
$name =~ s/.*://;
|
||||
if ( exists($self->{$name}) )
|
||||
{
|
||||
return( $self->{$name} );
|
||||
}
|
||||
Fatal( "Can't access $name member of object of class $class" );
|
||||
}
|
||||
|
||||
sub open
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
$self->loadMonitor();
|
||||
|
||||
use LWP::UserAgent;
|
||||
|
||||
$self->{ua} = LWP::UserAgent->new;
|
||||
$self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION );
|
||||
|
||||
$self->{state} = 'open';
|
||||
|
||||
Info( "Open" );
|
||||
|
||||
}
|
||||
|
||||
sub close
|
||||
{
|
||||
my $self = shift;
|
||||
$self->{state} = 'closed';
|
||||
}
|
||||
|
||||
sub printMsg
|
||||
{
|
||||
my $self = shift;
|
||||
my $msg = shift;
|
||||
my $msg_len = length($msg);
|
||||
|
||||
Debug( $msg."[".$msg_len."]" );
|
||||
}
|
||||
|
||||
sub sendCmd
|
||||
{
|
||||
my $self = shift;
|
||||
my $cmd = shift;
|
||||
my $result = undef;
|
||||
|
||||
my ( $PROTOCOL, $USER, $PASS, $ADDR, $PORT )
|
||||
= $self->{Monitor}->{ControlAddress} =~ /^(https?):\/\/(.*):(.*)@(.*):(\d+)$/;
|
||||
my $URL = $PROTOCOL."://".$ADDR.":".$PORT."/decoder_control.cgi?command=".$cmd;
|
||||
|
||||
Debug( "ControlAddress from camera Control setting:".$self->{Monitor}->{ControlAddress} );
|
||||
Debug( "URL parsed from ControlAddress:".$URL);
|
||||
|
||||
my $req = HTTP::Request->new( GET=>$URL );
|
||||
|
||||
# Do Basic Auth
|
||||
$req->authorization_basic($USER, $PASS);
|
||||
|
||||
my $res = $self->{ua}->request($req);
|
||||
|
||||
if ( $res->is_success )
|
||||
{
|
||||
$result = !undef;
|
||||
}
|
||||
else
|
||||
{
|
||||
Error( "Error in response to Request:'".$res->status_line()."'" );
|
||||
}
|
||||
|
||||
return( $result );
|
||||
}
|
||||
|
||||
# Set autoStop timeout on the Control tab for the camera
|
||||
sub autoStop
|
||||
{
|
||||
my $self = shift;
|
||||
my $stop_command = shift;
|
||||
my $autostop = shift;
|
||||
|
||||
if( $stop_command && $autostop)
|
||||
{
|
||||
Debug( "Auto Stop" );
|
||||
usleep( $autostop );
|
||||
my $cmd = $stop_command;
|
||||
$self->sendCmd( $cmd );
|
||||
}
|
||||
}
|
||||
|
||||
sub moveConUp
|
||||
{
|
||||
my $self = shift;
|
||||
my $cmd = "0";
|
||||
my $stop_command = "1";
|
||||
Debug( "Move Up" );
|
||||
$self->sendCmd( $cmd );
|
||||
$self->autoStop( $stop_command, $self->{Monitor}->{AutoStopTimeout} );
|
||||
}
|
||||
|
||||
sub moveConDown
|
||||
{
|
||||
my $self = shift;
|
||||
my $cmd = "2";
|
||||
my $stop_command = "3";
|
||||
Debug( "Move Down" );
|
||||
$self->sendCmd( $cmd );
|
||||
$self->autoStop( $stop_command, $self->{Monitor}->{AutoStopTimeout} );
|
||||
}
|
||||
|
||||
sub moveConLeft
|
||||
{
|
||||
my $self = shift;
|
||||
my $cmd = "4";
|
||||
my $stop_command = "5";
|
||||
Debug( "Move Left" );
|
||||
$self->sendCmd( $cmd );
|
||||
$self->autoStop( $stop_command, $self->{Monitor}->{AutoStopTimeout} );
|
||||
}
|
||||
|
||||
sub moveConRight
|
||||
{
|
||||
my $self = shift;
|
||||
my $cmd = "6";
|
||||
my $stop_command = "7";
|
||||
Debug( "Move Right" );
|
||||
$self->sendCmd( $cmd );
|
||||
$self->autoStop( $stop_command, $self->{Monitor}->{AutoStopTimeout} );
|
||||
}
|
||||
|
||||
sub moveConUpRight
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Move Diagonally Up Right" );
|
||||
$self->moveConUp( );
|
||||
$self->moveConRight( );
|
||||
}
|
||||
|
||||
sub moveConDownRight
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Move Diagonally Down Right" );
|
||||
$self->moveConDown( );
|
||||
$self->moveConRight( );
|
||||
}
|
||||
|
||||
sub moveConUpLeft
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Move Diagonally Up Left" );
|
||||
$self->moveConUp( );
|
||||
$self->moveConLeft( );
|
||||
}
|
||||
|
||||
sub moveConDownLeft
|
||||
{
|
||||
my $self = shift;
|
||||
Debug( "Move Diagonally Down Left" );
|
||||
$self->moveConDown( );
|
||||
$self->moveConLeft( );
|
||||
}
|
||||
|
||||
# SET: 30,32,34,36,38,40 for presets 1-6
|
||||
sub presetSet
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
my $preset = $self->getParam( $params, 'preset' );
|
||||
|
||||
Debug( "Set Preset No: " . $preset );
|
||||
|
||||
if (( $preset >= 1 ) && ( $preset <= 6 )) {
|
||||
my $cmd = (($preset*2) + 28);
|
||||
$self->sendCmd( $cmd );
|
||||
Debug( "Set preset cmd: " . $cmd );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# GOTO: 31,33,35,37,39,41 for presets 1-6
|
||||
sub presetGoto
|
||||
{
|
||||
my $self = shift;
|
||||
my $params = shift;
|
||||
my $preset = $self->getParam( $params, 'preset' );
|
||||
Debug( "Goto Preset No: " . $preset );
|
||||
|
||||
if (( $preset >= 1 ) && ( $preset <= 6 )) {
|
||||
my $cmd = (($preset*2) + 29);
|
||||
$self->sendCmd( $cmd );
|
||||
Debug( "Goto Preset cmd: " . $cmd );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
1;
|
|
@ -79,25 +79,29 @@ sub zmDbConnect
|
|||
}
|
||||
if ( !defined( $dbh ) )
|
||||
{
|
||||
my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ );
|
||||
my $socket;
|
||||
my ( $host, $portOrSocket ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ );
|
||||
|
||||
if ( defined($port) )
|
||||
if ( defined($portOrSocket) )
|
||||
{
|
||||
$dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}
|
||||
.";host=".$host
|
||||
.";port=".$port
|
||||
, $Config{ZM_DB_USER}
|
||||
, $Config{ZM_DB_PASS}
|
||||
);
|
||||
if ( $portOrSocket =~ /^\// )
|
||||
{
|
||||
$socket = ";mysql_socket=".$portOrSocket;
|
||||
}
|
||||
else
|
||||
{
|
||||
$socket = ";host=".$host.";port=".$portOrSocket;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}
|
||||
.";host=".$Config{ZM_DB_HOST}
|
||||
, $Config{ZM_DB_USER}
|
||||
, $Config{ZM_DB_PASS}
|
||||
);
|
||||
$socket = ";host=".$Config{ZM_DB_HOST};
|
||||
}
|
||||
$dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}
|
||||
.$socket
|
||||
, $Config{ZM_DB_USER}
|
||||
, $Config{ZM_DB_PASS}
|
||||
);
|
||||
$dbh->trace( 0 );
|
||||
}
|
||||
return( $dbh );
|
||||
|
|
|
@ -460,25 +460,29 @@ sub databaseLevel
|
|||
{
|
||||
if ( !$this->{dbh} )
|
||||
{
|
||||
my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ );
|
||||
my $socket;
|
||||
my ( $host, $portOrSocket ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ );
|
||||
|
||||
if ( defined($port) )
|
||||
if ( defined($portOrSocket) )
|
||||
{
|
||||
$this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}
|
||||
.";host=".$host
|
||||
.";port=".$port
|
||||
, $Config{ZM_DB_USER}
|
||||
, $Config{ZM_DB_PASS}
|
||||
);
|
||||
if ( $portOrSocket =~ /^\// )
|
||||
{
|
||||
$socket = ";mysql_socket=".$portOrSocket;
|
||||
}
|
||||
else
|
||||
{
|
||||
$socket = ";host=".$host.";port=".$portOrSocket;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}
|
||||
.";host=".$Config{ZM_DB_HOST}
|
||||
, $Config{ZM_DB_USER}
|
||||
, $Config{ZM_DB_PASS}
|
||||
);
|
||||
$socket = ";host=".$Config{ZM_DB_HOST};
|
||||
}
|
||||
$this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}
|
||||
.$socket
|
||||
, $Config{ZM_DB_USER}
|
||||
, $Config{ZM_DB_PASS}
|
||||
);
|
||||
if ( !$this->{dbh} )
|
||||
{
|
||||
$databaseLevel = NOLOG;
|
||||
|
|
|
@ -414,7 +414,7 @@ sub generateVideo
|
|||
or Fatal( "Can't execute '$sql': ".$sth->errstr() );
|
||||
if ( wantarray() )
|
||||
{
|
||||
return( $format, sprintf( "%s/%s", getEventPath( $event ), $output ) );
|
||||
return( $format, $output );
|
||||
}
|
||||
}
|
||||
return( 1 );
|
||||
|
|
|
@ -412,15 +412,12 @@ if ( $version )
|
|||
{
|
||||
my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ );
|
||||
my $command = "mysqldump";
|
||||
$command .= " -h".$host if defined($host);
|
||||
$command .= " -h".$host if defined($host);
|
||||
$command .= " -P".$port if defined($port);
|
||||
if ( $dbUser )
|
||||
{
|
||||
$command .= " -u".$dbUser;
|
||||
if ( $dbPass )
|
||||
{
|
||||
$command .= " -p".$dbPass;
|
||||
}
|
||||
$command .= ' -u'.$dbUser;
|
||||
$command .= ' -p"'.$dbPass.'"' if $dbPass;
|
||||
}
|
||||
my $backup = "@ZM_TMPDIR@/".$Config{ZM_DB_NAME}."-".$version.".dump";
|
||||
$command .= " --add-drop-table --databases ".$Config{ZM_DB_NAME}." > ".$backup;
|
||||
|
@ -458,10 +455,7 @@ if ( $version )
|
|||
if ( $dbUser )
|
||||
{
|
||||
$command .= " -u".$dbUser;
|
||||
if ( $dbPass )
|
||||
{
|
||||
$command .= " -p".$dbPass;
|
||||
}
|
||||
$command .= ' -p"'.$dbPass.'"' if $dbPass;
|
||||
}
|
||||
$command .= " ".$Config{ZM_DB_NAME}." < ";
|
||||
if ( $updateDir )
|
||||
|
|
|
@ -222,6 +222,7 @@ foreach my $event_id ( @event_ids ) {
|
|||
my $video_file = $Event->GenerateVideo( $rate, $fps, $scale, $size, $overwrite, $format );
|
||||
if ( $video_file ) {
|
||||
push @video_files, $video_file;
|
||||
print( STDOUT $video_file."\n" );
|
||||
}
|
||||
} # end foreach event_id
|
||||
|
||||
|
@ -253,9 +254,6 @@ if ( $concat_name ) {
|
|||
Error( "Unable to generate video, check /ffmpeg.log for details");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
print( STDOUT $video_file."\n" );
|
||||
}
|
||||
#unlink $input_file_list;
|
||||
#print( STDOUT $event->{MonitorId}.'/'.$event->{Id}.'/'.$video_file."\n" );
|
||||
#print( STDOUT $video_file."\n" );
|
||||
exit( 0 );
|
||||
|
|
|
@ -37,12 +37,10 @@ void zmDbConnect()
|
|||
my_bool reconnect = 1;
|
||||
if ( mysql_options( &dbconn, MYSQL_OPT_RECONNECT, &reconnect ) )
|
||||
Fatal( "Can't set database auto reconnect option: %s", mysql_error( &dbconn ) );
|
||||
std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":/" );
|
||||
if ( colonIndex != std::string::npos )
|
||||
std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":" );
|
||||
if ( colonIndex == std::string::npos )
|
||||
{
|
||||
std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex );
|
||||
std::string dbPort = staticConfig.DB_HOST.substr( colonIndex+1 );
|
||||
if ( !mysql_real_connect( &dbconn, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), 0, atoi(dbPort.c_str()), 0, 0 ) )
|
||||
if ( !mysql_real_connect( &dbconn, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, NULL, 0 ) )
|
||||
{
|
||||
Error( "Can't connect to server: %s", mysql_error( &dbconn ) );
|
||||
exit( mysql_errno( &dbconn ) );
|
||||
|
@ -50,10 +48,24 @@ void zmDbConnect()
|
|||
}
|
||||
else
|
||||
{
|
||||
if ( !mysql_real_connect( &dbconn, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), 0, 0, 0, 0 ) )
|
||||
std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex );
|
||||
std::string dbPortOrSocket = staticConfig.DB_HOST.substr( colonIndex+1 );
|
||||
if ( dbPortOrSocket[0] == '/' )
|
||||
{
|
||||
Error( "Can't connect to server: %s", mysql_error( &dbconn ) );
|
||||
exit( mysql_errno( &dbconn ) );
|
||||
if ( !mysql_real_connect( &dbconn, NULL, staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, dbPortOrSocket.c_str(), 0 ) )
|
||||
{
|
||||
Error( "Can't connect to server: %s", mysql_error( &dbconn ) );
|
||||
exit( mysql_errno( &dbconn ) );
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !mysql_real_connect( &dbconn, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, atoi(dbPortOrSocket.c_str()), NULL, 0 ) )
|
||||
{
|
||||
Error( "Can't connect to server: %s", mysql_error( &dbconn ) );
|
||||
exit( mysql_errno( &dbconn ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( mysql_select_db( &dbconn, staticConfig.DB_NAME.c_str() ) )
|
||||
|
|
|
@ -238,6 +238,8 @@ int FfmpegCamera::OpenFfmpeg() {
|
|||
|
||||
Debug ( 2, "OpenFfmpeg called." );
|
||||
|
||||
int ret;
|
||||
|
||||
mOpenStart = time(NULL);
|
||||
mIsOpening = true;
|
||||
|
||||
|
@ -248,37 +250,24 @@ int FfmpegCamera::OpenFfmpeg() {
|
|||
#else
|
||||
// Handle options
|
||||
AVDictionary *opts = 0;
|
||||
StringVector opVect = split(Options(), ",");
|
||||
|
||||
// Set transport method as specified by method field, rtpUni is default
|
||||
if ( Method() == "rtpMulti" )
|
||||
opVect.push_back("rtsp_transport=udp_multicast");
|
||||
else if ( Method() == "rtpRtsp" )
|
||||
opVect.push_back("rtsp_transport=tcp");
|
||||
else if ( Method() == "rtpRtspHttp" )
|
||||
opVect.push_back("rtsp_transport=http");
|
||||
|
||||
Debug(2, "Number of Options: %d",opVect.size());
|
||||
for (size_t i=0; i<opVect.size(); i++)
|
||||
{
|
||||
StringVector parts = split(opVect[i],"=");
|
||||
if (parts.size() > 1) {
|
||||
parts[0] = trimSpaces(parts[0]);
|
||||
parts[1] = trimSpaces(parts[1]);
|
||||
if ( av_dict_set(&opts, parts[0].c_str(), parts[1].c_str(), 0) == 0 ) {
|
||||
Debug(2, "set option %d '%s' to '%s'", i, parts[0].c_str(), parts[1].c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning( "Error trying to set option %d '%s' to '%s'", i, parts[0].c_str(), parts[1].c_str() );
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning( "Unable to parse ffmpeg option %d '%s', expecting key=value", i, opVect[i].c_str() );
|
||||
}
|
||||
ret = av_dict_parse_string(&opts, Options().c_str(), "=", ",", 0);
|
||||
if (ret < 0) {
|
||||
Warning("Could not parse ffmpeg input options list '%s'\n", Options().c_str());
|
||||
}
|
||||
|
||||
// Set transport method as specified by method field, rtpUni is default
|
||||
if (Method() == "rtpMulti") {
|
||||
ret = av_dict_set(&opts, "rtsp_transport", "udp_multicast", 0);
|
||||
} else if (Method() == "rtpRtsp") {
|
||||
ret = av_dict_set(&opts, "rtsp_transport", "tcp", 0);
|
||||
} else if (Method() == "rtpRtspHttp") {
|
||||
ret = av_dict_set(&opts, "rtsp_transport", "http", 0);
|
||||
}
|
||||
|
||||
if (ret < 0) {
|
||||
Warning("Could not set rtsp_transport method '%s'\n", Method().c_str());
|
||||
}
|
||||
|
||||
Debug ( 1, "Calling avformat_open_input" );
|
||||
|
||||
mFormatContext = avformat_alloc_context( );
|
||||
|
|
|
@ -324,7 +324,7 @@ uint8_t* Image::WriteBuffer(const unsigned int p_width, const unsigned int p_hei
|
|||
}
|
||||
|
||||
if(!p_height || !p_width) {
|
||||
Error("WriteBuffer called with invaid width or height: %d %d",p_width,p_height);
|
||||
Error("WriteBuffer called with invalid width or height: %d %d",p_width,p_height);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -367,12 +367,10 @@ Logger::Level Logger::databaseLevel( Logger::Level databaseLevel )
|
|||
my_bool reconnect = 1;
|
||||
if ( mysql_options( &mDbConnection, MYSQL_OPT_RECONNECT, &reconnect ) )
|
||||
Fatal( "Can't set database auto reconnect option: %s", mysql_error( &mDbConnection ) );
|
||||
std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":/" );
|
||||
if ( colonIndex != std::string::npos )
|
||||
std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":" );
|
||||
if ( colonIndex == std::string::npos )
|
||||
{
|
||||
std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex );
|
||||
std::string dbPort = staticConfig.DB_HOST.substr( colonIndex+1 );
|
||||
if ( !mysql_real_connect( &mDbConnection, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), 0, atoi(dbPort.c_str()), 0, 0 ) )
|
||||
if ( !mysql_real_connect( &mDbConnection, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, NULL, 0 ) )
|
||||
{
|
||||
Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) );
|
||||
exit( mysql_errno( &mDbConnection ) );
|
||||
|
@ -380,10 +378,23 @@ Logger::Level Logger::databaseLevel( Logger::Level databaseLevel )
|
|||
}
|
||||
else
|
||||
{
|
||||
if ( !mysql_real_connect( &mDbConnection, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), 0, 0, 0, 0 ) )
|
||||
std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex );
|
||||
std::string dbPortOrSocket = staticConfig.DB_HOST.substr( colonIndex+1 );
|
||||
if ( dbPortOrSocket[0] == '/' )
|
||||
{
|
||||
Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) );
|
||||
exit( mysql_errno( &mDbConnection ) );
|
||||
if ( !mysql_real_connect( &mDbConnection, NULL, staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, dbPortOrSocket.c_str(), 0 ) )
|
||||
{
|
||||
Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) );
|
||||
exit( mysql_errno( &mDbConnection ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !mysql_real_connect( &mDbConnection, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, atoi(dbPortOrSocket.c_str()), NULL, 0 ) )
|
||||
{
|
||||
Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) );
|
||||
exit( mysql_errno( &mDbConnection ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
unsigned long mysqlVersion = mysql_get_server_version( &mDbConnection );
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Start MySQL
|
||||
/usr/bin/mysqld_safe &
|
||||
|
||||
# Give MySQL time to wake up
|
||||
SECONDS_LEFT=120
|
||||
while true; do
|
||||
sleep 1
|
||||
mysqladmin ping
|
||||
if [ $? -eq 0 ];then
|
||||
break; # Success
|
||||
fi
|
||||
let SECONDS_LEFT=SECONDS_LEFT-1
|
||||
|
||||
# If we have waited >120 seconds, give up
|
||||
# ZM should never have a database that large!
|
||||
# if $COUNTER -lt 120
|
||||
if [ $SECONDS_LEFT -eq 0 ];then
|
||||
return -1;
|
||||
fi
|
||||
done
|
||||
|
||||
# Create the ZoneMinder database
|
||||
mysql -u root < db/zm_create.sql
|
||||
|
||||
# Add the ZoneMinder DB user
|
||||
mysql -u root -e "grant insert,select,update,delete,lock tables,alter on zm.* to 'zmuser'@'localhost' identified by 'zmpass';"
|
||||
|
||||
# Activate CGI
|
||||
a2enmod cgi
|
||||
|
||||
# Activate modrewrite
|
||||
a2enmod rewrite
|
||||
|
||||
# Shut down mysql cleanly:
|
||||
kill $(cat /var/run/mysqld/mysqld.pid)
|
||||
sleep 5
|
||||
|
||||
exit 0
|
|
@ -9,6 +9,9 @@ mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm
|
|||
# Start MySQL
|
||||
/usr/bin/mysqld_safe &
|
||||
|
||||
# Ensure we shut down mysql cleanly later:
|
||||
trap close_mysql SIGTERM
|
||||
|
||||
# Give MySQL time to wake up
|
||||
SECONDS_LEFT=120
|
||||
while true; do
|
||||
|
@ -27,18 +30,6 @@ while true; do
|
|||
fi
|
||||
done
|
||||
|
||||
# Create the ZoneMinder database
|
||||
mysql -u root < db/zm_create.sql
|
||||
|
||||
# Add the ZoneMinder DB user
|
||||
mysql -u root -e "grant insert,select,update,delete,lock tables,alter on zm.* to 'zmuser'@'localhost' identified by 'zmpass';"
|
||||
|
||||
# Activate CGI
|
||||
a2enmod cgi
|
||||
|
||||
# Activate modrewrite
|
||||
a2enmod rewrite
|
||||
|
||||
# Restart apache
|
||||
service apache2 restart
|
||||
|
||||
|
@ -46,4 +37,14 @@ service apache2 restart
|
|||
/usr/local/bin/zmpkg.pl start
|
||||
|
||||
# Start SSHD
|
||||
/usr/sbin/sshd -D
|
||||
/usr/sbin/sshd
|
||||
|
||||
while :
|
||||
do
|
||||
sleep 3600
|
||||
done
|
||||
|
||||
function close_mysql {
|
||||
kill $(cat /var/run/mysqld/mysqld.pid)
|
||||
sleep 5
|
||||
}
|
||||
|
|
|
@ -30,8 +30,20 @@ function dbConnect()
|
|||
{
|
||||
global $dbConn;
|
||||
|
||||
if (strpos(ZM_DB_HOST, ':')) {
|
||||
// Host variable may carry a port or socket.
|
||||
list($host, $portOrSocket) = explode(':', ZM_DB_HOST, 2);
|
||||
if (is_numeric($portOrSocket)) {
|
||||
$socket = ':host='.$host . ';port='.$portOrSocket;
|
||||
} else {
|
||||
$socket = ':unix_socket='.$portOrSocket;
|
||||
}
|
||||
} else {
|
||||
$socket = ':host='.ZM_DB_HOST;
|
||||
}
|
||||
|
||||
try {
|
||||
$dbConn = new PDO( ZM_DB_TYPE . ':host=' . ZM_DB_HOST . ';dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS );
|
||||
$dbConn = new PDO( ZM_DB_TYPE . $socket . ';dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS );
|
||||
$dbConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
} catch(PDOException $ex ) {
|
||||
echo "Unable to connect to ZM db." . $ex->getMessage();
|
||||
|
|
|
@ -182,6 +182,9 @@ $seqDownFile = getSkinFile( 'graphics/seq-d.gif' );
|
|||
|
||||
$versionClass = (ZM_DYN_DB_VERSION&&(ZM_DYN_DB_VERSION!=ZM_VERSION))?'errorText':'';
|
||||
|
||||
$left_columns = 3;
|
||||
if ( count($servers) ) $left_columns += 1;
|
||||
if ( ZM_WEB_ID_ON_CONSOLE ) $left_columns += 1;
|
||||
|
||||
xhtmlHeaders( __FILE__, translate('Console') );
|
||||
?>
|
||||
|
@ -195,6 +198,7 @@ xhtmlHeaders( __FILE__, translate('Console') );
|
|||
<h3 id="systemStats"><?php echo translate('Load') ?>: <?php echo getLoad() ?> / <?php echo translate('Disk') ?>: <?php echo getDiskPercent() ?>%</h3>
|
||||
<h2 id="title"><a href="http://www.zoneminder.com" target="ZoneMinder">ZoneMinder</a> <?php echo translate('Console') ?> - <?php echo makePopupLink( '?view=state', 'zmState', 'state', $status, canEdit( 'System' ) ) ?> - <?php echo $run_state ?> <?php echo makePopupLink( '?view=version', 'zmVersion', 'version', '<span class="'.$versionClass.'">v'.ZM_VERSION.'</span>', canEdit( 'System' ) ) ?></h2>
|
||||
<div class="clear"></div>
|
||||
<h3 id="development"><center><?php echo ZM_WEB_CONSOLE_BANNER ?></center></h3>
|
||||
<div id="monitorSummary"><?php echo makePopupLink( '?view=groups', 'zmGroups', 'groups', sprintf( $CLANG['MonitorCount'], count($displayMonitors), zmVlang( $VLANG['Monitor'], count($displayMonitors) ) ).($group?' ('.$group['Name'].')':''), canView( 'Groups' ) ); ?></div>
|
||||
<?php
|
||||
if ( ZM_OPT_X10 && canView( 'Devices' ) )
|
||||
|
@ -241,6 +245,9 @@ else
|
|||
<table id="consoleTable" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if ( ZM_WEB_ID_ON_CONSOLE ) { ?>
|
||||
<th class="colId"><?php echo translate('Id') ?></th>
|
||||
<?php } ?>
|
||||
<th class="colName"><?php echo translate('Name') ?></th>
|
||||
<th class="colFunction"><?php echo translate('Function') ?></th>
|
||||
<?php if ( count($servers) ) { ?>
|
||||
|
@ -269,7 +276,7 @@ if ( canEdit('Monitors') )
|
|||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="colLeftButtons" colspan="<?php echo count($servers) ? 4 : 3 ?>">
|
||||
<td class="colLeftButtons" colspan="<?php echo $left_columns ?>">
|
||||
<input type="button" value="<?php echo translate('Refresh') ?>" onclick="location.reload(true);"/>
|
||||
<input type="button" name="addBtn" value="<?php echo translate('AddNewMonitor') ?>" onclick="addMonitor( this )"/>
|
||||
<!-- <?php echo makePopupButton( '?view=monitor', 'zmMonitor0', 'monitor', translate('AddNewMonitor'), (canEdit( 'Monitors' ) && !$user['MonitorIds']) ) ?> -->
|
||||
|
@ -315,6 +322,9 @@ foreach( $displayMonitors as $monitor )
|
|||
$fclass .= " disabledText";
|
||||
$scale = max( reScale( SCALE_BASE, $monitor['DefaultScale'], ZM_WEB_DEFAULT_SCALE ), SCALE_BASE );
|
||||
?>
|
||||
<?php if ( ZM_WEB_ID_ON_CONSOLE ) { ?>
|
||||
<td class="colId"><?php echo makePopupLink( '?view=watch&mid='.$monitor['Id'], 'zmWatch'.$monitor['Id'], array( 'watch', reScale( $monitor['Width'], $scale ), reScale( $monitor['Height'], $scale ) ), $monitor['Id'], $running && ($monitor['Function'] != 'None') && canView( 'Stream' ) ) ?></td>
|
||||
<?php } ?>
|
||||
<td class="colName"><?php echo makePopupLink( '?view=watch&mid='.$monitor['Id'], 'zmWatch'.$monitor['Id'], array( 'watch', reScale( $monitor['Width'], $scale ), reScale( $monitor['Height'], $scale ) ), $monitor['Name'], $running && ($monitor['Function'] != 'None') && canView( 'Stream' ) ) ?></td>
|
||||
<td class="colFunction"><?php echo makePopupLink( '?view=function&mid='.$monitor['Id'], 'zmFunction', 'function', '<span class="'.$fclass.'">'.translate('Fn'.$monitor['Function']).( empty($monitor['Enabled']) ? ', disabled' : '' ) .'</span>', canEdit( 'Monitors' ) ) ?></td>
|
||||
<?php if ( count($servers) ) { ?>
|
||||
|
|
Loading…
Reference in New Issue