视频图像刷新到HTTP的原理

上一篇博客已经说了cgi拿到了共享内存的程序还需要处理的才能够真正刷新到网页里面去

HTTP协议介绍

HTTP中文名称是超文本传输协议,它是一个简单的请求.响应协议,HTTP协议它运行在TCP上面,它是互联网数据通信的基础。 几乎所有的网页请求和互联网处理都是根据HTTP协议进行处理。HTTP是一种用于分布式和超媒体信息系统的应用协议,值得注意的是HTTP是万维网的数据通信基础。

我们这个项目怎么通过http刷新到网页里面去。

CGI程序通过HTTP协议把共享内存的RGB数据通过HTTP协议发送到BOA服务器,然后HTML界面再BOA服务器上面获取数据。HTTP的视频刷新通常由两部分组成,第一个部分是HTTP视频响应的头部,第二部分是刷新具体的每一帧JPG字节流数据,具体的如上图。

HTTP视频响应头部

要实现HTTP的视频刷新,就必须要添加HTTP的响应头部,下面是HTTP响应视频的格式。

HTTP/1.0 200 OK\r\n

Server: Motion/4.1.1\r\n

Connection: close\r\n

Max-Age: 0\r\n

Expires: 0\r\n

Cache-Control: no-cache, p rivate\r\n

Pragma: no-cache\r\n

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后面的字段是自定义的

这个头部,就是我们程序一启动就响应一次。

HTTP刷新每一帧图像的格式

填写完头部信息之后,就需要刷新每一帧的图像数据,对于HTTP来说刷新每一帧图像数据也有对应的格式,具体的如下所述

--Hello_Harry\r\nContent-type: image/jpeg\r\n\r\n (这个是放在死循环里面的,每一次的响应jpeg类型)

image_data

我们来解释一下上面的格式:

--Hello_Harry\r\n这个是boundary字段,这个跟头部创建的boundary字段一致

Content-type: image/jpeg\r\n\r\n指的是每次刷新的格式是jpeg的图像格式

image_data 指的就是具体的图像数据,比方说每一帧的JPEG图像格式(值得注意的是,对于HTTP图像刷新格式都是JPG或者PNG格式的字节流)

HTTP刷新每一帧视频的伪代码实现

格式分析完了之后,我们来写搞一段伪代码来看一下如何实现HTTP刷新视频

复制代码
int main()
{

    //完成头部的初始化
    "HTTP/1.0 200 OK\r\n";

    "Server: Motion/4.1.1\r\n";

    "Connection: close\r\n";

    "Max-Age: 0\r\n";

    "Expires: 0\r\n";

    "Cache-Control: no-cache, private\r\n";

    "Pragma: no-cache\r\n";

    "Content-Type: multipart/x-mixed-replace; boundary=Hello_Harry\r\n\r\n";

     while(1)

     {

         //告诉服务器我每次要响应数据类型是jpeg字节流

         "--Hello_Harry\r\nContent-type: image/jpeg\r\n\r\n";
        
         //获取这种的字节流
         get_image_data();

    
    
}

}

上面这段伪代码是HTTP刷新视频实现,首先先填写HTTP的头部响应信息,然后使用while(1)循环响应jpg的图像格式,然后get_image_data(get_image_data是获取图像的方法)不断获取每一帧的jpg或者png的具体图像字节流数据。

相关推荐
郝学胜-神的一滴3 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
绵绵细雨中的乡音3 小时前
深入理解 ET 与 LT 模式及其在 Reactor 模型中的应用
服务器·网络·php
吠品4 小时前
企业信任基石OV SSL证书
网络协议·https·ssl
暖馒5 小时前
Modbus应用层协议的深度剖析
网络·网络协议·c#·wpf·智能硬件
开源技术6 小时前
DNS详解——域名是如何解析的
http
yunfuuwqi6 小时前
OpenClaw✅真·喂饭级教程:2026年OpenClaw(原Moltbot)一键部署+接入飞书最佳实践
运维·服务器·网络·人工智能·飞书·京东云
迎仔6 小时前
C-算力中心网络隔离实施方法:怎么搞?
运维·网络
代码游侠6 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
枷锁—sha7 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Zach_yuan8 小时前
深入浅出 JSONCpp
linux·服务器·网络·c++