2013-02-25 39 views
1

我已經安裝了cURL,並且我能夠從網站上下載圖像,並且工作正常。cURL下載攝像頭圖像(http請求)

下面是代碼:

#define CURL_STATICLIB 
#include <stdio.h> 
#include <stdlib.h> 
#include </usr/include/curl/curl.h> 
#include </usr/include/curl/stdcheaders.h> 
#include </usr/include/curl/easy.h> 

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { 
    size_t written = fwrite(ptr, size, nmemb, stream); 
    return written; 
} 

int main(void) { 
    CURL *curl; 
    FILE *fp; 
    CURLcode res; 

    char *url = "http://www.example.com/test_img.png"; 
    char outfilename[FILENAME_MAX] = "/home/c++_proj/output/web_req_img.png"; 
    curl = curl_easy_init(); 
    if (curl) { 
     fp = fopen(outfilename,"wb"); 
     curl_easy_setopt(curl, CURLOPT_URL, url); 
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); 
     res = curl_easy_perform(curl); 
     /* always cleanup */ 
     curl_easy_cleanup(curl); 
     fclose(fp); 
    } 
    return 0; 
} 

我也有一個DLINK DCS-930L攝像機。我可以輕鬆地將相機連接到一個靜態IP地址,通過登錄相機(例如http://192.168.1.5),我可以在相機上查看實時視頻。 我不需要任何特殊的軟件或任何東西來開始觀看視頻。

現在,我想用cURL從相機下載圖像。但我不知道該怎麼做。 有人可以告訴我,或者提供一些代碼嗎? 我想要做的就是捕捉(採樣)少數正在流式傳輸的圖像。 我如何知道何時提出請求,以及何時將圖像之間的邊界。

我真的很感激一些建議和一段代碼,可以讓我去。

牛逼

+0

這完全取決於攝像頭提供的接口,即「http:// 192.168.1.5」上顯示的圖像/視頻的內容類型實際上是什麼。唯一能夠幫助你的人是那些在家中擁有精確相機的人。 – us2012 2013-02-25 23:50:03

+0

@Ruby:請在發帖時避免使用簽名,謝謝,:) – 2013-02-26 07:15:35

回答

0

根據手冊這臺相機[1],你需要使用Java或ActiveX插件來接收和觀看視頻:

請確保您有最新版本安裝在您的計算機上的Java應用程序 ,以確保以Java模式查看 視頻時的正確操作。 Java應用程序可以從Sun網站免費下載 (http://www.java.com)。

當你連接到你的相機的主頁,你會被提示 下載ActiveX。如果您想使用ActiveX來查看您的視頻 而不是Java,那麼您必須下載ActiveX。

這表明抓取圖像會比簡單地發出HTTP請求更困難。

[1] http://www.dlink.com/us/en/support/product/-/media/Consumer_Products/DCS/DCS%20930L/Manual/DCS%20930L_Manual_EN_US.pdf 
+0

我想抓取圖像的原因是因爲我想對它做一些圖像處理。所以,不知何故,我需要下載圖像,以便將其引入編程語言。我可以用C/C++/Python/Java程序以某種方式做到這一點嗎? – Rudy01 2013-02-26 00:02:22

+0

我對這款相機並不熟悉,所以我不知道。使用插件查看網頁的來源,也許可以嘗試嗅探網絡流量 - 也許這只是一串JPG格式,然後您可以攔截並保存。 – 2013-02-26 00:30:38