У меня есть IP-камера VideoSec и демон, работающий на встроенном контроллере Linux NPE. Демону необходимо записывать изображения с IP-камеры, эта часть реализована с помощью libcurl стандартным способом, а с осевой камерой работает нормально:
static size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written = fwrite(ptr, size, nmemb, stream);
return written;
}
void refreshCameraImage(char *target, char *url)
{
CURL *image;
CURLcode imgresult;
FILE *fp;
image = curl_easy_init();
if (image)
{
fp = fopen(target, "wb");
if(fp == NULL)
printf("\nFile cannot be opened");
curl_easy_setopt(image, CURLOPT_URL, url);
curl_easy_setopt(image, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(image, CURLOPT_WRITEDATA, fp);
imgresult = curl_easy_perform(image);
if( imgresult )
{
printf("\nCannot grab the image!");
}
}
curl_easy_cleanup(image);
fclose(fp);
}
Проблема с камерой VideoSec в том, что я не могу определить какой-либо поток jpeg, только MJPEG. Итак, мне нужен способ получить только один кадр из потока mjpeg с помощью libcurl. OpenCV не вариант.