UE中低延时播放RTSP监控视频解决方案
第1章 方案简介
1.1 行业痛点
在各种智慧城市、智慧社区、智慧水利、智慧矿山等数字孪生项目中,经常使用通UE来开发三维可视化场景。在这些场景中通常都需要把现场的各种监控视频在UE的可视化场景中接入,主要包含海康威视、大华、宇视、华为等众多监控厂商的设备与平台,监控视频流都是通过RTSP协议实时传送。
但是,在UE中没有好用的RTSP实时流播放插件,当前仅有一款UMP播放插件(基于VLC播放器开发的,但是延时很大,通常在3秒以上),根本无法满足实时播放的需要。比如远程指挥和应急通信、抢险救灾等应用,要求端到端延时在500ms以内,否则基于这种过时的视频信号做出的所有判断和决定将带来极其严重的后果,比如通过视频远程操控无人机、远程操控无人驾驶车辆等。
部分安防监控厂商也推出了视频播放解决方案,比如海康的统一视频监控平台可以输出HLS的m3u8格式的网络流,这种格式可以在H5浏览器中播放,嵌入到UE中调用CEF嵌入式浏览器播放时延时更大(通常在10秒以上),也远远无法满足项目需求。
因此,行业内急需一套成熟的低延时视频接入解决方案,从而满足基于UE开发的各种可视化平台业务的需要。
第2章 解决方案实现
经过十多年的流媒体技术研发积累和对当前各种应用场景的调研分析,北京顺景科技有限公司历时两年多时间开发了一款通用的低延时视频接入解决方案,我们采用B/S架构方式来实现这个功能,该方案可以实现在终端H5浏览器中超低延时播放,端到端播放延时可以控制在500ms以内,在UE中可以调用CEF实现嵌入式播放。实现效果如下:
UE中低延时播放RTSP视频
2.1 技术架构
首先,该方案基于多协议视频转码技术和低延时流媒体直播发布技术来实现,整个方案的架构如下:

2.2 功能模块构成
该方案主要由三部分组成,分别是低延时转码推流工作站、低延时流媒体发布服务器、低延时H5网页播放器:
1. 低延时转码推流工作站
主要功能是将前端监控摄像头的RTSP网络流拉取后进行实时转码,然后推送给低延时流媒体发布服务器。
该工作站根据不同的使用环境,可以采用软件+PC架构实现,也可以采用嵌入式低功耗设备实现(主要用于户外场景不便于维护的场合)。

2. 低延时流媒体发布服务器
用于接收低延时转码推流工作站推送上来的视音频信号,然后将其以流媒体的方式进行实时发布。
该平台采用通用的硬件服务器+流媒体平台软件来实现,可以为用户有效节省投资。
低延时流媒体发布服务器 可以实现如下功能:
1) 支持上千个网络摄像头的并发接入;
2) 支持PC、智能手机、等多终端设备通过H5浏览器直接播放;
3) 单台服务器支持1000以上用户并发收看;
4) 支持按需拉流转发,从而节约服务器端的带宽资源消耗;
5) 支持直播节目的同步录制功能,录制完成后可以自动生成点播内容;
6) 支持服务器的性能和状态监控,包括CPU和内存占用率、实时连接数、网络带宽占用等。
7) 多终端自动适配技术。
针对当前主流的客户端设备,我们开发了终端自适应播放功能,可以自动适配PC端的主流浏览器(Fifrfox、Chrome、Safari),Android端的HTML5浏览器,iOS端的HTML5浏览器,微信小程序等。

3. 低延时H5 网页播放器
该播放器主要用于实时接收流媒体服务器发布的直播流,然后将其以H5的方式进行实时解码播放。该播放器经过深度优化设计,只缓冲1~2帧数据,具有快速接收和解码能力。主要特性如下:
1) 接收和解码延时极低,通常在40ms左右,最高不超过80ms;
2) 支持MSE硬件加速解码;
3) 支持主流的浏览器,包括UE嵌入式CEF浏览器、Chrome、Edge、Fifrfox、Safari等;
4) 支持高清和VR视频播放;
5) 可以适配多种操作系统终端,包括Windows系统、Linux系统、Android系统、iOS系统、国产信创系统(麒麟、统信等);
2.3 方案效果
经过大规模的应用场景使用,当前该系统可以达到如下效果:
在局域网和专网环境下,端到端的直播延时通常在300ms以内;
在互联网环境下,端到端的直播延时通常在500ms以内;
在UE的CEF内嵌式播放中,可以支持到4K@60FPS实时解码,画面播放流畅。

UE中的嵌入式播放效果
2.4 在线测试
我们搭建了一个公网的在线测试环境,感兴趣的朋友可以通过该系统自行测试,
http://www.shunjingtech.com/xmms/pc.html

