cesium 融合视频

0 如果是文件,那相当的简单

和untiy 一样,可以添加材质后,将image 直接给材质赋值上,其中abcd 是四个点,这四个点要经过计算

<video id="video" style="display:none" controls loop autoplay><source src="/static/video/zm.mp4" type="video/mp4">
</video>
//这个和unity 添加材质一样相当的简单
// 添加监控画面var videoEl = document.getElementById('video')var pArr = [a,b,c,d];var instance =new Cesium.GeometryInstance({geometry:new Cesium.WallGeometry({positions:Cesium.Cartesian3.fromDegreesArrayHeights(pArr),minimumHeights:[100,100],})});var material = Cesium.Material.fromType("Image");material.uniforms.image = videoEl;var tileset = viewer.scene.primitives.add(new Cesium.Primitive({id:'video',geometryInstances:instance,appearance: new Cesium.MaterialAppearance({closed:false,material:material,}),show:false,}))

1 使用ffmepg nodejs 来转码

方案主要可基于ffmpeg的转码,使用 flv.js的 RTSP 播放方案(flv.js 是 Bilibili 开源的一款 HTML5 浏览器。依赖于 Media Source Extension 进行视频播放,视频通过 HTTP-FLV 或 WebSocket-FLV 协议传输,视频格式需要为 FLV 格式)。在视频融合的案例里面,一定要选择多路的websocket方案,因为http协议最多提供6路链接。

服务器端可以采用 express + express-ws 来进行编写, HTTP 请求发送到指定的地址时,启动 ffmpeg 串流程序,将 RTSP 流封装成 FLV 格式的视频流,推送到指定的 WebSocket 响应流中。

let app = express();
app.use(express.static(__dirname));
expressWebSocket(app, null, {perMessageDeflate: true
});
app.ws("/rtsp", rtspRequestHandle)
app.listen(8888);// 处理方法
function rtspRequestHandle(ws, req) {const stream = webSocketStream(ws, {binary: true,browserBufferTimeout: 1000000}, {browserBufferTimeout: 1000000});let url = req.query.url;try {ffmpeg(url).addInputOption("-rtsp_transport", "tcp", "-buffer_size", "102400").on("start", function () {console.log(url, "Stream started.");}).on("codecData", function () {console.log(url, "Stream codecData.")}).on("error", function (err) {console.log(url, "An error occured: ", err.message);}).on("end", function () {console.log(url, "Stream end!");}).outputFormat("flv").videoCodec("copy").noAudio().pipe(stream);} catch (error) {console.log(error);}
}

2 浏览器端采用flv.js进行播放:

这一部分在我的其他文章里可以看到

<video id="player" width="480" controls autoplay></video>
if (flvjs.isSupported()) {let video = document.getElementById("player");if (video) {this.player = flvjs.createPlayer({type: "flv",isLive: true,url: `ws://localhost:8888/rtsp?url=rtsp://127.0.0.1:8555/demo`});this.player.attachMediaElement(video);this.player.load();this.player.play();}
}

方法改进

使用ffmpeg 来转码的方案并不专业,路数也有限,我公司提供真正专业的流媒体转码服务器

viewer.entities.add({polygon: {hierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray([......])),classificationType: Cesium.ClassificationType.BOTH,material: video}
});

使用媒体服务器,可以提供上百路的监控视频融合,使用c++ 语言进行编写,使用矫正,投影变换等算法进行视频的拼接融合,同时也提供unity 和 UE 的视频融合插件,以及融合以后进行视频算法分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scrapy框架

scrapy文档 文档链接 安装指南 — Scrapy 2.5.0 文档 (osgeo.cn)https://www.osgeo.cn/scrapy/intro/install.html 创建scrapy框架 0.介绍&#xff1a; scrapy是异步非阻塞框架 异步&#xff1a;一个主线程有20个任务&#xff0c;可以来回切换 非阻塞&#xff1a;运行的程序不需…

一、服务器准备

本案例使用VMware Workstation Pro虚拟机创建虚拟服务器来搭建Linux服务器集群&#xff0c;所用软件及版本如下&#xff1a; Centos7.7-64bit 1、三台虚拟机创建 第一种方式&#xff1a;通过iso镜像文件来进行安装(不推荐) 第二种方式&#xff1a;直接复制安装好的虚拟机文…

org.springframework.web.multipart.MultipartException异常

在做文件上传时&#xff0c;如果没有指定好参数信息经常会出现下面这种异常 org.springframework.web.multipart.MultipartException: Current request is not a multipart requestat org.springframework.web.servlet.mvc.method.annotation.RequestPartMethodArgumentResolv…

基于springboot + vue框架的网上商城系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

电子学会C/C++编程等级考试2021年12月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:移动路线 桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。 小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把…

TZOJ 1429 小明A+B

答案&#xff1a; #include <stdio.h> int main() {int T0, A0, B0, sum0;scanf("%d", &T); //输入测试数据的组数while (T--) //循环T次{scanf("%d %d", &A, &B); //输入AB的值sum A B;if (sum > 100) //如果是三位数{…

