视频图像刷新到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的具体图像字节流数据。

相关推荐
sakoba4 分钟前
Docker学习其二(容器卷,Docker网络,Compose)
运维·网络·学习·docker·容器·基础
惜.己2 小时前
appium中urllib3.exceptions.LocationValueError: No host specified. 的错误解决办法
网络·appium
吉凶以情迁2 小时前
window服务相关问题探索 go语言服务开发探索调试
linux·服务器·开发语言·网络·golang
专注VB编程开发20年2 小时前
UDP受限广播地址255.255.255.255的通信机制详解
网络·udp·智能路由器
189228048613 小时前
NX947NX955美光固态闪存NX962NX966
大数据·服务器·网络·人工智能·科技
Sadsvit4 小时前
Linux 进程管理与计划任务
linux·服务器·网络
一碗白开水一5 小时前
【模型细节】FPN经典网络模型 (Feature Pyramid Networks)详解及其变形优化
网络·人工智能·pytorch·深度学习·计算机视觉
什么都想学的阿超5 小时前
【网络与爬虫 38】Apify全栈指南:从0到1构建企业级自动化爬虫平台
网络·爬虫·自动化
D-海漠6 小时前
安全光幕Muting功能程序逻辑设计
服务器·网络·人工智能
都给我7 小时前
可计算存储(Computational Storage)与DPU(Data Processing Unit)的技术特点对比及实际应用场景分析
运维·服务器·网络·云计算