相关文章:
UE中低延时播放RTSP监控视频解决方案
第1章 方案简介 1.1 行业痛点 在各种智慧城市、智慧社区、智慧水利、智慧矿山等数字孪生项目中,经常使用通UE来开发三维可视化场景。在这些场景中通常都需要把现场的各种监控视频在UE的可视化场景中接入,主要包含海康威视、大华、宇视、华为等众多监控…...
iOS - 开发者账号续订会员资格更换订阅的账号
文章目录 前言开发环境续订会员资格转让账户持有人验证身份1. 实名认证2. 联系信息 更换订阅的账号最后 前言 公司有一个开发者账号快到期了需要续订会员资格,刚注册时是用我自己的个人账号完成的订阅购买。现在想来有点不妥,于是尝试更换用于订阅的账号…...
大数据课程F3——HIve的基本操作
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握HIve的基本SQL语句和注意问题; ⚪ 掌握HIve的表结构; ⚪ 掌握HIve的数据类型; ⚪ 掌握HIve的基础函数和窗口函数; 一、基本SQL 1. SQL的执行方式 1. 通过hive -e的方式来执行指…...
top解析
top - 13:52:26 up 26 days, 20:56, 2 users, load average: 0.00, 0.01, 0.05 当前时间 系统运行时间,格式为时:分 当前登陆用户数2 系统负载,即任务队列的平均长度。三个数值分别为1分钟,5分钟,15分钟前到现在的平均…...
如何让子组件,router-view,呈现左右分布格局
1.用浮动进行浮动布局,定义一个大盒子,把浮动的样式写在公共样式里(这里在main.js里定义一下全局布局)。 2、能够在右边显示了...
计算机网络—TCP和UDP、输入url之后显示主页过程、TCP三次握手和四次挥手
TCP基本认识 TCP是面向连接的、可靠的,基于字节流的传输层通信协议。 图片来源小林coding 序号:传输方向上字节流的字节编号。初始时序号会被设置一个随机的初始值(ISN),之后每次发送数据时,序号值 ISN…...
使用反汇编工具IDA查看发生异常的汇编代码的上下文去辅助分析C++软件异常
目录 1、概述 2、如何使用IDA打开并查看二进制文件的汇编代码 3、在IDA中找到发生崩溃的那条汇编指令的位置 3.1、如何在IDA中找到发生异常的那条汇编指令 3.2、示例 4、阅读汇编代码上下文需要掌握一定的基础汇编知识 5、最后 VC常用功能开发汇总(专栏文章列…...
怎么合并多个视频?简单视频合并方法分享
合并多个视频可以将它们组合成一个更长的视频,这对于需要播放多个短视频的情况非常有用。此外,合并视频还可以使视频编辑过程更加高效,因为不必将多个独立的视频文件分别处理。最后,合并视频可以减少文件数量,从而使整…...
webpack基础知识九:如何提高webpack的构建速度?
一、背景 随着我们的项目涉及到页面越来越多,功能和业务代码也会随着越多,相应的 webpack 的构建时间也会越来越久 构建时间与我们日常开发效率密切相关,当我们本地开发启动 devServer 或者 build 的时候,如果时间过长ÿ…...
批量改名字序号和前缀
echo off setlocal enabledelayedexpansion set count10 for /f %%i in (dir /b *.jpg,*.png,*.bmp,*.jpeg,*.gif) do ( set /a count1 echo %%i 前缀_!count! rename %%i 前缀_!count!.png ) REM …...
基于Spring Boot的医院预约挂号网站设计与实现(Java+spring boot+MySQL)
获取源码或者论文请私信博主 演示视频: 基于Spring Boot的医院预约挂号网站设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java spring…...
Linux命令200例:join将两个文件按照指定的键连接起来分析
🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…...
谈谈网络安全
目录 1.概念 2.发展现状 3.主要问题 1.概念 网络安全是指保护计算机网络和其中的数据免受未经授权访问、损坏、窃取或破坏的过程和技术。网络安全涉及预防和检测潜在的威胁和漏洞,并采取措施保护网络的机密性、完整性和可用性。 网络安全的概念包括以下几个方面&am…...
机器学习深度学习——文本预处理
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——序列模型(NLP启动!) 📚订阅专栏:机器学习&am…...
Qt实现可伸缩的侧边工具栏(鼠标悬浮控制伸缩栏)
Qt实现可伸缩的侧边工具栏 一直在网上找,发现大多的实现方案都是用一个按钮,按下控制侧边栏的伸缩,但是我想要实现鼠标悬浮在侧边栏的时候就伸出,移开就收缩的功能,也没找到好的参考,所以决定自己实现一个…...
【Spring Boot】拦截器与统一功能处理
博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 上一篇文章我们讲解了Spring AOP是一个基于面向切面编程的框架,用于将某方面具体问题集中处理,通过代理对象来进行传递,但使用原生Spring AOP实现统一的…...
RabbitMQ的6种工作模式
RabbitMQ的6种工作模式 官方文档: http://www.rabbitmq.com/ https://www.rabbitmq.com/getstarted.html RabbitMQ 常见的 6 种工作模式: 1、simple简单模式 1)、消息产生后将消息放入队列。 2)、消息的消费者监听消息队列,如果队列中…...
MFC第二十六天 CRgn类简介与开发、封装CMemoryDC类并应用开发
文章目录 CRgn类简介与开发CRgn类简介CRgn类区域管理开发CRgn类区域管理与不规则形状的选取 封装CMemoryDC类并应用开发CMemoryDC.h封装CMemoryDC开发游戏透明动画CFlashDlg.hCFlashDlg.cpp 封装CMemoryDC开发游戏动画 附录四大窗口CDC派生类 CRgn类简介与开发 CRgn类简介 CR…...
解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题
解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题 1、本方案默认本地已经安装了VScode与MobaXterm2、在服务器端3、在本地端安装MobaXterm4、测试5、opencv显示测试(测试过程中需保持MobaXterm开启的状态)6、 matplotlib显示测试&#x…...
支付模块功能实现(小兔鲜儿)【Vue3】
支付 渲染基础数据 支付页有俩个关键数据,一个是要支付的钱数,一个是倒计时数据(超时不支付商品释放) 准备接口 import request from /utils/httpexport const getOrderAPI (id) > {return request({url: /member/order/$…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
