ONVIF 카메라의 비디오 스트림 URL을 수동으로 찾으려면 어떻게 해야 합니까?

ONVIF 카메라의 비디오 스트림 URL을 수동으로 찾으려면 어떻게 해야 합니까?

나는ONVIF 장치 관리자호환되는 카메라의 스트림 URL을 찾습니다. 하지만 어떻게 이루어 집니까? ONVIF 카메라의 RTSP 경로를 찾는 방법이 있습니까?

답변1

에 따르면ONVIF 핵심 사양, ONVIF 호환 장치의 장치 관리 진입점은 으로 고정되어 있습니다 http://${HOST}:${PORT}/onvif/device_service.

이 끝점은 다음을 사용하여 장치 상호 작용에 사용됩니다.SOAP 작업/작업/명령.

추가적인 사양은,ONVIF 미디어 서비스 사양, 지원되는 장치를 쿼리하기 위한 작업을 정의합니다.프로필.

그만큼프로필 가져오기명령은 장치가 제공해야 하는 모든 프로필에 대한 개요를 제공합니다. 여기에 예가 있습니다.프로필 가져오기호출을 사용하여 curl(그리고 xmllint응답을 예쁘게 인쇄하기 위해):

curl -X POST http://192.168.178.22:8080/onvif/device_service\
 -H 'Content-Type: application/soap+xml; charset=utf-8'\
 -H 'SOAPAction: "http://www.onvif.org/ver10/media/wsdl/GetProfiles"'\
 -d '
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsdl="http://www.onvif.org/ver10/media/wsdl">
  <soap:Header/>
  <soap:Body>
    <wsdl:GetProfiles/>
   </soap:Body>
</soap:Envelope>
' | xmllint --format -

내 ONVIF 장치는 다음(약어)으로 이 명령에 응답합니다.

<SOAP-ENV:Envelope ...>
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <trt:GetProfilesResponse>
      <trt:Profiles token="h264_ulaw_1920x1080" fixed="true">
        <tt:Name>h264_ulaw_1920x1080</tt:Name>
        <tt:VideoSourceConfiguration token="1920x1080_Config">
          <tt:Name>1920x1080_Config</tt:Name>
          <tt:UseCount>1</tt:UseCount>
          <tt:SourceToken>1920x1080</tt:SourceToken>
          <tt:Bounds x="0" y="0" width="1920" height="1080"/>
        </tt:VideoSourceConfiguration>
        <tt:AudioSourceConfiguration token="MicrophoneConfig">
          <tt:Name>MicrophoneConfig</tt:Name>
          <tt:UseCount>1</tt:UseCount>
          <tt:SourceToken>Microphone</tt:SourceToken>
        </tt:AudioSourceConfiguration>
        <tt:VideoEncoderConfiguration token="h264">
          <tt:Name>h264</tt:Name>
          <tt:UseCount>1</tt:UseCount>
          <tt:Encoding>H264</tt:Encoding>
          <tt:Resolution>
            <tt:Width>1920</tt:Width>
            <tt:Height>1080</tt:Height>
          </tt:Resolution>
          <tt:Quality>0</tt:Quality>
          <tt:RateControl>
            <tt:FrameRateLimit>30</tt:FrameRateLimit>
            <tt:EncodingInterval>1</tt:EncodingInterval>
            <tt:BitrateLimit>2000</tt:BitrateLimit>
          </tt:RateControl>
          <tt:H264>
            <tt:GovLength>150</tt:GovLength>
            <tt:H264Profile>Baseline</tt:H264Profile>
          </tt:H264>
          <tt:Multicast>
            <tt:Address>
              <tt:Type>IPv4</tt:Type>
              <tt:IPv4Address>192.168.178.22:8080</tt:IPv4Address>
            </tt:Address>
            <tt:Port>8080</tt:Port>
            <tt:TTL>30</tt:TTL>
            <tt:AutoStart>false</tt:AutoStart>
          </tt:Multicast>
          <tt:SessionTimeout>PT00H00M30S</tt:SessionTimeout>
        </tt:VideoEncoderConfiguration>
        <tt:AudioEncoderConfiguration token="AudioEncoder">
          <tt:Name>AudioEncoder</tt:Name>
          <tt:UseCount>0</tt:UseCount>
          <tt:Encoding>G711</tt:Encoding>
          <tt:Bitrate>1</tt:Bitrate>
          <tt:SampleRate>8000</tt:SampleRate>
          <tt:Multicast>
            <tt:Address>
              <tt:Type>IPv4</tt:Type>
              <tt:IPv4Address>192.168.178.22:8080</tt:IPv4Address>
            </tt:Address>
            <tt:Port>8080</tt:Port>
            <tt:TTL>30</tt:TTL>
            <tt:AutoStart>false</tt:AutoStart>
          </tt:Multicast>
          <tt:SessionTimeout>PT00H00M30S</tt:SessionTimeout>
        </tt:AudioEncoderConfiguration>
      </trt:Profiles>
      <trt:Profiles token="jpeg_ulaw_1920x1080" fixed="true">
        <!-- -->
      </trt:Profiles>
      <trt:Profiles token="h264_opus_1920x1080" fixed="true">
        <!-- -->
      </trt:Profiles>
      <trt:Profiles token="jpeg_opus_1920x1080" fixed="true">
        <!-- -->
      </trt:Profiles>
    <!-- -->
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

그래서프로필 가져오기응답에는 여러 Profiles요소가 포함되어 있습니다. 주목할만한 점은 각 요소 token의 속성 값 입니다 . 이러한 토큰은 다음을 사용하여 후속 쿼리에 사용될 수 있습니다.Profiles<Profiles token="h264_ulaw_1920x1080" fixed="true">GetStreamUri명령:

curl -X POST http://192.168.178.22:8080/onvif/device_service\
 -H 'Content-Type: application/soap+xml; charset=utf-8'\
 -H 'SOAPAction: "http://www.onvif.org/ver10/media/wsdl/GetStreamUri"'\
 -d '
<soap:Envelope
  xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
  xmlns:wsdl="http://www.onvif.org/ver10/media/wsdl"
>
  <soap:Header/>
  <soap:Body>
    <wsdl:GetStreamUri>
      <wsdl:ProfileToken>h264_ulaw_1920x1080</wsdl:ProfileToken>
    </wsdl:GetStreamUri>
  </soap:Body>
</soap:Envelope>
' | xmllint --format -

... 내 장치가 응답하는 내용(축약):

<SOAP-ENV:Envelope ...>
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <trt:GetStreamUriResponse>
      <trt:MediaUri>
        <tt:Uri>rtsp://192.168.178.22:8080/h264_ulaw.sdp</tt:Uri>
        <tt:InvalidAfterConnect>false</tt:InvalidAfterConnect>
        <tt:InvalidAfterReboot>false</tt:InvalidAfterReboot>
        <tt:Timeout xsi:nil="true"/>
      </trt:MediaUri>
    </trt:GetStreamUriResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

그리고 거기에 비디오 스트림 URL이 <Uri>요소에 포함되어 있습니다: rtsp://192.168.178.22:8080/h264_ulaw.sdp.

(ONVIF 네트워크 인터페이스 사양 개요)

관련 정보