MJPEG потоковое с libcurl - PullRequest
       1

MJPEG потоковое с libcurl

2 голосов
/ 29 июля 2011

Я хочу получать изображения JPEG с IP-камеры по HTTP.Я использую LIBCURL для этой цели в моей C-программе.Камера возвращает одно изображение со следующим URL:

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

Мне было интересно, как мне указать этот запрос GET в libcurl.Можно ли использовать в curl_easy_setopt ()?

В настоящее время я использую следующий код для получения одного изображения и сохранения в функции обратного вызова write_data:

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);
    }

Как использовать метод GET, чтобы изображения получали непрерывно исохранено функцией обратного вызова?

Ответы [ 2 ]

0 голосов
/ 30 июля 2011

Вы пытались использовать полный URL?

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

libcurl анализирует это и создает запрос GET. GET используется по умолчанию для HTTP, вам нужно добавить код для получения HEAD или POST (так что вы, вероятно, не хотите этого делать).

0 голосов
/ 30 июля 2011

Я не совсем уверен в этом, но я думаю, что вы должны открыть соединение с помощью CURL, указать, что соединение будет оставаться активным, а затем начать загрузку данных.

С некоторым типом while () выдолжен загрузить данные и получить каждый JPEG, отправленный камерой.

Вы должны прочитать о кодеке MJPEG, который имеет структуру, в которой каждый JPEG ограничен заголовком.

...