2012-06-08 24 views
5

मेरे पास नेटवर्क आईपी कैमरा है (कैनन वीबी-एम 40)। यह कैमरा ONVIF प्रोटोकॉल का समर्थन करता है। मैं सी भाषा का उपयोग कर विंडोज़ में अपनी ONVIF कार्यक्षमता को कार्यान्वित कर रहा हूं। मुझे निम्नलिखित अनुरोध का उपयोग कर आरटीएसपी यूआरआई मिला।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); 

और प्रतिक्रिया है:

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

ONVIF विवरणों के आधार पर, मैं अनुरोध डिवाइस के लिए भेजना चाहिए एक बार मैं धारा यूआरआई के लिए 'वर्णन'। मैं इस प्रक्रिया का उपयोग कर रहा हूं क्योंकि मुझे टीसीपी पर स्ट्रीम की आवश्यकता है।

मेरा सवाल यह है कि डिवाइस को 'डिस्क्रिब' अनुरोध और किस सॉकेट पर भेजना है?

क्या मुझे यह अनुरोध उसी सॉकेट पर भेजना चाहिए जिस पर मैंने GetStreamURI अनुरोध भेजा था। या मुझे एक और बनाना है। और अनुरोध का प्रारूप क्या होगा?

उत्तर

3

पोर्ट 554 (या आरटीएसपी के लिए डिवाइस में कॉन्फ़िगर अन्य पोर्ट) पर GetStreamUri अनुरोध के रूप में उसी होस्ट को भेजें। फिर आपको डिस्क्रिब से पहले विकल्प अनुरोध भेजना होगा। यह शायद 401 अनधिकृत स्थिति और उसके शरीर में गैर-वास्तविक मूल्य वापस कर देगा। (मैं विभिन्न पते का उपयोग कर रहा है तो आप अपने 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" 

इस दायरे और अस्थायी रूप से मूल्यों पढ़ें, क्योंकि आप इसे autorization के लिए की जरूरत है और एक अन्य, अधिकृत विकल्प अनुरोध भेजें। http: //192.168

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 

प्रतिक्रिया उत्पन्न this way

तब वर्णन एक = नियंत्रण में अनुरोध

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 

और प्रतिक्रिया इस प्रतिक्रिया के पते से

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 

आते हैं। 128.99: 554/प्रोफाइल 1/media.smp/trackID = v मीडिया एम = वीडियो के लिए पार्स किया जाना चाहिए (इसका एक एसडीपी पीआर otocol)। मुझे कितना दूर मिला। अगली प्रक्रिया परिवहन जानकारी के साथ एसईटीयूपी अनुरोध करना चाहिए और फिर PLAY अनुरोध भेजें। छवियों को प्राप्त करने के लिए आपको SETUP अनुरोध में निर्दिष्ट पोर्ट पर सुनना होगा।

+1

GetStreamUri रिटर्न 'rtsp: //192.168.5.53: 8090/profile1 = r' के रूप में, संपर्क करने के लिए आरटीएसपी सर्वर पोर्ट 554 पर नहीं है। – mpromonet