当前位置: 首页 > article >正文

图像处理篇--- HTTP|RTSP|MJPEG视频流格式


文章目录

  • 前言
  • 一、MJPEG (Motion JPEG)
    • 基本概念
    • 技术特点
      • 编码方式
      • 传输协议
      • 数据格式
    • 优势
      • 实现简单
      • 低延迟
      • 兼容性好
      • 容错性强
    • 劣势
      • 带宽效率低
      • 不支持音频
      • 缺乏标准控制
    • 典型应用
  • 二、RTSP (Real Time Streaming Protocol)
    • 基本概念
    • 技术特点
      • 协议栈
      • 工作流程
      • 传输模式
    • 优势
      • 专业流媒体支持
      • 高效传输
      • 低延迟
    • 劣势
      • 实现复杂
      • 兼容性问题
    • 典型应用
  • 三、HTTP流媒体
    • 基本概念
    • 主要类型
      • 1. 渐进式下载(Progressive Download)
      • 2. HTTP Live Streaming (HLS)
      • 3. MPEG-DASH
    • 优势
      • 防火墙友好
      • 自适应能力
      • CDN友好
    • 劣势
      • 延迟较高
      • 协议开销
    • 典型应用
  • 三、三者的详细对比
  • 四、技术选择建议
    • 选择MJPEG当
    • 选择RTSP当
    • 选择HTTP流当
  • 五、未来发展趋势
    • WebRTC的崛起
    • 低延迟HLS/MPEG-DASH
    • QUIC协议应用
    • AI编码优化


前言

视频流技术是现代多媒体应用的核心HTTP、RTSP和MJPEG是三种常见的视频流传输方式,各自有不同的特点和应用场景


一、MJPEG (Motion JPEG)

基本概念

MJPEG是一种简单的视频压缩格式,它将视频序列作为一系列独立的JPEG图像传输。

技术特点

编码方式

每帧都是完整的JPEG图像
无帧间压缩(仅帧内压缩)

传输协议

通常通过HTTP协议传输
简单的"multipart/x-mixed-replace"内容类型

数据格式

HTTP/1.1 200 OK
Content-Type: multipart/x-mixed-replace; boundary=--myboundary--myboundary
Content-Type: image/jpeg
Content-Length: [size][JPEG binary data]
--myboundary
Content-Type: image/jpeg
...

优势

实现简单

实现简单:服务器端只需连续发送JPEG图片

低延迟

低延迟:每帧独立,无需缓冲

兼容性好

兼容性好:任何能显示JPEG的设备都能处理

容错性强

容错性强:丢帧只影响当前帧

劣势

带宽效率低

带宽效率低:没有利用帧间冗余信息

不支持音频

不支持音频:纯视频格式

缺乏标准控制

缺乏标准控制:没有统一的播放控制协议

典型应用

  1. 网络摄像头
  2. 嵌入式设备视频输出
  3. 简单的视频监控系统

二、RTSP (Real Time Streaming Protocol)

基本概念

RTSP是专门为流媒体设计的网络控制协议,通常与RTP配合使用传输媒体数据

技术特点

协议栈

RTSP (控制协议)

RTP (数据传输) + RTCP (质量控制)

UDP/TCP

工作流程

工作流程:
sequenceDiagram
客户端->>服务器: OPTIONS
服务器->>客户端: 200 OK (支持的方法)
客户端->>服务器: DESCRIBE
服务器->>客户端: SDP描述
客户端->>服务器: SETUP
服务器->>客户端: 200 OK (建立传输)
客户端->>服务器: PLAY
服务器->>客户端: 开始传输RTP数据
客户端->>服务器: TEARDOWN (结束时)

传输模式

  1. UDP:低延迟但可能丢包
  2. TCP:可靠但延迟较高

优势

专业流媒体支持

  1. 支持播放控制(暂停、跳转等)
  2. 支持多播传输

高效传输

  1. 通常使用RTP压缩传输
  2. 支持多种编码格式(H.264, MPEG-4等)

低延迟

  1. 专为实时流设计
  2. 典型延迟0.5-2秒

劣势

实现复杂

  1. 需要单独的数据和控制通道
  2. 防火墙/NAT穿透问题

兼容性问题

  1. 浏览器原生支持有限
  2. 通常需要专用播放器或插件

典型应用

  1. IP摄像头系统
  2. 专业视频监控
  3. 视频会议系统

三、HTTP流媒体

基本概念

基于HTTP协议的流媒体传输,包括渐进式下载和自适应流等多种形式。

主要类型

1. 渐进式下载(Progressive Download)

GET /video.mp4 HTTP/1.1
Host: example.comHTTP/1.1 200 OK
Content-Type: video/mp4
Content-Length: [total_size][binary data]

2. HTTP Live Streaming (HLS)

