2011-07-29 67 views
2

HTTP経由でIPカメラからJPEG画像を受信したいと考えています。私はCプログラムでこの目的のためにLIBCURLを使用しています。カメラは、次のURLで、単一のイメージを返します。libcurlでMJPEGストリーミング

"http://143.205.116.14?image&res=full&x0=0&y0=0&x1=2944&y1=1920" 

のlibcurlを使用して、私は単一の画像を受信し、コールバック関数で.jpgファイルに書き込むことができます。ただし、次のように連続ストリーミングのために、カメラがGETリクエストを受け付けます。

"GET /mjpeg&res=full&x0=0&y0=0&x1=2944&y1=1920 HTTP/1.1\r\n HOST:143.205.16.14\r\n\r\n" 

私はどのように私はlibcurlの中に、このGETリクエストを指定しないと思いまして。 curl_easy_setopt()で使用できますか?画像が連続して受信し、コールバックによって保存されているように、私はGETメソッドを使用するにはどうすればよい

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

int main() 
{ 
     curl = curl_easy_init(); 
    if(curl) { 
    fp = fopen("C:\\trans.txt","wb"); 
    curl_easy_setopt(curl, CURLOPT_URL, "http://143.205.116.14?image&res=full&x0=0&y0=0&x1=2944&y1=1920"); 
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); 
    res = curl_easy_perform(curl); 
    curl_easy_cleanup(curl); 
    fclose(fp); 
    } 

は、現時点では私は、単一の画像を取得し、書込データのコールバック関数の中で保存するには、次のコードを使用します関数?

答えて

0

私はこれについて完全にはわかりませんが、接続を有効にしてからデータのダウンロードを開始するように指定する必要があります。

いくつかのタイプのwhile()では、データをダウンロードし、カメラが送信した各JPEGを取得する必要があります。

各JPEGがヘッダーで区切られた構造を持つMJPEGコーデックについて読む必要があります。

0

完全なURLを使用してみましたか?

http://143.205.116.14/mjpeg&res=full&x0=0&y0=0&x1=2944&y1=1920

libcurlのは、これを解析し、GETリクエストを作成します。 GETはHTTPのデフォルトです。あなたはHEADやPOSTを得るためにコードを追加する必要があります(そうしたくないかもしれません)。

+0

上記のプログラムでこの完全URL(連続ストリーム用)を使用しました。しかし、それは立ち往生し、どんなイメージもキャプチャしません。 – umair

+0

このURLをブラウザで使用すると、何かが得られますか? libcurlは何も特別なことをしません。単にHTTP経由でリクエストを送信します。 wiresharkを使用して、送信しているものを正確に確認し、必要なリクエストであることを確認できます。ブラウザで動作しない場合、libcurlでは動作しません(ほとんどの場合)。 –

関連する問題