untiy 录制网络摄像头视频并保存到本地文件

news2024/9/24 13:16:40

网络摄像头使用的是海康威视的,关于如何使用Ump插件播放海康威视rtsp视频流,请参考我的这篇文章
内部有ump插件的下载链接
untiy接入 海康威视网络摄像头

录屏使用的插件是 AVPro movieCapture 4.6.3版, 插件和完整工程的下载链接放在本文的最后

录制摄像头的实现思想为
1 ump通过一个在RenderTexture上绘制图像来播放画面
2 movieCapture支持从纹理中获取画面
3 我们只需要使用Graphics.Blit()函数将一个纹理绘制到另一个纹理即可

核心脚本为以下三个
在这里插入图片描述

RecoderManger是我们自己写的,用于打通ump和AVPro movieCapture之间的连接
CaptureFromTexture是AVPro movieCapture中用于从纹理中录像的脚本,挂上就行,不用做任何调整
UniversalMediaPlayer是Ump插件提供的脚本,用于拉取网络摄像头的视屏

Ump里的预制体RawImage用于用于提供一个临时的容器,ump会新建一个RenderTexture并给Rawimge的mainTexture属性赋值(面板上显示的属性名为texture),RecoderManger获取这个RenderTexture,然后将图案绘制到CaptureFromTexture里的_texture属性里,这样就就完成了录像

程序打开sampleScene,直接运行即可录屏,停止运行即可保存录像,代码里有详细注释,这里不再赘述

using RenderHeads.Media.AVProMovieCapture;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UMP;

public class RecoderManager : MonoBehaviour
{
	public int _textureWidth = 1024; //视频的宽
	public int _textureHeight = 768; //视频的高
	private CaptureFromTexture movieCapture = null; //录像机
	private UniversalMediaPlayer ump;//ump,用于拉取网络摄像头的视频
	//外部rawImage
	public RawImage rawImage;
	//录像用的渲染纹理
	private RenderTexture _texture;
	/// <summary>
	/// 录像保存的路径
	/// </summary>
	private string filePath = "";
	/// <summary>
	/// 录像保存的文件夹名,追在在路径之后
	/// </summary>
	public string folderName = "";
	/// <summary>
	/// 视频降低多少分辨率,以  _textureWidth  _textureHeight 制定的宽高为基础
	/// </summary>
	public CaptureBase.DownScale downScale = CaptureBase.DownScale.Half;
	/// <summary>
	/// 视频的前缀名
	/// </summary>
	public string fileNamePrefix = "";
	/// <summary>
	/// 视频流的地址
	/// </summary>
	public string RTSPAddress = "";

