当前位置: 首页 > news >正文

潮州市建设工程交易中心网站做淘宝客找商品网站有哪些

潮州市建设工程交易中心网站,做淘宝客找商品网站有哪些,做公司+网站建设价格,宜昌微网站建设CGI程序刷新视频到HTTP的流程 上一篇,我们已经初步了解HTTP刷新视频的原理,这次我们重点来看CGI如何实时刷新共享内存的视频到HTTP。具体的步骤有上面四步分别是: 初始化HTTP响应头部。获取每一帧共享内存的RGB数据。使用OPENCV把每一帧RGB数…

CGI程序刷新视频到HTTP的流程

        上一篇,我们已经初步了解HTTP刷新视频的原理,这次我们重点来看CGI如何实时刷新共享内存的视频到HTTP。具体的步骤有上面四步分别是:

  1. 初始化HTTP响应头部。
  2. 获取每一帧共享内存的RGB数据。
  3. 使用OPENCV把每一帧RGB数据转换成JPG数据流(目的是为了节省网络,实质传输的是一张一张图片到网页)
  4. 把JPG数据刷新到HTTP服务器进行响应。

初始化HTTP响应头部。

int main()
{//第三步:初始化HTTP响应头部std::cout << "HTTP/1.0 200 OK\r\n";std::cout << "Server: Motion/4.1.1\r\n";std::cout << "Connection: close\r\n";std::cout << "Max-Age: 0\r\n";std::cout << "Expires: 0\r\n";std::cout << "Cache-Control: no-cache, private\r\n";std::cout << "Pragma: no-cache\r\n";std::cout << "Content-Type: multipart/x-mixed-replace; boundary=Hello_Harry\r\n\r\n";
}

HTTP/1.0 200 OK\r\n指的是HTTP的1.0版本并且状态是200(200指的是响应成功)

Server: Motion/4.1.1\r\n指的是HTTP动态处理图像,版本是4.1.1

Connection: close\r\n指的是默认HTTP开始的时候,是关闭状态

Max-Age: 0\r\n指的是存活时间为0

Expires: 0\r\n指的是过期时间为0

Cache-Control: no-cache, private\r\n指的是对数据不缓存,打开新窗口会重新访问服务器

Pragma: no-cache\r\n指的也是数据不进行缓存

Content-Type: multipart/x-mixed-replace; boundary=Hello_Harry这一段是整个首部最重要的部分,它表示的是HTTP响应类型是流媒体数据(multipart/x-mixed-replace)如视频流、音频流,并且当每一个新的数据相应的时候就替换当前部分。这通常用不断更新的内容,比方说:实时视频流或者实时图表数据;boundary后面的字段是自定义的

获取每一帧共享内存的RGB数据。使用OPENCV把每一帧RGB数据转换成JPG数据流

    //共享内存里面的数据是源源不断流过来while(1){//第一步:获取共享内存视频流数据//其实就是把数据从共享内存拷贝到OpenCV,为什么要拷,todo...//RGB_FRAME_SIZE WIDTH:是宽*高*3,3是rgb三个颜色的通道。memcpy(rgbImg.data, addr, RGB_FRAME_SIZE);//第二步:把rgb视频流做一个装换,变成jpg字节流//todo......//把这些的jpg字节流数据保存到buff里面std::vector<uchar> buff;//在这里开始转换,把rgbImg里面的数据rgb视频流数据转换成一个jpg的视频流cv::imencode(".jpg", rgbImg, buff);}

        先是获取共享内存的RGB数据,并使用opencv转换成jpg流的代码。这里使用的api是imencode, imencode的作用是把当前的视频流编码为指定格式的字节流。我们来看看imencode的结构:bool imencode(const string& ext, InputArray img, vector<uchar>& buf, const vector<int>& params = vector<int>());

第一个传参: 需要编码的文件扩展名,”.jpg”、”.png”。注意:这里的编码指的是把视频流转换成字节流,并不是压缩编码,未来传输的也是一帧一帧图像。

