X-Space系列进阶教程六之实时视频传输原理

2024-06-18 07:59

本文主要是介绍X-Space系列进阶教程六之实时视频传输原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天我们给大家讲讲我们的视频传输的原理,也就是对Mjpg_Stream进行源码分析,我将给大家按照我之前发表的论文里面的内容给大家进行讲解,当然力求为了让大家可以更简单的了解到实时视频传输的原理呢,我也会在原来论文的基础上修改一下,让大家更加清晰易懂。

我们的视频传输技术基于开源的Mjpg_Streamer,简单说呢就是它采用多线程技术,通过运行抓图线程,以及并发的服务器线程来实现的,具体工作流程如下:

1.      首先通过V4L2对摄像头进行初始化,包括视频尺寸等设置。

2.      根据我们启动的参数呢,设置下输出初始化,比如使用的端口号,主页文件的目录等。

3.      创建抓图线程,以阻塞方式等待图像数据,并且将图像处理为JPEG文件,对于YUYV格式的图像输出先要转换成RGB格式,然后调用libjpeg库压缩成JPEG文件,对于MJPEG格式需要插入Huffman数据表,处理完一帧图像后通知所有等待数据的客户端线程。

4.      创建并发服务器线程,以阻塞方式监听客户端HTTP请求,并且为每个客户端单独创建线程。

5.      当有客户端进行连接时,创建客户端处理线程,给客户端发送特殊的HTTP响应头,目的为了使服务器端可以不断的发送JPEG数据给客户端。

6.      整个工作流程图如下所示。


由于Mjpg_Streamer并没有给我们准备一个开源的客户端解码的程序,所以我们需要对服务器端发送的HTTP数据进行分析,自己写一个关于视频解码的程序,首先给大家详细分析下服务器端发送的数据,刚建立连接时是先发送数据头,包含了Content-Type和boundary等设置,之后进入循环,每次在发送数据之前都先发一个Content-Type:image/jpeg的头,然后再以内存映射方式将图像发送出去,然后再发送一个包含BOUNDARY的尾,依次循环,数据流图如图所示。


详细的代码如下:

/*******************************

这篇关于X-Space系列进阶教程六之实时视频传输原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071715

相关文章

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

Steam邮件推送内容有哪些?配置教程详解!

Steam邮件推送功能是否安全?如何个性化邮件推送内容? Steam作为全球最大的数字游戏分发平台之一,不仅提供了海量的游戏资源,还通过邮件推送为用户提供最新的游戏信息、促销活动和个性化推荐。AokSend将详细介绍Steam邮件推送的主要内容。 Steam邮件推送:促销优惠 每当平台举办大型促销活动,如夏季促销、冬季促销、黑色星期五等,用户都会收到邮件通知。这些邮件详细列出了打折游戏、

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

X-AnyLabeling使用教程

1.AI 模型自动分割标注使用教程 2.AI 模型自动目标检测标注使用教程

百度OCR识别结构结构化处理视频

https://edu.csdn.net/course/detail/10506

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

青龙面板2.9之Cdle傻妞机器人编译教程

看到有的朋友对傻妞机器人感兴趣,这里写一下傻妞机器人的编译教程。 第一步,这里以linux amd64为例,去官网下载安装go语言安装包: 第二步,输入下方指令 cd /usr/local && wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz -O go1.16.7.linux-amd64.tar.gz