如何使用CGI流式传输运动jpeg
How to stream motion jpeg using CGI?
我正在创建一个 Web 应用程序,该应用程序需要显示我从高速摄像机抓取的视频。为此,我正在尝试创建一个 Motion JPEG CGI 应用程序,当浏览器访问此 CGI 应用程序时,该应用程序仅将这些帧输出为 JPG 序列。
所以我的问题是:我如何创建一个简单的C++代码,只读取一系列 JPG 文件,然后将其输出打印到其他文件中,以便浏览器加载 JPG 序列?
我已经尝试了以下代码,但它不起作用...
#include <iostream>
#include <cstdio>
int main()
{
std::cout << "Cache-Control: no-cachenn";
std::cout << "Cache-Control: privatenn";
std::cout << "Pragma: no-cachenn";
std::cout << "Content-type: multipart/x-mixed-replace; boundary=spidermannn";
int i = 0;
while(true)
{
char buffer[1024];
sprintf(buffer, "/tmp/img_%d.jpg", (i%2));
FILE* fp = fopen(buffer, "r");
while(!feof(fp))
{
fread(buffer, 1, 1, fp);
fwrite(buffer, 1, 1, stdout);
}
fclose(fp);
i++;
std::cout << "--spidermann";
std::cout << "Content-type: image/jpegnn";
}
}
经过非常困难的二进制调试,我能够提出一个简单的解决方案:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
int main()
{
printf("Content-Type: multipart/x-mixed-replace; boundary=--jpgboundaryrnrn");
int i = 0;
while(true)
{
char fnameBuffer[1024];
sprintf(fnameBuffer, "/tmp/img_%d.jpg", (i%2));
FILE* fp = fopen(fnameBuffer, "r");
fseek(fp, 0, SEEK_END);
long fileSize = ftell(fp);
rewind(fp);
char* buffer = (char*)malloc(sizeof(char)*fileSize);
fread(buffer, 1, fileSize, fp);
fclose(fp);
free(buffer);
i++;
printf("--jpgboundary");
printf("Content-type: image/jpegrn");
printf("Content-length: %ldrnrn", fileSize);
fwrite(buffer, 1, fileSize, stdout);
printf("rnrnrn");
usleep(1000);
}
}
这实际上加载了一系列图像并将它们刷新到浏览器。我用谷歌浏览器测试了输出,它按预期工作。
相关文章:
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- Angelscript从C++传输数组
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 从服务器传输到客户端的消息不会出现
- USB传输的LibUSB C++格式不同
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- 将相机数据从服务器实时流式传输到客户端
- 加密在 Windows、C++ 和 Java 中传输中的数据
- 如何从网站获取数据并将其传输到数据库?
- 使用蓝牙组件将数据从Android手机传输到串行设备时出现问题
- 在 OpenCV 中应用公式并传输图像
- 在不传输的情况下更改 Win32 中的串行端口波特率
- 粒子系统:所有粒子都朝同一方向运动
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- 如何使用CAPL的诊断功能获取CAN传输的数据(256字节)?
- 如何通过ROS将realsense数据传输到其他设备
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- 将FFMpeg AVFrame对象从C++应用程序流式传输到Python的最佳方法?
- 使用IMFSourceReader(Microsoft媒体基金会)进行音频流传输
- 如何使用CGI流式传输运动jpeg