【问题标题】:ONVIF GetSystemDateAndTime RequestONVIF GetSystemDateAndTime 请求
【发布时间】:2014-03-04 23:36:47
【问题描述】:

一旦我收到从 UDP 多播请求返回到 239.255.255.250 的响应

我返回一个带有 XAddrs http://10.10.10.10:1234/onvif/device_service 的 ProbeMatch

我现在如何执行 GetSystemDateAndTime 和 GetDeviceInformation

这是对 10.10.10.10 端口 1234 的 TCP/UDP 请求吗? 这是对 10.10.10.10 端口 80 的 HTTP 请求吗?

或者什么一旦我有了设备的地址http:10.10.10.10:1234/onvif/device_service

然后呢

提前致谢

【问题讨论】:

    标签: onvif


    【解决方案1】:

    您只需要向那里发送一个 HTTP 请求,因为 SOAP 通过 HTTP 工作。例如通过 CURL,它会是这样的:

    curl 10.10.10.10:1234/onvif/device_service -d '<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>'
    

    因此,您会得到类似这样的一些标题:

    <tds:GetSystemDateAndTimeResponse>
        <tds:SystemDateAndTime>
            <tt:DateTimeType>Manual</tt:DateTimeType>
            <tt:DaylightSavings>false</tt:DaylightSavings>
            <tt:TimeZone>
                <tt:TZ>MoroccoStandardTime0</tt:TZ>
            </tt:TimeZone>
            <tt:UTCDateTime>
                <tt:Time>
                    <tt:Hour>10</tt:Hour>
                    <tt:Minute>5</tt:Minute>
                    <tt:Second>35</tt:Second>
                </tt:Time>
                <tt:Date>
                    <tt:Year>2014</tt:Year>
                    <tt:Month>3</tt:Month>
                    <tt:Day>14</tt:Day>
                </tt:Date>
            </tt:UTCDateTime>
        </tds:SystemDateAndTime>
    </tds:GetSystemDateAndTimeResponse>
    

    而且不要忘记,大多数操作都需要在请求中包含授权标头。

    认证

    在第 35 页的ONVIF Application Programmer's Guide 中描述了如何完成身份验证。例如它看起来像这样:

    <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">MuMnyh3wTxGWOCc=</Password>
                <Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">8Qqve9KCkNhQAAAAAAA==</Nonce>
                <Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2014-03-04T14:03:05.130Z</Created>
            </UsernameToken>
        </Security>
    </s:Header>
    

    【讨论】:

    • 我知道 GetSystemDateAndTimeResponse 不需要身份验证。你有一个需要用户名/密码的命令的 curl 示例?
    • 请告诉我如何请求 onvif 服务,我有 IP 摄像机,我想使用 OnVif 服务处理 PTZ 功能。请帮助我需要紧急,提前谢谢
    【解决方案2】:

    @Kirix 解决方案不适用于我的特定相机。然而,经过大量的代码研究和跟踪/错误。我确定我拥有的 Trendnet 相机坚持标题是完美的。我想出了一个卷曲变化:

    curl http://192.168.xxx.xxx/onvif/device_service --data '<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>' --header 'Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime";'
    

    【讨论】:

      【解决方案3】:

      在您的情况下,http://10.10.10.10:1234/onvif/device_service 是设备管理服务的地址。您需要根据 SOAP 协议发送GetSystemDateAndTime 请求。

      如何发送此类请求取决于您正在使用的系统。你可以使用 Visual Studio 或 gsoap(有一个关于 ONVIF 的FAQ

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多