视频图像刷新到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 小时前
webrtc 音频模块FEC模块
网络·音视频·webrtc
youngerwang3 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
zjun10014 小时前
TCP专栏-4.四次挥手
网络协议·tcp/ip
智慧光迅AINOPOL6 小时前
校园在线巡课系统方案:督导全覆盖
网络·全光网解决方案·全光网·校园全光网·校园全光网解决方案
酉鬼女又兒6 小时前
零基础入门计算机网络:网络层核心任务、三大关键问题、两种服务类型与 TCP/IP 网际层协议体系全解析
服务器·网络·网络协议·tcp/ip·计算机网络·php·求职招聘
Urbano7 小时前
工装制作全流程科普:从面料到自动化生产
网络·人工智能
2401_868534787 小时前
网规笔记 | 真题解析:2018年11月软考网规-网络安全案例分析
网络
Gauss松鼠会7 小时前
【GaussDB】GaussDB重要通信参数汇总
服务器·网络·数据库·sql·性能优化·gaussdb·经验总结
超级无敌zhq7 小时前
后渗透痕迹清理:攻防对抗中的隐身术
网络·数据库·网络安全
代码中介商8 小时前
HTTPS加密原理:图解安全传输全流程
网络协议·http·https