	private void Start()
	{
		ump = GetComponent<UniversalMediaPlayer>();
		movieCapture = GetComponent<CaptureFromTexture>();
		//如果视频流是空的,直接返回
		if (string.IsNullOrEmpty(RTSPAddress))
		{
			print("视频流地址为空,停止录像");
			return;
		}
		//设置拉取的视频流
		ump.Path = RTSPAddress;
		ump.Play();
		//设置渲染纹理
		_texture = new RenderTexture(_textureWidth, _textureHeight, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
        _texture.filterMode = FilterMode.Bilinear;
        _texture.Create();
        if (movieCapture)
		{
			movieCapture.SetSourceTexture(_texture);
		}
		//设置录像机的属性
		filePath = Application.streamingAssetsPath + "/RecoderVideo/"+folderName+"/";
		movieCapture.OutputFolderPath = filePath;//视频的保存路径 路径不存在会自动创建
		movieCapture.FilenamePrefix = fileNamePrefix;//视频的名字的前缀
		movieCapture.ResolutionDownScale = downScale;	//降低分辨率	
		//开始录像
		movieCapture.StartCapture();		
		rawImage.gameObject.SetActive(false); // RawImage的作用是提供中转用的RenderTexture,禁用即可
	}

	

	private void OnDestroy()
	{
		if (_texture != null)
		{
			RenderTexture.Destroy(_texture);
			_texture = null;
		}
		movieCapture.StopCapture();
	}

	private void Update()
	{
		UpdateTexture();
	}

	private void UpdateTexture()
	{
		Graphics.Blit(rawImage.mainTexture, _texture); //将纹理1 绘制到 纹理2 上,此处为将网络摄像头的画面绘制到录像用的纹理上
	}
}

资源免积分下载
AVPro movieCapture 4.6.3

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

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

相关文章

eclipse创建第一个java web项目并运行

为了能编写java web项目&#xff0c;建议安装支持javaee开发的eclipse版本。1.下载eclipse地址&#xff1a;https://www.eclipse.org/downloads/packages/release/2021-03/r2.解压后启动eclipse3.新建java web工程设置项目名称&#xff0c;指定tomcat的版本及路径4. 添加一个js…

Python快速入门系列之一:Python对象

Python对象1. 列表&#xff08;list&#xff09;2. 元组&#xff08;tuple&#xff09;3. 字典&#xff08;dict&#xff09;4. 集合&#xff08;set&#xff09;5. 字符串&#xff08;string&#xff09;6. BIF &#xff08;Built-in Function&#xff09;7. 列表、集合以及字…

小笔记:gitlab配置文件 /etc/gitlab/gitlab.rb 配置项

小笔记&#xff1a;gitlab配置文件 /etc/gitlab/gitlab.rb 配置项CSDN账号 jcLee95 &#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/12…

0.3调试opencv源码的两种方式

调试opencv源码的两种方式 上两篇我们分别讲了如何配置opencv环境&#xff0c;以及如何编译opencv源码方便我们阅读。但我们还是无法调试我们的代码&#xff0c;无法以我们的程序作为入口来一步一步单点调试看opencv是如何执行的。 【opencv源码解析0.1】VS如何优雅的配置ope…

Python学习-----模块1.0(模块的简介、定义与使用)

目录 前言&#xff1a; 1.什么是模块 2.模块的分类 &#xff08;1&#xff09;内置模块 &#xff08;2&#xff09;第三方模块 &#xff08;3&#xff09;自定义模块 3.模块的使用 4.自定义模块 5.模块和执行文件的判断 前言&#xff1a; 今天就开始讲Python中的模块篇…

第07章_单行函数

第07章_单行函数 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. 函数的理解 1.1 什么是函数 函数在计算机语言的使用中贯穿始终&#xff0c;函数的作用是什么呢&#xff1f;它可以把我们经…

netty心跳

为什么要引入心跳机制&#xff1a;因为网络连接是不可靠的&#xff0c;像在TCP长连接或者webSocket长连接时都会使用心跳机制&#xff0c;即发送特殊的数据包告诉自己的业务没办完&#xff0c;不要关闭连接。案例要求&#xff1a;当服务器超过3秒没有读时&#xff0c;就提示读空…

二维数组中的查找(两种解法,各有千秋)

凡事都有可能&#xff0c;永远别说永远。——《放牛班的春天》今天一题为再一个行列都有序的二维数组中寻找一个目标值&#xff0c;我们第一时间想到的可能是很暴力的解法&#xff0c;例如从头到尾进行遍历&#xff0c;这样能做出来&#xff0c;但是借用武忠祥老师的一句话&…

15-基础加强-1-类加载器反射

文章目录1.类加载器1.1类加载器【理解】1.2类加载的过程【理解】1.3类加载的分类【理解】1.4双亲委派模型【理解】1.5ClassLoader 中的两个方法【应用】2.反射2.1反射的概述【理解】2.2获取Class类对象的三种方式【应用】 第1步&#xff1a;获取类的Class对象2.3反射获取构造方…

【FiddlerScript】利用Fiddler中的FiddlerScript解除4399小游戏的防沉迷

本文仅供技术探讨&#xff0c;切勿用于非法用途案例网站:小游戏,4399小游戏,小游戏大全,双人小游戏大全 - www.4399.com准备的工具:配置好的Fiddler一个Fiddler官方英文版配置教程:https://www.bilibili.com/video/BV1rP4y1t7ZLFiddler中文版配重教程:https://www.bilibili.com…

懒加载以及预加载相关概念

⼆、懒加载 1. 懒加载的概念 懒加载也叫做延迟加载、按需加载&#xff0c;指的是在⻓⽹⻚中延迟加载图⽚数据&#xff0c;是⼀种较好的⽹⻚性能优化 的⽅式。 在⽐较⻓的⽹⻚或应⽤中&#xff0c;如果图⽚很多&#xff0c;所有的图⽚都被加载出来&#xff0c;⽽⽤户只能看到…

创建vue项目

前提安装node.js 安装vue脚手架 命令: npm install -g vue/cli 安装完成后查看下版本 vue --version 开始创建vue项目,可以用cmd终端也可以用pow(Windows PowerShell) 搜索输入pow以管理员运行 找一个项目存放位置 pow进入该目录 创建项目命令 如果创建项目时候报错 输入…

解读|奔驰财报展现强大现金实力,2年内回购价值40亿欧元股票

2月17日&#xff0c;梅赛德斯-奔驰集团股份公司&#xff08;股票代码&#xff1a;MBG&#xff09;发布了拆分后的第一个财年业绩报告&#xff0c;2022年&#xff0c;该集团实现营业总收入1500.17亿欧元&#xff0c;同比上年增长35%&#xff1b;实现税前利润为204.58亿欧元&…

【基础】Flink -- ProcessFunction

Flink -- ProcessFunction处理函数概述处理函数基本处理函数 ProcessFunction按键分区处理函数 KeyedProcessFunction定时器与定时服务基于处理时间的分区处理函数基于事件时间的分区处理函数窗口处理函数 ProcessWindowFunction应用案例 -- Top N处理函数概述 为了使代码拥有…

基于Springbot+微信小程序的购药平台的设计与实现

基于Springbot微信小程序的购药平台的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、…

Jackson 序列化:Cannot deserialize value of type `java.time.LocalDateTime`

问题描述 使用 jackson 反序列化异常如下&#xff1a; Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type java.time.LocalDateTime from String “2023-02-13 19:43:01”: Failed to deserialize java.time.LocalDat…

MySQL的四种事务隔离级别

目录一、事务的基本要素&#xff08;ACID&#xff09;1、原子性&#xff08;Atomicity&#xff09;&#xff1a;2、一致性&#xff08;Consistency&#xff09;&#xff1a;3、隔离性&#xff08;Isolation&#xff09;&#xff1a;4、持久性&#xff08;Durability&#xff09…

使用canvas给上传的整张图片添加平铺的水印

写在开头 哈喽&#xff0c;各位倔友们又见面了&#xff0c;本章我们继续来分享一个实用小技巧&#xff0c;给图片加水印功能&#xff0c;水印功能的目的是为了保护网站或作者版权&#xff0c;防止内容被别人利用或白嫖。 但是网络中&#xff0c;是没有绝对安全的&#xff0c;…

iOS接入Google登录

1.在Google Cloud后台配置客户端ID 首先要在 Google Cloud 中创建一个项目。新创建的Project需要先配置同意屏幕。一共有4步骤需要配置。 1.OAuth 同意屏幕 User Type选择"外部"进行创建。填写必必要的信息&#xff0c;应用名称、用户支持电子邮件地址、开发者电子邮…

chatGPT是什么?chatGPT运用场景有哪些?

大家好&#xff0c;小编来为大家解答以下问题 chatGPT是什么&#xff1f;&#xff0c;chatGPT概念股有哪些&#xff1f;一个有趣的事情&#xff0c;一个有趣的事情&#xff0c;现在让我们一起来看看吧&#xff01; 1、chatpgt是什么 ChatGPT是OpenAI开发的大型预训练语言模型。…