# 主播放列表
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1500000,RESOLUTION=640x360
video_360p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,RESOLUTION=1280x720
video_720p.m3u8# 分片列表
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
video0.ts
#EXTINF:10.0,
video1.ts

3. MPEG-DASH

# MPD文件
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"><Period><AdaptationSet><Representation bandwidth="1000000" codecs="avc1" width="640" height="360"><SegmentTemplate media="video_$Number$.m4s"/></Representation></AdaptationSet></Period>
</MPD>

优势

防火墙友好

  1. 使用标准HTTP端口(80/443)
  2. 无NAT穿透问题

自适应能力

  1. 根据网络条件动态调整质量
  2. 支持多种设备分辨率

CDN友好

  1. 可利用现有HTTP缓存基础设施
  2. 支持大规模分发

劣势

延迟较高

  1. HLS典型延迟10-30秒
  2. 即使LL-HLS也有2-5秒延迟

协议开销

  1. 需要多次HTTP请求
  2. 头部信息重复传输

典型应用

  1. 视频点播(YouTube, Netflix)
  2. 直播电视服务
  3. 自适应流媒体

三、三者的详细对比

特性 MJPEG RTSP HTTP流
协议类型 应用层(HTTP) 应用层 应用层(HTTP)
传输层 TCP 通常UDP(RTP) TCP
编码效率 低(仅JPEG压缩) 高(H.264等) 高(H.264等)
典型延迟 0.1-1秒 0.5-2秒 5-30秒
音频支持 无 有 有
播放控制 无 完整控制 有限控制
防火墙穿透 容易 困难 容易
实现复杂度 简单 复杂 中等
带宽适应 无 有限 优秀
浏览器支持 直接支持 需要插件 原生支持
典型应用 网络摄像头 视频监控 视频网站

四、技术选择建议

选择MJPEG当

  1. 需要极简实现
  2. 设备资源有限
  3. 不需要音频
  4. 能接受较高带宽消耗

选择RTSP当

  1. 需要低延迟
  2. 专业视频监控系统
  3. 需要精确播放控制
  4. 网络环境可控

选择HTTP流当

  1. 需要广泛兼容性
  2. 通过互联网分发
  3. 需要自适应码率
  4. 利用现有CDN基础设施

五、未来发展趋势

WebRTC的崛起

  1. 结合了低延迟(UDP)和浏览器支持
  2. 正在蚕食RTSP的传统领域

低延迟HLS/MPEG-DASH

  1. 改进版HTTP流协议
  2. 目标1-3秒延迟

QUIC协议应用

  1. HTTP/3的底层传输协议
  2. 改善HTTP流的连接性能

AI编码优化

  1. 智能码率适应
  2. 基于内容的编码优化
    理解这些视频流技术的区别和特点,可以更好地选择最适应自己项目的视频流格式。

相关文章:

图像处理篇--- HTTP|RTSP|MJPEG视频流格式

文章目录 前言一、MJPEG (Motion JPEG)基本概念技术特点编码方式传输协议数据格式 优势实现简单低延迟兼容性好容错性强 劣势带宽效率低不支持音频缺乏标准控制 典型应用 二、RTSP (Real Time Streaming Protocol)基本概念技术特点协议栈工作流程传输模式 优势专业流媒体支持高…...

【Harbor v2.13.0 详细安装步骤 安装证书启用 HTTPS】

Harbor v2.13.0 详细安装步骤&#xff08;启用 HTTPS&#xff09; 1. 环境准备 系统要求&#xff1a;至少 4GB 内存&#xff0c;100GB 磁盘空间。 已安装组件&#xff1a; Docker&#xff08;版本 ≥ 20.10&#xff09;Docker Compose&#xff08;版本 ≥ v2.0&#xff09; 域…...

C++中的static_cast:类型转换的安全卫士

C中的static_cast&#xff1a;类型转换的安全卫士 在C编程中&#xff0c;类型转换是不可避免的操作&#xff0c;而static_cast作为C四大强制类型转换运算符之一&#xff0c;是最常用且相对安全的一种转换方式。今天我们就来深入探讨一下这个重要的类型转换工具。 一、static_…...

开源与商业:图形化编程工具的博弈与共生

一、开源生态的破局之路&#xff1a;从技术实验到行业标准 在 2025 年全球开发者生态大会上&#xff0c;iVX 凭借 “全栈代码生成 AI 驱动开发” 的技术架构&#xff0c;被行业权威机构评选为 “年度技术创新典范”。作为 2012 年启动的开源项目&#xff0c;iVX 历经 17 年技…...

Docker + Watchtower 实现容器自动更新:高效运维的终极方案

文章目录 前言一、Watchtower 简介二、Watchtower 安装与基本使用1. 快速安装 Watchtower2. 监控特定容器 三、Watchtower 高级配置1. 设置检查间隔2. 配置更新策略3. 清理旧镜像4. 通知设置 四、生产环境最佳实践1. 使用标签控制更新2. 更新前执行健康检查3. 结合CI/CD流水线 …...

