视频图像刷新到HTTP的原理

发布于:2025-03-10 ⋅ 阅读:(15) ⋅ 点赞:(0)

        上一篇博客已经说了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的具体图像字节流数据。