Onvif
Things to remember when with ONVIF
Generic notes and reminders since onvif compatible systems are usually not documented well and have different syntax. Also some manufacturers LIE, the bastards!
First NMAP the subnet looking for the camera
sudo nmap 192.168.15.218 Starting Nmap 7.80 ( https://nmap.org ) at 2023-05-28 11:22 PDT Nmap scan report for 192.168.15.218 Host is up (0.013s latency). Not shown: 997 closed ports PORT STATE SERVICE 554/tcp open rtsp 8800/tcp open sunwebadmin 8899/tcp open ospf-lite MAC Address: B4:FB:E3:A4:FC:BB (Unknown)
Attempt to retrieve onvif data. This should return SOMETHING if it is at least somewhat compatible.
There is a good chance that you will have to try each of the ports to see which responds to the curl command
curl -L http://192.168.15.218:8899/onvif <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsdd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:chan="http://schemas.microsoft.com/ws/2005/02/duplex" xmlns:wsa5="http://www.w3.org/2005/08/addressing" xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:wsc="http://schemas.xmlsoap.org/ws/2005/02/sc" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xmime="http://tempuri.org/xmime.xsd" xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tev="http://www.onvif.org/ver10/events/wsdl" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:timg="http://www.onvif.org/ver20/imaging/wsdl" xmlns:tmd="http://www.onvif.org/ver10/deviceIO/wsdl" xmlns:tptz="http://www.onvif.org/ver20/ptz/wsdl" xmlns:trc="http://www.onvif.org/ver10/recording/wsdl" xmlns:trt="http://www.onvif.org/ver10/media/wsdl"><faultcode>SOAP-ENV:Client</faultcode><faultstring>HTTP GET method not implemented</faultstring></SOAP-ENV:Fault>
From what I have seen even the crap cameras at least honor rtsp being on port 554 and vendors dont get too cute with that.
Attempting to get the motion controls working. This is where the real PITA comes into play. Every vendor seems to implement the commands in their own unique way. I suspect it has to do with a basic vendor lock so you are stuck with their crap software on your phone. TCPDUMP is useful in this case as well as simply poking at the camera until you get a response.
In Zoneminder, you can attempt to poke at the cam using the zmonvif-probe.pl, and sometimes get good info back.
root@5c0161bd77e2:/# /usr/bin/zmonvif-probe.pl -v profiles http://192.168.15.218:8899/onvif/device_service 1.1 USERNAME PASSWORD -v No results from GetCapabilities: <Fault xmlns="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>SOAP-ENV:Client</faultcode><faultstring>End of file or no input: Operation interrupted or timed out</faultstring></Fault> Received message: <GetProfilesResponse xmlns="http://www.onvif.org/ver10/media/wsdl"><Profiles token="stream0_0" fixed="false"><Name xmlns="http://www.onvif.org/ver10/schema">stream0_0</Name><VideoSourceConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>VideoSourceConfiguration0</Name><UseCount>2</UseCount><SourceToken>VideoSource0</SourceToken><Bounds x="0" y="0" width="1920" height="1080"></Bounds></VideoSourceConfiguration><VideoEncoderConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>VideoEncoderConfiguration0_0</Name><UseCount>2</UseCount><Encoding>H264</Encoding><Resolution><Width>1920</Width><Height>1080</Height></Resolution><Quality>5</Quality><RateControl><FrameRateLimit>15</FrameRateLimit><EncodingInterval>1</EncodingInterval><BitrateLimit>1400</BitrateLimit></RateControl><H264><GovLength>60</GovLength><H264Profile>High</H264Profile></H264><Multicast></Multicast><SessionTimeout>PT0S</SessionTimeout></VideoEncoderConfiguration><PTZConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>Anv_ptz_0</Name><UseCount>2</UseCount><NodeToken>Anv_ptz_node_0</NodeToken><DefaultContinuousPanTiltVelocitySpace>http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace</DefaultContinuousPanTiltVelocitySpace><DefaultContinuousZoomVelocitySpace>http://www.onvif.org/ver10/tptz/ZoomSpaces/VelocityGenericSpace</DefaultContinuousZoomVelocitySpace><DefaultPTZTimeout>PT0H0M0.010S</DefaultPTZTimeout></PTZConfiguration></Profiles><Profiles token="stream0_1" fixed="false"><Name xmlns="http://www.onvif.org/ver10/schema">stream0_1</Name><VideoSourceConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>VideoSourceConfiguration1</Name><UseCount>2</UseCount><SourceToken>VideoSource0</SourceToken><Bounds x="0" y="0" width="640" height="480"></Bounds></VideoSourceConfiguration><VideoEncoderConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>VideoEncoderConfiguration0_1</Name><UseCount>2</UseCount><Encoding>H264</Encoding><Resolution><Width>640</Width><Height>480</Height></Resolution><Quality>5</Quality><RateControl><FrameRateLimit>25</FrameRateLimit><EncodingInterval>1</EncodingInterval><BitrateLimit>640</BitrateLimit></RateControl><H264><GovLength>60</GovLength><H264Profile>Main</H264Profile></H264><Multicast></Multicast><SessionTimeout>PT0S</SessionTimeout></VideoEncoderConfiguration><PTZConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>Anv_ptz_1</Name><UseCount>2</UseCount><NodeToken>Anv_ptz_node_1</NodeToken><DefaultContinuousPanTiltVelocitySpace>http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace</DefaultContinuousPanTiltVelocitySpace><DefaultContinuousZoomVelocitySpace>http://www.onvif.org/ver10/tptz/ZoomSpaces/VelocityGenericSpace</DefaultContinuousZoomVelocitySpace><DefaultPTZTimeout>PT0H0M0.010S</DefaultPTZTimeout></PTZConfiguration></Profiles></GetProfilesResponse> stream0_0, stream0_0, H264, 1920, 1080, 15, rtsp://192.168.15.218/live/ch00_1 stream0_1, stream0_1, H264, 640, 480, 25, rtsp://192.168.15.218/live/ch00_0
Take the XML output and drop it in a file. Then run it through xml2 so it is readable.
at /tmp/xml | xml2 /GetProfilesResponse/@xmlns=http://www.onvif.org/ver10/media/wsdl /GetProfilesResponse/Profiles/@token=stream0_0 /GetProfilesResponse/Profiles/@fixed=false /GetProfilesResponse/Profiles/Name/@xmlns=http://www.onvif.org/ver10/schema /GetProfilesResponse/Profiles/Name=stream0_0 /GetProfilesResponse/Profiles/VideoSourceConfiguration/@xmlns=http://www.onvif.org/ver10/schema /GetProfilesResponse/Profiles/VideoSourceConfiguration/Name=VideoSourceConfiguration0 /GetProfilesResponse/Profiles/VideoSourceConfiguration/UseCount=2 /GetProfilesResponse/Profiles/VideoSourceConfiguration/SourceToken=VideoSource0 /GetProfilesResponse/Profiles/VideoSourceConfiguration/Bounds/@x=0 /GetProfilesResponse/Profiles/VideoSourceConfiguration/Bounds/@y=0 /GetProfilesResponse/Profiles/VideoSourceConfiguration/Bounds/@width=1920 /GetProfilesResponse/Profiles/VideoSourceConfiguration/Bounds/@height=1080 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/@xmlns=http://www.onvif.org/ver10/schema /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Name=VideoEncoderConfiguration0_0 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/UseCount=2 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Encoding=H264 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Resolution/Width=1920 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Resolution/Height=1080 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Quality=5 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/RateControl/FrameRateLimit=15 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/RateControl/EncodingInterval=1 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/RateControl/BitrateLimit=1400 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/H264/GovLength=60 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/H264/H264Profile=High /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Multicast /GetProfilesResponse/Profiles/VideoEncoderConfiguration/SessionTimeout=PT0S /GetProfilesResponse/Profiles/PTZConfiguration/@xmlns=http://www.onvif.org/ver10/schema /GetProfilesResponse/Profiles/PTZConfiguration/Name=Anv_ptz_0 /GetProfilesResponse/Profiles/PTZConfiguration/UseCount=2 /GetProfilesResponse/Profiles/PTZConfiguration/NodeToken=Anv_ptz_node_0 /GetProfilesResponse/Profiles/PTZConfiguration/DefaultContinuousPanTiltVelocitySpace=http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace /GetProfilesResponse/Profiles/PTZConfiguration/DefaultContinuousZoomVelocitySpace=http://www.onvif.org/ver10/tptz/ZoomSpaces/VelocityGenericSpace /GetProfilesResponse/Profiles/PTZConfiguration/DefaultPTZTimeout=PT0H0M0.010S /GetProfilesResponse/Profiles /GetProfilesResponse/Profiles/@token=stream0_1 /GetProfilesResponse/Profiles/@fixed=false /GetProfilesResponse/Profiles/Name/@xmlns=http://www.onvif.org/ver10/schema /GetProfilesResponse/Profiles/Name=stream0_1 /GetProfilesResponse/Profiles/VideoSourceConfiguration/@xmlns=http://www.onvif.org/ver10/schema /GetProfilesResponse/Profiles/VideoSourceConfiguration/Name=VideoSourceConfiguration1 /GetProfilesResponse/Profiles/VideoSourceConfiguration/UseCount=2 /GetProfilesResponse/Profiles/VideoSourceConfiguration/SourceToken=VideoSource0 /GetProfilesResponse/Profiles/VideoSourceConfiguration/Bounds/@x=0 /GetProfilesResponse/Profiles/VideoSourceConfiguration/Bounds/@y=0 /GetProfilesResponse/Profiles/VideoSourceConfiguration/Bounds/@width=640 /GetProfilesResponse/Profiles/VideoSourceConfiguration/Bounds/@height=480 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/@xmlns=http://www.onvif.org/ver10/schema /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Name=VideoEncoderConfiguration0_1 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/UseCount=2 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Encoding=H264 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Resolution/Width=640 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Resolution/Height=480 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Quality=5 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/RateControl/FrameRateLimit=25 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/RateControl/EncodingInterval=1 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/RateControl/BitrateLimit=640 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/H264/GovLength=60 /GetProfilesResponse/Profiles/VideoEncoderConfiguration/H264/H264Profile=Main /GetProfilesResponse/Profiles/VideoEncoderConfiguration/Multicast /GetProfilesResponse/Profiles/VideoEncoderConfiguration/SessionTimeout=PT0S /GetProfilesResponse/Profiles/PTZConfiguration/@xmlns=http://www.onvif.org/ver10/schema /GetProfilesResponse/Profiles/PTZConfiguration/Name=Anv_ptz_1 /GetProfilesResponse/Profiles/PTZConfiguration/UseCount=2 /GetProfilesResponse/Profiles/PTZConfiguration/NodeToken=Anv_ptz_node_1 /GetProfilesResponse/Profiles/PTZConfiguration/DefaultContinuousPanTiltVelocitySpace=http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace /GetProfilesResponse/Profiles/PTZConfiguration/DefaultContinuousZoomVelocitySpace=http://www.onvif.org/ver10/tptz/ZoomSpaces/VelocityGenericSpace /GetProfilesResponse/Profiles/PTZConfiguration/DefaultPTZTimeout=PT0H0M0.010S
Generic PTZ Cameras that I have figured the settings out for https://wiki.zoneminder.com/Netcat
Controllable checked Control Type Netcat ONVIF Control Device NONE/ Profile_1/ Profile????/ETC Control Address user:pass@!IP:port / IP:port Auto Stop Timeout none/0.50/1.00
After adding the hack to keep this OFF Chinese servers, ONVIF is now working..
root@5c0161bd77e2:/usr/bin# ./zmonvif-probe.pl -v profiles http://192.168.15.204:80/onvif/device_service 1.2 root Received message: <GetProfilesResponse xmlns="http://www.onvif.org/ver10/media/wsdl"><Profiles token="Profile_1" fixed="true"><Name xmlns="http://www.onvif.org/ver10/schema">mainStream</Name><VideoSourceConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>VideoSourceConfig</Name><UseCount>2</UseCount><SourceToken>VideoSource_1</SourceToken><Bounds x="0" y="0" width="1920" height="1080"></Bounds></VideoSourceConfiguration><AudioSourceConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>AudioSourceConfig</Name><UseCount>2</UseCount><SourceToken>AudioSourceChannel1</SourceToken></AudioSourceConfiguration><VideoEncoderConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>VideoEncoder_1</Name><UseCount>1</UseCount><Encoding>H264</Encoding><Resolution><Width>1920</Width><Height>1080</Height></Resolution><Quality>10.000000</Quality><RateControl><FrameRateLimit>0</FrameRateLimit><EncodingInterval>1</EncodingInterval><BitrateLimit>0</BitrateLimit></RateControl><H264><GovLength>100</GovLength><H264Profile>Baseline</H264Profile></H264><Multicast><Address><Type>IPv4</Type><IPv4Address>224.1.2.3</IPv4Address></Address><Port>10000</Port><TTL>1</TTL><AutoStart>false</AutoStart></Multicast><SessionTimeout>PT5S</SessionTimeout></VideoEncoderConfiguration><PTZConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>PTZ</Name><UseCount>2</UseCount><NodeToken>PTZNODETOKEN</NodeToken><DefaultAbsolutePantTiltPositionSpace>http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace</DefaultAbsolutePantTiltPositionSpace><DefaultAbsoluteZoomPositionSpace>http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace</DefaultAbsoluteZoomPositionSpace><DefaultRelativePanTiltTranslationSpace>http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace</DefaultRelativePanTiltTranslationSpace><DefaultRelativeZoomTranslationSpace>http://www.onvif.org/ver10/tptz/ZoomSpaces/TranslationGenericSpace</DefaultRelativeZoomTranslationSpace><DefaultContinuousPanTiltVelocitySpace>http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace</DefaultContinuousPanTiltVelocitySpace><DefaultContinuousZoomVelocitySpace>http://www.onvif.org/ver10/tptz/ZoomSpaces/VelocityGenericSpace</DefaultContinuousZoomVelocitySpace><DefaultPTZSpeed><PanTilt x="0.100000" y="0.100000" space="http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace"></PanTilt><Zoom x="1.000000" space="http://www.onvif.org/ver10/tptz/ZoomSpaces/ZoomGenericSpeedSpace"></Zoom></DefaultPTZSpeed><DefaultPTZTimeout>PT1S</DefaultPTZTimeout><PanTiltLimits><Range><URI>http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace</URI><XRange><Min>-INF</Min><Max>INF</Max></XRange><YRange><Min>-INF</Min><Max>INF</Max></YRange></Range></PanTiltLimits><ZoomLimits><Range><URI>http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace</URI><XRange><Min>-INF</Min><Max>INF</Max></XRange></Range></ZoomLimits></PTZConfiguration><MetadataConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>metaData</Name><UseCount>2</UseCount><PTZStatus><Status>true</Status><Position>true</Position></PTZStatus><Analytics>false</Analytics><Multicast><Address><Type>IPv4</Type><IPv4Address>224.1.2.3</IPv4Address></Address><Port>10000</Port><TTL>1</TTL><AutoStart>false</AutoStart></Multicast><SessionTimeout>PT0S</SessionTimeout></MetadataConfiguration></Profiles><Profiles token="Profile_2" fixed="true"><Name xmlns="http://www.onvif.org/ver10/schema">subStream</Name><VideoSourceConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>VideoSourceConfig</Name><UseCount>2</UseCount><SourceToken>VideoSource_1</SourceToken><Bounds x="0" y="0" width="1920" height="1080"></Bounds></VideoSourceConfiguration><AudioSourceConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>AudioSourceConfig</Name><UseCount>2</UseCount><SourceToken>AudioSourceChannel1</SourceToken></AudioSourceConfiguration><VideoEncoderConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>VideoEncoder_2</Name><UseCount>1</UseCount><Encoding>H264</Encoding><Resolution><Width>640</Width><Height>352</Height></Resolution><Quality>10.000000</Quality><RateControl><FrameRateLimit>0</FrameRateLimit><EncodingInterval>1</EncodingInterval><BitrateLimit>0</BitrateLimit></RateControl><H264><GovLength>100</GovLength><H264Profile>Baseline</H264Profile></H264><Multicast><Address><Type>IPv4</Type><IPv4Address>224.1.2.3</IPv4Address></Address><Port>10000</Port><TTL>1</TTL><AutoStart>false</AutoStart></Multicast><SessionTimeout>PT5S</SessionTimeout></VideoEncoderConfiguration><PTZConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>PTZ</Name><UseCount>2</UseCount><NodeToken>PTZNODETOKEN</NodeToken><DefaultAbsolutePantTiltPositionSpace>http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace</DefaultAbsolutePantTiltPositionSpace><DefaultAbsoluteZoomPositionSpace>http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace</DefaultAbsoluteZoomPositionSpace><DefaultRelativePanTiltTranslationSpace>http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace</DefaultRelativePanTiltTranslationSpace><DefaultRelativeZoomTranslationSpace>http://www.onvif.org/ver10/tptz/ZoomSpaces/TranslationGenericSpace</DefaultRelativeZoomTranslationSpace><DefaultContinuousPanTiltVelocitySpace>http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace</DefaultContinuousPanTiltVelocitySpace><DefaultContinuousZoomVelocitySpace>http://www.onvif.org/ver10/tptz/ZoomSpaces/VelocityGenericSpace</DefaultContinuousZoomVelocitySpace><DefaultPTZSpeed><PanTilt x="0.100000" y="0.100000" space="http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace"></PanTilt><Zoom x="1.000000" space="http://www.onvif.org/ver10/tptz/ZoomSpaces/ZoomGenericSpeedSpace"></Zoom></DefaultPTZSpeed><DefaultPTZTimeout>PT1S</DefaultPTZTimeout><PanTiltLimits><Range><URI>http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace</URI><XRange><Min>-INF</Min><Max>INF</Max></XRange><YRange><Min>-INF</Min><Max>INF</Max></YRange></Range></PanTiltLimits><ZoomLimits><Range><URI>http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace</URI><XRange><Min>-INF</Min><Max>INF</Max></XRange></Range></ZoomLimits></PTZConfiguration><MetadataConfiguration xmlns="http://www.onvif.org/ver10/schema"><Name>metaData</Name><UseCount>2</UseCount><PTZStatus><Status>true</Status><Position>true</Position></PTZStatus><Analytics>false</Analytics><Multicast><Address><Type>IPv4</Type><IPv4Address>224.1.2.3</IPv4Address></Address><Port>10000</Port><TTL>1</TTL><AutoStart>false</AutoStart></Multicast><SessionTimeout>PT0S</SessionTimeout></MetadataConfiguration></Profiles></GetProfilesResponse> Profile_1, mainStream, H264, 1920, 1080, 0, rtsp://192.168.15.204:554 Profile_1, mainStream, H264, 1920, 1080, 0, rtsp://192.168.15.204:554 Profile_2, subStream, H264, 640, 352, 0, rtsp://192.168.15.204:554/0/av1 Profile_2, subStream, H264, 640, 352, 0, rtsp://192.168.15.204:554/0/av1