2012-06-08 52 views
5

Tôi có camera IP mạng (Canon VB-M40). Máy ảnh này hỗ trợ giao thức ONVIF. Tôi đang thực hiện chức năng ONVIF của nó trong các cửa sổ bằng ngôn ngữ C. Tôi đã nhận được URI RTSP của nó bằng cách sử dụng yêu cầu sau.Nhận luồng trực tiếp từ camera IP mạng có hỗ trợ giao thức 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); 

và phản ứng là:

<?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> 

theo đặc điểm kỹ thuật ONVIF, một lần tôi nhận được dòng URI tôi nên gửi 'mô tả' yêu cầu đến thiết bị. Tôi đang sử dụng thủ tục này bởi vì tôi cần dòng trên TCP.

Câu hỏi của tôi là cách gửi yêu cầu 'DESCRIBE' đến Thiết bị và trên ổ cắm nào?

Tôi có nên gửi yêu cầu này trên cùng một ổ cắm mà tôi đã gửi yêu cầu GetStreamURI không. Hoặc tôi phải tạo một cái khác. Và định dạng của yêu cầu là gì?

Trả lời

3

Gửi đến cùng một máy chủ như yêu cầu GetStreamUri trên cổng 554 (hoặc cổng khác được định cấu hình trong thiết bị cho RTSP). Sau đó, bạn phải gửi yêu cầu OPTIONS trước DESCRIBE. Nó có thể sẽ trả về 401 trạng thái trái phép và giá trị nonce + realm trong phần thân của nó. (Tôi đang sử dụng địa chỉ khác nhau sau đó bạn nhận được trong phản ứng GetStreamUri của bạn.)

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" 

đọc lĩnh vực này và các giá trị nonce, bởi vì bạn cần nó cho autorization và gửi khác, yêu cầu OPTIONS ủy quyền.

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 

đáp ứng là tạo this way

Sau đó đến MÔ TẢ yêu cầu

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 

và phản ứng

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 

từ địa chỉ phản ứng này trong a = kiểm soát: http: //192.168. 128,99: 554/profile1/media.smp/trackID = v nên được phân tích cú pháp cho phương tiện m = video (một phương thức SDP otocol). Đó là cách tôi nhận được. Thủ tục tiếp theo nên đặt yêu cầu SETUP bằng thông tin vận chuyển và sau đó gửi yêu cầu PLAY. Bạn phải nghe trên cổng bạn đã chỉ định trong yêu cầu SETUP để nhận ảnh.

+1

Khi GetStreamUri trả về 'rtsp: //192.168.5.53: 8090/profile1 = r', máy chủ RTSP liên hệ không nằm trên cổng 554. – mpromonet

Các vấn đề liên quan