First: Thanks for providing this wonderful tool!
Background/my use-case:
I use a door intercom from Hikvision. The indoor station (DS-KH9510-WTE1) is able to display ONVIF camera streams. For ONVIF-camera-setup, only IP, username and password is needed and it is not possible to manually set a RTSP stream-URL. For my dahua cameras that means the indoor station will always open the cameras main stream, I cannot set it to use a sub-stream.
Problem is, the indoor station can only display streams up to Full-HD.
My dahua cameras are higher resolution and I don't want to reduce the resolution of the main-stream to Full-HD just because of the indoor station's limitation. The best solution would be to use one of the camera's sub-stream that already runs at Full-HD or 720p. But I cannot directly tell the indoor station to use a sub-stream.
It looks like this piece of software provides the perfect solution for my problem.
Unfortunately I have some trouble getting it to work correctly and I don't know where I need to look to fix it.
My setup:
Dahua camera: 10.162.1.11, RSTP-Port 554.
Docker-host in different subnet: 192.168.2.107.
Test-Laptop with ONVIF device manager: 192.168.2.160
My Docker-compose file:
services:
rtsp-to-onvif:
image: kulasolutions/rtsp-to-onvif:latest
hostname: rtsp-to-onvif
# restart: unless-stopped
volumes:
- /home/traeu/onvif-proxy/config.yaml:/onvif.yaml
network_mode: "host"
cap_add:
- NET_ADMIN
environment:
DEBUG: 1
My config.yaml:
onvif:
- name: Test-Proxycam
dev: enp0s4
target:
hostname: 10.162.1.11
ports:
rtsp: 554
snapshot: 801
highQuality:
rtsp: /cam/realmonitor?channel=1&subtype=2&unicast=true&proto=Onvif
snapshot: /ISAPI/Streaming/Channels/101/picture
width: 1280
height: 720
framerate: 25
bitrate: 4096
quality: 4
ports:
server: 80
rtsp: 8554
snapshot: 8888
uuid: 0a63da62-f68e-4caa-b531-5ef89dbf336b
mac: 1A:11:B0:F1:1B:13
I tried to check with ONVIF device manager/ODM and it detects "Test-Proxycam" successfully, but I don't get any stream:
According to images from google (never used ODM before), there should be an entry for the stream in the right column.
The log-file of the container indicates that it gets a request from ODM, but I am not sure if there are errors hidden in the log or if it looks normal (something with "TypeError: method is not a function", is that OK?).
container-log:
20:45:19.515 DEBUG NET_SCAN: Found 192.168.2.145 on rtsp2onvif_0 for MAC 1a:11:b0:f1:1b:13
20:45:19.516 DEBUG NET_SCAN: Found 192.168.2.145 on rtsp2onvif_0 for MAC 1a:11:b0:f1:1b:13
20:45:19.516 INFO
20:45:19.516 INFO SERVER: Test-Proxycam - HTTP listening on 192.168.2.145:80
20:45:19.518 INFO PROXY: 8554 --> 10.162.1.11:554
20:45:19.519 INFO PROXY: 8888 --> 10.162.1.11:801
(node:1) [DEP0044] DeprecationWarning: The `util.isArray` API is deprecated. Please use `Array.isArray()` instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
(node:1) [DEP0047] DeprecationWarning: The `util.isDate` API is deprecated. Please use `arg instanceof Date` instead.
20:45:36.064 DEBUG SERVER: Test-Proxycam - Discovery request from 192.168.2.160:63374
20:45:36.129 DEBUG SERVER: Test-Proxycam - Discovery request from 192.168.2.160:63376
SERVER: Handling POST on /onvif/device_service
SERVER: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>
SERVER: Attempting to bind to /onvif/device_service
SERVER: Trying Device from path /onvif/device_service
SERVER: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:i0="http://www.onvif.org/ver10/device/wsdl" xmlns:tns="http://tempuri.org/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema"><soap:Body><tds:GetSystemDateAndTimeResponse xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns="http://www.onvif.org/ver10/device/wsdl"><tds:SystemDateAndTime><tds:DateTimeType>NTP</tds:DateTimeType><tds:DaylightSavings>false</tds:DaylightSavings><tds:TimeZone><tds:TZ>UTC+0</tds:TZ></tds:TimeZone><tds:UTCDateTime><tds:Time><tds:Hour>20</tds:Hour><tds:Minute>45</tds:Minute><tds:Second>36</tds:Second></tds:Time><tds:Date><tds:Year>2024</tds:Year><tds:Month>12</tds:Month><tds:Day>21</tds:Day></tds:Date></tds:UTCDateTime><tds:LocalDateTime><tds:Time><tds:Hour>20</tds:Hour><tds:Minute>45</tds:Minute><tds:Second>36</tds:Second></tds:Time><tds:Date><tds:Year>2024</tds:Year><tds:Month>12</tds:Month><tds:Day>21</tds:Day></tds:Date></tds:LocalDateTime><tds:Extension></tds:Extension></tds:SystemDateAndTime></tds:GetSystemDateAndTimeResponse></soap:Body></soap:Envelope>
SERVER: Handling POST on /onvif/device_service
SERVER: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">ExdbtbPcgJ1AaGbHQ3ajc9gGxSY=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">hyOBhK3qtU6BlZMGCfNFiw4AAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2024-12-21T20:45:35.642Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetDNS xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>
SERVER: Attempting to bind to /onvif/device_service
SERVER: Trying Device from path /onvif/device_service
SERVER: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:i0="http://www.onvif.org/ver10/device/wsdl" xmlns:tns="http://tempuri.org/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema"><soap:Body><soap:Fault><soap:Code><soap:Value>SOAP-ENV:Server</soap:Value><soap:Subcode><soap:Value>InternalServerError</soap:Value></soap:Subcode></soap:Code><soap:Reason><soap:Text>TypeError: method is not a function</soap:Text></soap:Reason></soap:Fault></soap:Body></soap:Envelope>
SERVER: Handling POST on /onvif/device_service
SERVER: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">HdldDojEh3BAzCKknpgPtAqTVjc=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">hyOBhK3qtU6BlZMGCfNFiw0AAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2024-12-21T20:45:35.642Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetScopes xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>
SERVER: Attempting to bind to /onvif/device_service
SERVER: Trying Device from path /onvif/device_service
SERVER: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:i0="http://www.onvif.org/ver10/device/wsdl" xmlns:tns="http://tempuri.org/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema"><soap:Body><soap:Fault><soap:Code><soap:Value>SOAP-ENV:Server</soap:Value><soap:Subcode><soap:Value>InternalServerError</soap:Value></soap:Subcode></soap:Code><soap:Reason><soap:Text>TypeError: method is not a function</soap:Text></soap:Reason></soap:Fault></soap:Body></soap:Envelope>
SERVER: Handling POST on /onvif/device_service
SERVER: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">hEtADmzW2MIpl/CW+96sbvn9cTI=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">hyOBhK3qtU6BlZMGCfNFiw8AAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2024-12-21T20:45:35.642Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetDeviceInformation xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>
SERVER: Attempting to bind to /onvif/device_service
SERVER: Trying Device from path /onvif/device_service
SERVER: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:i0="http://www.onvif.org/ver10/device/wsdl" xmlns:tns="http://tempuri.org/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema"><soap:Body><tds:GetDeviceInformationResponse xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns="http://www.onvif.org/ver10/device/wsdl"><tds:Manufacturer>rtsp-2-onvif</tds:Manufacturer><tds:Model>Test-Proxycam</tds:Model><tds:FirmwareVersion>1.0.0</tds:FirmwareVersion><tds:SerialNumber>Test-Proxycam-0000</tds:SerialNumber><tds:HardwareId>Test-Proxycam-1001</tds:HardwareId></tds:GetDeviceInformationResponse></soap:Body></soap:Envelope>
SERVER: Handling POST on /onvif/device_service
SERVER: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">yNpNxNub6EVMRNDbpt1r8xEayw4=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">hyOBhK3qtU6BlZMGCfNFixAAAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2024-12-21T20:45:35.643Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetNetworkInterfaces xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>
SERVER: Attempting to bind to /onvif/device_service
SERVER: Trying Device from path /onvif/device_service
SERVER: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:i0="http://www.onvif.org/ver10/device/wsdl" xmlns:tns="http://tempuri.org/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema"><soap:Body><soap:Fault><soap:Code><soap:Value>SOAP-ENV:Server</soap:Value><soap:Subcode><soap:Value>InternalServerError</soap:Value></soap:Subcode></soap:Code><soap:Reason><soap:Text>TypeError: method is not a function</soap:Text></soap:Reason></soap:Fault></soap:Body></soap:Envelope>
20:45:36.292 DEBUG SERVER: Test-Proxycam - Discovery request from 192.168.2.160:63374
20:45:36.292 DEBUG SERVER: Test-Proxycam - Discovery request from 192.168.2.160:63376
20:45:36.744 DEBUG SERVER: Test-Proxycam - Discovery request from 192.168.2.160:63376
20:45:36.744 DEBUG SERVER: Test-Proxycam - Discovery request from 192.168.2.160:63374
SERVER: Handling POST on /onvif/device_service
SERVER: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>
SERVER: Attempting to bind to /onvif/device_service
SERVER: Trying Device from path /onvif/device_service
SERVER: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:i0="http://www.onvif.org/ver10/device/wsdl" xmlns:tns="http://tempuri.org/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema"><soap:Body><tds:GetSystemDateAndTimeResponse xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns="http://www.onvif.org/ver10/device/wsdl"><tds:SystemDateAndTime><tds:DateTimeType>NTP</tds:DateTimeType><tds:DaylightSavings>false</tds:DaylightSavings><tds:TimeZone><tds:TZ>UTC+0</tds:TZ></tds:TimeZone><tds:UTCDateTime><tds:Time><tds:Hour>20</tds:Hour><tds:Minute>49</tds:Minute><tds:Second>46</tds:Second></tds:Time><tds:Date><tds:Year>2024</tds:Year><tds:Month>12</tds:Month><tds:Day>21</tds:Day></tds:Date></tds:UTCDateTime><tds:LocalDateTime><tds:Time><tds:Hour>20</tds:Hour><tds:Minute>49</tds:Minute><tds:Second>46</tds:Second></tds:Time><tds:Date><tds:Year>2024</tds:Year><tds:Month>12</tds:Month><tds:Day>21</tds:Day></tds:Date></tds:LocalDateTime><tds:Extension></tds:Extension></tds:SystemDateAndTime></tds:GetSystemDateAndTimeResponse></soap:Body></soap:Envelope>
SERVER: Handling POST on /onvif/device_service
SERVER: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">JJX4ych+bw3sp4fOlbS1ThCDXgc=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">hyOBhK3qtU6BlZMGCfNFixEAAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2024-12-21T20:49:46.421Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetCapabilities xmlns="http://www.onvif.org/ver10/device/wsdl"><Category>All</Category></GetCapabilities></s:Body></s:Envelope>
SERVER: Attempting to bind to /onvif/device_service
SERVER: Trying Device from path /onvif/device_service
SERVER: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:i0="http://www.onvif.org/ver10/device/wsdl" xmlns:tns="http://tempuri.org/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema"><soap:Body><tds:GetCapabilitiesResponse xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns="http://www.onvif.org/ver10/device/wsdl"><tds:Capabilities><tds:Device><tds:XAddr>http://192.168.2.145:80/onvif/device_service</tds:XAddr><tds:Network><tds:IPFilter>false</tds:IPFilter><tds:ZeroConfiguration>false</tds:ZeroConfiguration><tds:IPVersion6>false</tds:IPVersion6><tds:DynDNS>false</tds:DynDNS><tds:Extension><tds:Dot11Configuration>false</tds:Dot11Configuration><tds:Extension></tds:Extension></tds:Extension></tds:Network><tds:System><tds:DiscoveryResolve>false</tds:DiscoveryResolve><tds:DiscoveryBye>false</tds:DiscoveryBye><tds:RemoteDiscovery>false</tds:RemoteDiscovery><tds:SystemBackup>false</tds:SystemBackup><tds:SystemLogging>false</tds:SystemLogging><tds:FirmwareUpgrade>false</tds:FirmwareUpgrade><tds:SupportedVersions><tds:Major>2</tds:Major><tds:Minor>5</tds:Minor></tds:SupportedVersions><tds:Extension><tds:HttpFirmwareUpgrade>false</tds:HttpFirmwareUpgrade><tds:HttpSystemBackup>false</tds:HttpSystemBackup><tds:HttpSystemLogging>false</tds:HttpSystemLogging><tds:HttpSupportInformation>false</tds:HttpSupportInformation><tds:Extension></tds:Extension></tds:Extension></tds:System><tds:IO><tds:InputConnectors>0</tds:InputConnectors><tds:RelayOutputs>1</tds:RelayOutputs><tds:Extension><tds:Auxiliary>false</tds:Auxiliary><tds:AuxiliaryCommands></tds:AuxiliaryCommands><tds:Extension></tds:Extension></tds:Extension></tds:IO><tds:Security><tds:TLS1.1>false</tds:TLS1.1><tds:TLS1.2>false</tds:TLS1.2><tds:OnboardKeyGeneration>false</tds:OnboardKeyGeneration><tds:AccessPolicyConfig>false</tds:AccessPolicyConfig><tds:X.509Token>false</tds:X.509Token><tds:SAMLToken>false</tds:SAMLToken><tds:KerberosToken>false</tds:KerberosToken><tds:RELToken>false</tds:RELToken><tds:Extension><tds:TLS1.0>false</tds:TLS1.0><tds:Extension><tds:Dot1X>false</tds:Dot1X><tds:RemoteUserHandling>false</tds:RemoteUserHandling></tds:Extension></tds:Extension></tds:Security><tds:Extension></tds:Extension></tds:Device><tds:Media><tds:XAddr>http://192.168.2.145:80/onvif/media_service</tds:XAddr><tds:StreamingCapabilities><tds:RTPMulticast>false</tds:RTPMulticast><tds:RTP_TCP>true</tds:RTP_TCP><tds:RTP_RTSP_TCP>true</tds:RTP_RTSP_TCP><tds:Extension></tds:Extension></tds:StreamingCapabilities><tds:Extension><tds:ProfileCapabilities><tds:MaximumNumberOfProfiles>1</tds:MaximumNumberOfProfiles></tds:ProfileCapabilities></tds:Extension></tds:Media></tds:Capabilities></tds:GetCapabilitiesResponse></soap:Body></soap:Envelope>
SERVER: Handling POST on /onvif/device_service
SERVER: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">FAm7Hq7A9d4l4xE32ufFmYmAoo8=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">hyOBhK3qtU6BlZMGCfNFixIAAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2024-12-21T20:49:46.450Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetCapabilities xmlns="http://www.onvif.org/ver10/device/wsdl"><Category>All</Category></GetCapabilities></s:Body></s:Envelope>
SERVER: Attempting to bind to /onvif/device_service
SERVER: Trying Device from path /onvif/device_service
SERVER: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:i0="http://www.onvif.org/ver10/device/wsdl" xmlns:tns="http://tempuri.org/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema"><soap:Body><tds:GetCapabilitiesResponse xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns="http://www.onvif.org/ver10/device/wsdl"><tds:Capabilities><tds:Device><tds:XAddr>http://192.168.2.145:80/onvif/device_service</tds:XAddr><tds:Network><tds:IPFilter>false</tds:IPFilter><tds:ZeroConfiguration>false</tds:ZeroConfiguration><tds:IPVersion6>false</tds:IPVersion6><tds:DynDNS>false</tds:DynDNS><tds:Extension><tds:Dot11Configuration>false</tds:Dot11Configuration><tds:Extension></tds:Extension></tds:Extension></tds:Network><tds:System><tds:DiscoveryResolve>false</tds:DiscoveryResolve><tds:DiscoveryBye>false</tds:DiscoveryBye><tds:RemoteDiscovery>false</tds:RemoteDiscovery><tds:SystemBackup>false</tds:SystemBackup><tds:SystemLogging>false</tds:SystemLogging><tds:FirmwareUpgrade>false</tds:FirmwareUpgrade><tds:SupportedVersions><tds:Major>2</tds:Major><tds:Minor>5</tds:Minor></tds:SupportedVersions><tds:Extension><tds:HttpFirmwareUpgrade>false</tds:HttpFirmwareUpgrade><tds:HttpSystemBackup>false</tds:HttpSystemBackup><tds:HttpSystemLogging>false</tds:HttpSystemLogging><tds:HttpSupportInformation>false</tds:HttpSupportInformation><tds:Extension></tds:Extension></tds:Extension></tds:System><tds:IO><tds:InputConnectors>0</tds:InputConnectors><tds:RelayOutputs>1</tds:RelayOutputs><tds:Extension><tds:Auxiliary>false</tds:Auxiliary><tds:AuxiliaryCommands></tds:AuxiliaryCommands><tds:Extension></tds:Extension></tds:Extension></tds:IO><tds:Security><tds:TLS1.1>false</tds:TLS1.1><tds:TLS1.2>false</tds:TLS1.2><tds:OnboardKeyGeneration>false</tds:OnboardKeyGeneration><tds:AccessPolicyConfig>false</tds:AccessPolicyConfig><tds:X.509Token>false</tds:X.509Token><tds:SAMLToken>false</tds:SAMLToken><tds:KerberosToken>false</tds:KerberosToken><tds:RELToken>false</tds:RELToken><tds:Extension><tds:TLS1.0>false</tds:TLS1.0><tds:Extension><tds:Dot1X>false</tds:Dot1X><tds:RemoteUserHandling>false</tds:RemoteUserHandling></tds:Extension></tds:Extension></tds:Security><tds:Extension></tds:Extension></tds:Device><tds:Media><tds:XAddr>http://192.168.2.145:80/onvif/media_service</tds:XAddr><tds:StreamingCapabilities><tds:RTPMulticast>false</tds:RTPMulticast><tds:RTP_TCP>true</tds:RTP_TCP><tds:RTP_RTSP_TCP>true</tds:RTP_RTSP_TCP><tds:Extension></tds:Extension></tds:StreamingCapabilities><tds:Extension><tds:ProfileCapabilities><tds:MaximumNumberOfProfiles>1</tds:MaximumNumberOfProfiles></tds:ProfileCapabilities></tds:Extension></tds:Media></tds:Capabilities></tds:GetCapabilitiesResponse></soap:Body></soap:Envelope>
Ofcourse I tested with VLC player that the RTSP stream of the dahua cam is available (rtsp://admin:password@10.162.1.11:554/cam/realmonitor?channel=1&subtype=2&unicast=true&proto=Onvif).
I know that something is working, because when I use VLC to access the RTSP port of the docker container (just rtsp://192.168.2.145:8554), I get prompted for a password and the credentials of my dahua camera work. But I don't know how to check if the proxied RTSP-stream really works, because I don't know the exact RTSP stream path (and ODM doesn't show anything).
I made another test and put go2rtc in between, just to try if that makes any difference and to get a really simple, short RTSP stream path without authentication.
I started go2rtc on another laptop (192.168.2.121) with the following config:
go2rtc-config:
streams:
dahua_camera:
- rtsp://admin:password@10.162.1.11/cam/realmonitor?channel=1&subtype=2&unicast=true&proto=Onvif
rtsp:
listen: ":8554"
I checked successfully that VLC can access rtsp://192.168.2.121:8554/dahua_camera.
I then used this config.yaml for this test:
config.yaml for test with go2rtc:
onvif:
- name: Test-Proxycam
dev: enp0s4
target:
hostname: 192.168.2.121
ports:
rtsp: 8554
snapshot: 801
highQuality:
rtsp: /dahua_camera
snapshot: /ISAPI/Streaming/Channels/101/picture
width: 1280
height: 720
framerate: 25
bitrate: 4096
quality: 4
ports:
server: 80
rtsp: 9554
snapshot: 8888
uuid: 0a63da62-f68e-4caa-b531-5ef89dbf336b
mac: 1A:11:B0:F1:1B:13
My hope was that with go2rtc in between, there would be a difference, but the result stayed the same: ODM wasn't able to show a stream.
I also tried to add 192.168.2.145 as ONVIF device to my hikvision indoor station but that results in an error when trying to open the stream.
I also tested different server-ports (8081, 8085) without success.
Because the documentation states that the name should only contain letters, I tried "TestProxycam" instead of "Test-Proxycam", but that also made no difference.
Is it possible that this is a bug, or maybe it is just my config that is wrong or not suitable?
I would love to get some feedback on this and, ofcourse, to get it to work!
First: Thanks for providing this wonderful tool!
Background/my use-case:
I use a door intercom from Hikvision. The indoor station (DS-KH9510-WTE1) is able to display ONVIF camera streams. For ONVIF-camera-setup, only IP, username and password is needed and it is not possible to manually set a RTSP stream-URL. For my dahua cameras that means the indoor station will always open the cameras main stream, I cannot set it to use a sub-stream.
Problem is, the indoor station can only display streams up to Full-HD.
My dahua cameras are higher resolution and I don't want to reduce the resolution of the main-stream to Full-HD just because of the indoor station's limitation. The best solution would be to use one of the camera's sub-stream that already runs at Full-HD or 720p. But I cannot directly tell the indoor station to use a sub-stream.
It looks like this piece of software provides the perfect solution for my problem.
Unfortunately I have some trouble getting it to work correctly and I don't know where I need to look to fix it.
My setup:
Dahua camera: 10.162.1.11, RSTP-Port 554.
Docker-host in different subnet: 192.168.2.107.
Test-Laptop with ONVIF device manager: 192.168.2.160
My Docker-compose file:
My config.yaml:
I tried to check with ONVIF device manager/ODM and it detects "Test-Proxycam" successfully, but I don't get any stream:
According to images from google (never used ODM before), there should be an entry for the stream in the right column.
The log-file of the container indicates that it gets a request from ODM, but I am not sure if there are errors hidden in the log or if it looks normal (something with "TypeError: method is not a function", is that OK?).
container-log:
Ofcourse I tested with VLC player that the RTSP stream of the dahua cam is available (rtsp://admin:password@10.162.1.11:554/cam/realmonitor?channel=1&subtype=2&unicast=true&proto=Onvif).
I know that something is working, because when I use VLC to access the RTSP port of the docker container (just rtsp://192.168.2.145:8554), I get prompted for a password and the credentials of my dahua camera work. But I don't know how to check if the proxied RTSP-stream really works, because I don't know the exact RTSP stream path (and ODM doesn't show anything).
I made another test and put go2rtc in between, just to try if that makes any difference and to get a really simple, short RTSP stream path without authentication.
I started go2rtc on another laptop (192.168.2.121) with the following config:
go2rtc-config:
I checked successfully that VLC can access rtsp://192.168.2.121:8554/dahua_camera.
I then used this config.yaml for this test:
config.yaml for test with go2rtc:
My hope was that with go2rtc in between, there would be a difference, but the result stayed the same: ODM wasn't able to show a stream.
I also tried to add 192.168.2.145 as ONVIF device to my hikvision indoor station but that results in an error when trying to open the stream.
I also tested different server-ports (8081, 8085) without success.
Because the documentation states that the name should only contain letters, I tried "TestProxycam" instead of "Test-Proxycam", but that also made no difference.
Is it possible that this is a bug, or maybe it is just my config that is wrong or not suitable?
I would love to get some feedback on this and, ofcourse, to get it to work!