2012-06-08 29 views
5

Tengo una cámara IP de red (Canon VB-M40). Esta cámara admite el protocolo ONVIF. Estoy implementando su funcionalidad ONVIF en Windows usando el lenguaje C. Obtuve su URI de RTSP usando la siguiente solicitud.¿Se puede transmitir en vivo desde la cámara IP de red que admite el protocolo ONVIF?

snprintf(postData, sizeof(postData), 
     "<?xml version=\"1.0\" encoding=\"utf-8\"?>" 
     "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" " 
     "xmlns:tds=\"http://www.onvif.org/ver10/media/wsdl\"" 
     "xmlns:tt=\"http://www.onvif.org/ver10/schema\">"    
     "<soap:Body>" 
     "<tds:GetStreamUri>" 
     "<tds:StreamSetup>" 
      "<tt:Stream>0</tt:Stream>" 
      "<tt:Transport>" 
      "<tt:Protocol>HTTP</tt:Protocol>" 
      "</tt:Transport>" 
     "</tds:StreamSetup>" 
     "<tds:ProfileToken>profile1</tds:ProfileToken>" 
     "</tds:GetStreamUri>" 
     "</soap:Body></soap:Envelope>", 
     username, digest_str, nonce_str, time_str); 

y la respuesta es:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" 
        xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        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: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:MC2="http://www.onvif.org/ver10/schema" 
        xmlns:MC3="http://www.w3.org/2005/05/xmlmime" 
        xmlns:MC4="http://docs.oasis-open.org/wsn/b-2" 
        xmlns:MC10="http://www.w3.org/2004/08/xop/include" 
        xmlns:MC5="http://docs.oasis-open.org/wsrf/bf-2" 
        xmlns:MC6="http://docs.oasis-open.org/wsn/t-1" 
        xmlns:CC="http://www.canon.com/ns/networkcamera/onvif/va/schema" 
        xmlns:MC1="http://www.onvif.org/ver10/media/wsdl" 
        xmlns:MC8="http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding" 
        xmlns:MC9="http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding" 
        xmlns:MC7="http://www.onvif.org/ver20/analytics/wsdl" 
        xmlns:ter="http://www.onvif.org/ver10/error" 
        xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" 
        xmlns:tns1="http://www.onvif.org/ver10/topics"> 
    <SOAP-ENV:Header></SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <MC1:GetStreamUriResponse> 
      <MC1:MediaUri> 
       <MC2:Uri>rtsp://192.168.5.53:8090/profile1=r</MC2:Uri> 
       <MC2:InvalidAfterConnect>false</MC2:InvalidAfterConnect> 
       <MC2:InvalidAfterReboot>true</MC2:InvalidAfterReboot> 
       <MC2:Timeout>PT0M0S</MC2:Timeout> 
      </MC1:MediaUri> 
     </MC1:GetStreamUriResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

acuerdo con la especificación ONVIF, una vez que llegue la corriente URI que debería enviar 'describir' petición al dispositivo. Estoy usando este procedimiento porque necesito transmisión en TCP.

Mi pregunta es cómo enviar la solicitud 'DESCRIBE' al dispositivo y en qué socket?

Debería enviar esta solicitud en el mismo socket en el que envié la solicitud GetStreamURI. O tengo que crear otro. ¿Y cuál será el formato de la solicitud?

Respuesta

3

Envíelo al mismo host que la solicitud GetStreamUri en el puerto 554 (u otro puerto configurado en el dispositivo para RTSP). Luego debe enviar la solicitud de OPCIONES antes de DESCRIBIR. Probablemente devolverá 401 estado no autorizado y valor nonce + realm en su cuerpo. (estoy usando la dirección diferent entonces usted recibió en su respuesta GetStreamUri.)

Request: 
OPTIONS http://192.168.128.99:80/profile1/media.smp RTSP/1.0\r\n 
CSeq: 1\r\n 
User-Agent: MyAgent\r\n\r\n 

Response: 
RTSP/1.0 401 Unauthorized 
CSeq: 1 
Date: Thu Jun 28 05:39:55 2012 GMT 
Expires: Thu Jun 28 05:39:55 2012 GMT 
Cache-Control: must-revalidate 
WWW-Authenticate: Digest realm="iPOLiS", nonce="00000000000000000000000048E02F14" 

Leer este reino y los valores nonce, ya que lo necesite para autorizacion y enviar otra, la solicitud OPCIONES autorizado.

OPTIONS http://192.168.128.99:80/profile1/media.smp RTSP/1.0\r\n 
CSeq: 2\r\n 
Authorization: Digest username="admin", realm="iPOLiS", nonce="00000000000000000000000048E02F14", uri="http://192.168.128.99:80/profile1/media.smp", response="23a5a81fb98b6cb29368eba060ba31b9"\r\n 
User-Agent: MyAgent\r\n\r\n 

respuesta es generar this way

Luego vienen DESCRIBE solicitud

DESCRIBE http://192.168.128.99:80/profile1/media.smp RTSP/1.0\r\n 
CSeq: 3\r\n 
User-Agent: MyAgent\r\n\r\n 

y la respuesta

RTSP/1.0 200 OK 
CSeq: 3 
Date: Thu Jun 28 05:46:20 2012 GMT 
Expires: Thu Jun 28 05:46:20 2012 GMT 
Content-Base: http://192.168.128.99:554/profile1/media.smp/ 
Content-Type: application/sdp 
Content-Length: 498 
x-Accept-Retransmit: our-retransmit 
x-Accept-Dynamic-Rate: 1 
Cache-Control: must-revalidate 

v=0 
o=- 0 0 IN IP4 192.168.128.9 
s=Media Presentation 
i=samsung 
c=IN IP4 0.0.0.0 
b=AS:384128 
t=0 0 
a=control:http://192.168.128.99:554/profile1/media.smp 
a=range:npt=now- 
m=video 40336 RTP/AVP 26 
b=AS:384000 
a=rtpmap:26 JPEG/90000 
a=control:http://192.168.128.99:554/profile1/media.smp/trackID=v 
a=cliprect:0,0,768,1024 
a=framesize:26 1024-768 
a=framerate:5.0 
m=audio 40338 RTP/AVP 0 
b=AS:64 
a=rtpmap:0 PCMU/8000 
a=control:http://192.168.128.99:554/profile1/media.smp/trackID=a 

desde esta dirección de respuesta en un = Control: http: //192.168. 128.99: 554/profile1/media.smp/trackID = v debe ser analizado para medios m = video (es un SDP pr otocol). Eso es lo lejos que llegué. El siguiente procedimiento debería ser hacer que SETUP solicite información de transporte y luego envíe la solicitud de PLAY. Debe escuchar en el puerto que especificó en la solicitud de CONFIGURACIÓN para recibir imágenes.

+1

Como GetStreamUri devuelve 'rtsp: //192.168.5.53: 8090/profile1 = r', el servidor RTSP para contactar no está en el puerto 554. – mpromonet

Cuestiones relacionadas