第二个传参:输入的图像,这里就是共享内存的RGB数据

第三个传参:输出的字节流,这里用向量(vector)来表示输出的字节流

        共享内存的RGB视频流经过imencode处理后就会输出RGB的字节流,RGB的字节流用vector<unchar>。由于HTTP刷新的视频需要用字节流显示,所以需要把视频流转换成字节流才能够正常显示。

把JPG数据响应HTTP服务器

        //第三步:2.把JPG数据响应HTTP服务器//指定每次刷新的格式是jpeg的图像格式std::cout << "Hello_Harry\r\nContent-type: image/jpeg\r\n\r\n";//每次刷新的数据都是vector向量存储的jpg数据,//buf.data是每一帧jpg的缓冲区数据, buf.size是每一帧jpg的长度//std::cout.write() 方法将指定大小的数据从内存地址写入标准输出流。/** * std::cout <<: 适用于大多数输出场景,特别是需要自动格式化的情况。* std::cout.write(): 适用于需要高效输出大量字符数据或二进制数据的情况,且不需要自动格式化。*/std::cout.write(reinterpret_cast<const char* >(buff.data()), buff.size());//刷新缓冲区,确保所有的数据都被写入输出流std::cout.flush();

        到这里cgi部分就已经完成了,接下来就是看HTML怎么获取这些cgi视频流。

<!DOCTYPE html>
<html>
<head><title>CGI Video Stream</title>
</head>
<body><img src="/cgi-bin/sharemeomory_rv1126_cgi.cgi" width="1920" height="1080" />
</body>
</html>

         看上面HTML的程序代码,代码里面就给一个img标签它,src资源后面跟的就是视频数据的来源,来源就是这个程序:sharemeomory_rv1126_cgi.cgi

        sharemeomory_rv1126_cgi.cgi就是我们编译的sharemeomory_rv1126_cgi.cpp源文件编译生产的。

        编译好了之后,就把这个文件放到www/cgi-bin路径下

http://www.dtcms.com/a/416101.html

相关文章:

  • 结构化方法和面向对象方法对比
  • 凡科建站官网免费注册手机app软件开发机构
  • 网站建设功能需求文档网站开发后期做什么
  • 福州如何做百度的网站php做网页
  • 青建设厅官方网站开发小程序需要多少钱难吗
  • 兼职做诚信网站认证那个公司可以做网站
  • 百度为什么不收录网站的某个版块免费网页搭建
  • leetcode 438 找到字符串中所有的字母异位词
  • 田园综合体建设网站seo技术
  • 动态ip可以做网站吗南宁网络广播电视台
  • 东莞企业网站制作出售网站优化费用怎么做会计分录
  • 网络安全基础--第五课:跨站脚本攻击XSS
  • seo网站外链工具水果套餐网站
  • 全国各省市绿色金融指数及原始数据(1990-2022年)
  • 移动网站开发基础知识网址建设
  • 如何备份网站的网站可视区最多可以做多大
  • 网站漏洞扫描服务设计素材库
  • AI伦理规范如何影响AI的商业模式?
  • 百度字体如何转换wordpressseo 推广怎么做
  • 鑫三科技网站设计wordpress在线阅读pdf
  • 重庆北京网站建设版面设计软件
  • 企业做网站应该注意的问题广东建设厅的工程造价网站
  • Windows配置JDK8(附各版本JDK下载链接)
  • 办公网新闻上传网站开发wordpress创意博客
  • 网站建设学习视频wordpress 网页飘窗
  • AI觉醒:小白的大模型冒险记 第9章:GPT大师的工坊 - 语言模型的训练秘密
  • 优酷网站模板下载加强机关网站建设
  • 链家网信息爬虫实践:从网页抓取到数据存储
  • 网站开发销售话术网站模板html5
  • 网站制作哪些公司好全国企业信用信息公示系统查询入口