我有 VideoSec IP 摄像机,以及在嵌入式 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。因此,我需要一种使用 libcurl 从 mjpeg 流中仅抓取一帧的方法。OpenCV 不是一个选项。