JavaScript 内存泄漏的检测与防范:让你的程序更稳定

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

实施全链路压测的步骤是怎样的?

全链路压测是确保系统稳定性和性能的重要手段&#xff0c;能够帮助企业在面临日益复杂的业务场景时保持竞争力。通过深入了解业务、合理规划测试场景、及时监控系统指标&#xff0c;企业可以更好地利用全链路压测&#xff0c;为系统的稳定运行提供可靠的保障。同时&#xff0c;…

动态规划 | 139. 单词拆分、多重背包

139、单词拆分 dp[i]&#xff1a;长度为 i 的字符串可以有字典中出现的单词拼接出来。 if s[j: i] in wordDict and dp[j] true 则 dp[i] true dp[0] true, 因为后续均由dp[0]推出。 从前向后遍历 public static boolean wordBreak(String s, List<String> wordDi…

window环境同时安装python2和python3

背景 在日常环境中&#xff0c;有时候要用到python2写的代码要用Python2执行&#xff0c;有时候python3的代码要用到python3执行.很多人需要同时让Python2和python3的命令都可以用。方便切换环境。 需求 有一些项目需要Python2环境。用的时候就使用 python2 .\1.py 有一些项…

Vue之混入的重要性

对于Java后端来说继承是必不可少的&#xff0c;对于Vue来说混入就像继承不可或缺。但是很多人都不喜欢或者很少用混入&#xff0c;那么今天就来谈谈Vue混入的重要性。 1. 通用组件混合 想必大家都创建过公用组件&#xff0c;对于一些组件来说&#xff0c;往往都存在共通性&am…

通过adb命令查看当前界面的Activity

1、先进入shell 2、输入如下命令 dumpsys activity | grep "mFoc"执行效果如下&#xff1a; 从上图可以看到当前正在运行app的进程名称和当前显示的Activity完整路径类名。

操作系统-文件管理

文件的属性 文件名&#xff1a;由创建文件的用户决定文件名&#xff0c;主要说为了方便用户找到文件&#xff0c;同一个目录下不允许有重名文件。 标识符&#xff1a;一个系统内的各文件标识符唯一&#xff0c;对用户来说毫无可读性&#xff0c;因此标识符只是操作系统用于区分…

dolphinscheduler安装与配置:使用脚本一键安装配置dolphinscheduler单机版(配置MySQL版本)

使用shell脚本一键安装配置dolphinscheduler 前言&#xff1a;使用此脚本可以帮助您自动下载安装配置dolphinscheduler单机版&#xff0c;包括设置MySQL保存元数据。自动下载、解压dolphinscheduler安装包&#xff0c;自动修改dolphinscheduler的配置&#xff0c;配置MySQL连接…

【linux】日志有哪些

Linux系统日志主要有以下几种类型&#xff1a; 内核及系统日志&#xff1a;这种日志数据由系统服务rsyslog统一管理&#xff0c;根据其主配置文件/etc/rsyslog.conf中设置决定内核消息及各种系统程序消息记录到什么位置。/var/log/message&#xff1a;该日志文件存放了内核消息…

CentOS 部署 WBO 在线协作白板

1&#xff09;WBO 白板工具介绍 1.1&#xff09;WBO 白板简介 WBO 是一个自由和开源的在线协作白板。它允许多个用户同时在一个虚拟的大型白板上画图。该白板对所有线上用户实时更新&#xff0c;并且状态始终保持。它可以用于许多不同的目的&#xff0c;包括艺术、娱乐、设计和…

C语言实现ARM MCU SWD离线调试器

以下是一个使用C语言实现ARM MCU SWD离线调试器的示例代码&#xff0c;该代码可以读取目标设备的寄存器和内存&#xff1a; #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h>#define SWDIO_PIN 0 #define SWCLK_PIN …

服务器和Linux ,安装R rstudio ,常用软件

服务器的基本概念&#xff1a; 如服务器的基本结构&#xff0c;节点&#xff0c;端口的概念等。 服务器的基本设置和管理&#xff1a; 如何配置新服务器&#xff0c; 如何管理服务器&#xff0c;如何分配账户并确保他们互不访问&#xff0c; 如何全局安装软件让所有人都可以…

《明解C语言》第三版 (入门篇) 第十一章练习答案

练习11-1 #include <stdio.h>int main(void) {char* p "123";printf("p \"%s\"\n", p);p "456"1; printf("p \"%s\"\n", p);return 0; } //输出“56”&#xff0c;p指向的地址1后&#xff0c;往…

python/C混合编程

目录 1、实现方式 2、通过setuptools编译.c文件的实现 1、实现方式 Python和C语言混合编程可以通过以下方式实现&#xff1a; 使用Python的C扩展&#xff1a;Python提供了C扩展的功能&#xff0c;允许我们在Python中调用C语言代码。我们可以编写C语言扩展模块&#xff0c;并…