Onvif - GetStreamUri сообщает, что произошло нарушение правильного формата XML

Как я могу создать сообщение Onvif GetStreamUrl? Я перепробовал миллионы возможностей, вот одна из них:

   <?xml version="1.0" encoding="UTF-8"?>
<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>onvif</Username>
      <Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">tFvFfoo7ZZhmKv61tTBJ4agS/lM=</Password>
      <Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NTcxNjg1NTQwNzg2Mzcx</Nonce>
      <Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2016-07-14T14:02:27Z</Created>
      </UsernameToken>
    </Security>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <GetStreamUri xmlns="http://www.onvif.org/ver10/media/wsdl">
      <StreamSetup>
    <StreamType>RTP-Unicast</StreamType>
    <Transport>
      <TransportProtocol>UDP</TransportProtocol>
    </Transport>
      </StreamSetup>
      <ReferenceToken>profile_1_h264</ReferenceToken>
    </GetStreamUri>
  </s:Body>
</s:Envelope>

Официальная спецификация находится здесь: http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl#op.GetStreamUri.

Есть ли кто-нибудь, кто мог бы мне помочь?


person JochoM    schedule 14.07.2016    source источник
comment
Если пробел перед <?xml действительно существует в ваших данных, попробуйте удалить его.   -  person Tomalak    schedule 14.07.2016
comment
Это не так, и я также вообще не использую пробелы в сообщении.   -  person JochoM    schedule 14.07.2016
comment
Вы узнали, в чем проблема? Я получаю ту же ошибку...   -  person ioan ghip    schedule 07.03.2017


Ответы (2)


Что ж, если вы хотите сделать конверт самостоятельно, вы можете использовать следующий проверенный шаблон и сделать http-запрос, содержащий конверт SOAP.

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
    <s:Header>
        <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1">
            <wsse:UsernameToken wsu:Id="SecurityToken-906d1a56-c091-4d33-8afa-04445dd123ff" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                <wsse:Username>admin</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">THHcq7prwwf/42S+A5tuorg/RMY=</wsse:Password>
                <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">f11vJWByh7IJBvZRi46Qeg==</wsse:Nonce>
                <wsu:Created>2016-10-19T05:42:47Z</wsu:Created>
            </wsse:UsernameToken>
        </Security>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <GetStreamUri xmlns="http://www.onvif.org/ver10/media/wsdl">
            <StreamSetup>
                <Stream xmlns="http://www.onvif.org/ver10/schema">RTP-Unicast</Stream>
                <Transport xmlns="http://www.onvif.org/ver10/schema">
                    <Protocol>UDP</Protocol>
                </Transport>
            </StreamSetup>
            <ProfileToken>2_def_profile1</ProfileToken>
        </GetStreamUri>
    </s:Body>
</s:Envelope>

Но с помощью службы мультимедиа onvif вы можете получить профили, выбрать один из них и вызвать метод GetStreamUri с вашим предпочтительным StreamSetup и токеном выбранного профиля.

person aminexplo    schedule 19.10.2016

Вы используете TransportProtocol вместо Protocol в теле запроса для версии 10 спецификаций ONVIF (https://www.onvif.org/ver10/media/wsdl/media.wsdl).

Кроме того, у меня была такая же проблема, связанная с «произошло нарушение правильного формата XML» в вызове GetStreamUri. Добавление схемы xmlns в Stream и Transport устранило проблему.

<Stream xmlns="http://www.onvif.org/ver10/schema">RTP-Unicast</Stream>
<Transport xmlns="http://www.onvif.org/ver10/schema">
    <Protocol>UDP</Protocol>
</Transport>
person Verhelst    schedule 03.09.2018