(二)Linux下基本指令 2

【知识预告】 16. date 指令 17. cal 指令 18. find 指令 19. which指令 20. whereis 指令 21. alias 指令 22. grep 指令 23. zip/unzip 指令 24. tar 指令 25. bc 指令 26. uname ‒r 指令 27. 重要的⼏个热键 28. 关机 16 date 指令 指定格式显⽰时间&#xff1a;date %Y-…...

1 2 3 4 5顺序插入,形成一个红黑树

红黑树的特性与优点 红黑树是一种自平衡的二叉搜索树&#xff0c;通过额外的颜色标记和平衡性约束&#xff0c;确保树的高度始终保持在 O(log n)。其核心特性如下&#xff1a; 每个节点要么是红色&#xff0c;要么是黑色。根节点和叶子节点&#xff08;NIL节点&#xff09;是…...

无线网络设备中AP和AC是什么?有什么区别?

无线网络设备中AP和AC是什么&#xff1f;有什么区别&#xff1f; 一. 什么是AP&#xff1f;二. 什么是AC&#xff1f;三. AP与AC的关系 前言 肝文不易&#xff0c;点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子都…...

Web自动化测试入门详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、目的 web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”&#xff0c;通常都会作为广大测试从业者的首选学习对象&#xff0c;相较于C/S架…...

WHAT - 简单服务发现

文章目录 简单理解举个例子简单服务发现方式1. 静态配置&#xff08;最简单&#xff0c;但不灵活&#xff09;2. DNS 发现3. 使用服务注册中心&#xff08;稍高级&#xff09; 总结 “简单服务发现”&#xff08;Simple Service Discovery&#xff09;通常指的是一种让系统中的…...

uniapp+vue3+firstUI时间轴 提现进度样式

展示 说明&#xff1a;“status”: 0, //状态:0待审核,1审核通过,2审核驳回,3提现成功,4提现失败 第一种&#xff1a;5种类型归纳为三种显示样式 <fui-timeaxis background"#fff" :padding"[10rpx,16rpx,0]"><!-- 动态生成步骤节点 --><f…...

【日撸 Java 三百行】Day 10(综合任务 1)

目录 Day 10&#xff1a;综合任务 1 一、题目分析 1. 数据结构 2. 相关函数基本知识 二、模块介绍 1. 初始化与成绩矩阵的构建 2. 创建总成绩数组 3. 寻找成绩极值 三、代码与测试 小结 拓展&#xff1a;关于求极值的相关算法 Day 10&#xff1a;综合任务 1 Task&…...

VR 南锣鼓巷:古老街区的数字化绘卷与沉浸式遨游​

VR 技术&#xff0c;即虚拟现实技术&#xff0c;是一种能够创建和体验虚拟世界的计算机仿真系统。它利用计算机生成一种模拟环境&#xff0c;通过多源信息融合的交互式三维动态视景和实体行为的系统仿真&#xff0c;使用户沉浸到该环境中&#xff0c;产生身临其境的感受 。简单…...

使用Java NIO 实现一个socket通信框架

使用Java NIO(非阻塞I/O)实现一个Socket通信框架,可以让你构建高性能的网络应用。NIO提供了Channel、Buffer和Selector等核心组件,支持非阻塞模式下的网络编程。下面是一个简单的例子,展示了如何使用Java NIO创建一个基本的服务器端和客户端进行Socket通信。 1.服务器端 …...

Android开发-常用布局

在Android应用开发中&#xff0c;布局决定了用户界面的结构和元素之间的相对位置。选择合适的布局不仅能够提升用户体验&#xff0c;还能提高代码的可维护性和灵活性。本文将介绍几种最常用的Android布局方式&#xff0c;包括LinearLayout、RelativeLayout、ConstraintLayout以…...

macOS 15.4.1 Chrome不能访问本地网络

前言 最近使用macmini m4&#xff0c;自带macOS15系统&#xff0c;对于开发者简直是一言难尽&#xff0c;Chrome浏览器的本地网络有bug&#xff0c;可以访问本机&#xff0c;但是不能访问路由器上的其他机器&#xff0c;路由器提供的页面也不能访问&#xff0c;如下是折腾解决…...

【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析

目录 引言 1 增量数据导入概述 1.1 增量同步与全量同步对比 1.2 增量同步技术选型矩阵 2 Sqoop增量导入原理剖析 2.1 Sqoop架构设计 2.2 增量同步核心机制 3 Sqoop增量模式详解 3.1 append模式&#xff08;基于自增ID&#xff09; 3.2 lastmodified模式&#xff08;基…...

Dify使用总结

最近完成了一个Dify的项目简单进行总结下搭建服务按照官方文档操作就行就不写了。 进入首页之后由以下组成&#xff1a; 探索、工作室、知识库、工具 探索&#xff1a; 可以展示自己创建的所有应用&#xff0c;一个应用就是一个APP&#xff0c;可以进行测试使用 工作室包含…...

MATLAB导出和导入Excel文件表格数据并处理

20250507 1.MATLAB使用table函数和writetable函数将数据导出Excel表格文件 我们以高斯函数为例子&#xff0c;高斯函数在数学和工程领域有着广泛的应用&#xff0c;它的一般形式为&#xff1a; 其中是均值&#xff0c;决定了函数的中心位置&#xff1b; 是标准差&#xff0c;决…...

分书问题的递归枚举算法

分数问题的递归枚举算法 一、问题引入二、解题步骤1.问题分析思维导图2.解题步骤 三、代码实现1.代码2.复杂度分析 四、个人总结 一、问题引入 分书问题是指&#xff1a;已知 n 个人对 m 本书的喜好&#xff08;n≤m&#xff09;&#xff0c;现要将 m 本书分给 n 个人&#xf…...

Unity WebGL、js发布交互

官网参考 Unity3D开发之WebGL平台上 unity和js前端通信交互 WebFun.jslib mergeInto(LibraryManager.library, {JSLog: function (str) { var strsUTF8ToString(str); Log(str); Log(strs);}, Hello: function () {var strs"Hello, world!"; Log(strs); Log(UTF8ToS…...

Linux复习笔记(一)基础命令和操作

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 一、Linux中的基础命令和操作&#xff08;约30%-40%) 1.用户和组&#xff08;5%左右&#xff09; 1.1用户简介&#xff08;了解&#xff09; 要求&#xff1a;了解&#xff0c;知道有三个用户…...

解决Ceph 14.2.22 Nautilus版本监视器慢操作问题的实践指南

解决Ceph Nautilus版本监视器慢操作问题的实践指南 问题背景问题现象问题分析1. 确认监视器状态2. 检查慢操作详情3. 深入分析操作状态 问题原因解决方案立即解决方法 总结 在生产环境中执行任何操作前&#xff0c;请确保已备份重要数据&#xff0c;并在测试环境中验证解决方案…...

神经网络开发实战:从零基础到企业级应用(含CNN、RNN、BP网络代码详解)

简介 神经网络作为深度学习的核心,正在成为现代AI应用的基石。从基础的感知机到复杂的Transformer架构,从图像识别到自然语言处理,神经网络技术的演进推动了人工智能的快速发展。本文将系统介绍神经网络的核心概念、主流模型及其实现原理,并通过三个企业级实战案例(医学图…...

uniapp使用ui.request 请求流式输出

正文&#xff1a; 在现代Web开发中&#xff0c;实时数据流和长时间运行的请求变得越来越常见&#xff0c;尤其是在处理大量数据或进行实时通信时。在这种情况下&#xff0c;uniapp 提供的 ui.request 请求方法可以帮助我们轻松实现流式输出请求。本文将介绍如何使用 uni.reques…...

20250506让NanoPi NEO core开发板使用Ubuntu core16.04系统的TF卡启动

1、h3-sd-friendlycore-xenial-4.14-armhf-20210618.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区&#xff0c;可以使用SD Card Formatter/SDCardFormatterv5_WinE…...

JAVA自动装箱拆箱

引言 Java 中的**装箱&#xff08;Boxing&#xff09;和拆箱&#xff08;Unboxing&#xff09;**是自动类型转换的机制&#xff0c;用于在基本数据类型&#xff08;如 int、long 等&#xff09;和其对应的包装类&#xff08;如 Integer、Long 等&#xff09;之间进行转换。这种…...

结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘

&#x1f4ca; 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘 &#x1f4d1; 目录 &#x1f4ca; 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘一、前言 &#x1f50d;二、技术选型 &#x1f9f0;三、项目配置与架构 &#x1f3d7;️&#x1f310; 系统整…...

快速上手 Docker:从入门到安装的简易指南(Mac、Windows、Ubuntu)

PS&#xff1a;笔者在五一刚回来一直搞Docker部署AI项目&#xff0c;发现从开发环境迁移到生成环境时&#xff0c;Docker非常好用。但真的有一定上手难度&#xff0c;推荐读者多自己尝试踩踩坑。 本篇幅有限&#xff0c;使用与修改另起篇幅。 一、Docker是什么 #1. Docker是什…...

如何在postman使用时间戳

1. 使用 Pre-request Script 动态转换​ 在发送请求前&#xff0c;将日期字符串转为时间戳并存储为环境变量/全局变量。 ​示例代码​ // 将日期字符串&#xff08;如 "2023-10-01"&#xff09;转为时间戳&#xff08;毫秒&#xff09; const dateString "2…...