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

这篇具有很好参考价值的文章主要介绍了untiy 录制网络摄像头视频并保存到本地文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

核心脚本为以下三个
untiy 录制网络摄像头视频并保存到本地文件

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
完整工程文章来源地址https://www.toymoban.com/news/detail-407946.html

到了这里,关于untiy 录制网络摄像头视频并保存到本地文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCv:采集摄像头视频、读取视频帧与视频录制

    目录 一、涉及OpenCv函数 二、什么是帧、帧的大小代表什么 三、摄像头获取视频数据 四、录制视频并保存 从设备,可以是摄像头可以是本地视频, 获取视频的函数 cv.VideoCapture()。 本函数作用在于创建一个VideoCapture或者VideoWriter对象,真正的读取和写入是通过创建的对象进行

    2024年02月16日
    浏览(49)
  • Qt编写推流综合应用示例(文件推流/桌面推流/本地摄像头/网络摄像头/转发推流/视频分发)

    1.1 文件推流 指定网卡和监听端口,接收网络请求推送音视频等各种文件。 实时统计显示每个文件对应的访问数量、总访问数量、不同IP地址访问数量。 可指定多种模式,0-直接播放、1-下载播放。 实时打印显示各种收发请求和应答数据。 每个文件对应MD5加密的唯一标识符,

    2023年04月22日
    浏览(42)
  • 【opencv+图像处理】(Gui Features in OpenCV) 1-1摄像头:采集摄像头视频,读取视频帧,录制视频

    本专栏代码总库地址 https://github.com/xiawei20161308104/xv_opencv_tutorials 本节代码路径 xv_opencv_tutorials/VideoRelated/get_started_with_videos.py xv_opencv_tutorials/VideoRelated/get_and_set_video.py xv_opencv_tutorials/VideoRelated/save_video.py 参考官网 https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html 从设备,可以是摄像

    2024年02月03日
    浏览(71)
  • Qt/C++编写推流综合应用示例(文件推流/桌面推流/本地摄像头/网络摄像头/转发推流/视频分发)

    1.1 文件推流 指定网卡和监听端口,接收网络请求推送音视频等各种文件。 实时统计显示每个文件对应的访问数量、总访问数量、不同IP地址访问数量。 可指定多种模式,0-直接播放、1-下载播放。 实时打印显示各种收发请求和应答数据。 每个文件对应MD5加密的唯一标识符,

    2024年02月11日
    浏览(39)
  • Opencv(C++)笔记--打开摄像头、保存摄像头视频

    关键代码语句: ① VideoCapture cam(0); ② cam.read(img); ③ imshow(\\\"cam\\\", img); 关键代码: ①VideoWriter vw ②vw.open(): fourcc指定编码格式(常见编码方式)、 fps指定帧率、 Size指定大小 ③vw.write() 注:在Windows上执行上述代码可能会报以下错误: 解决方法:在输出的网址下载对应版本的库

    2024年02月11日
    浏览(60)
  • 使用ffmpeg调用电脑自带的摄像头和扬声器录制音视频

    1、打开cmd,执行 chcp 65001 ,修改cmd的编码格式为utf8,避免乱码 2、执行指令 ffmpeg -list_devices true -f dshow -i dummy ,查看当前window的音频和视频名称 3、打开windows系统的\\\"打开声音设置\\\"–“麦克风隐私设置”–\\\"允许应用访问你的麦克风\\\"点击开启 录制视频: 录制音频: 录制音视频:

    2024年02月04日
    浏览(57)
  • VUE+Django实现前端开启摄像头录制存储视频并直接上传后端

    1.录制前 2.录制中 3.录制结束下载文件至本地 4.视频文件同时上传至后端接口 参考博客https://blog.csdn.net/wuchenlhy/article/details/79311234?spm=1001.2014.3001.5506 博主在后端这块写的十分简洁明了,可以直接参考实现开设后端简单文件上传接口的方法 参考文章: https://blog.csdn.net/XH_jing/a

    2024年02月14日
    浏览(69)
  • opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

    opencv常用 读视频函数 cv2.VideoCapture 、 cv2.VideoCapture.get 等,可以参考这里 opencv常用 写视频函数 cv2.VideoWriter 等可以参考这里 ,其中视频格式可以参考这里 videoCapture.read() 是按帧读取视频, ret,frame 是获 .read() 方法的两个返回值。其中 ret 是布尔值,如果读取帧是正确的则返回

    2023年04月08日
    浏览(100)
  • OpenCV 实现读取摄像头、视频读取保存 (C++)

    重点语句:VideoCapture、imshow 原理:使用VideoCapture语句读取摄像头,再利用while一次次将VideoCapture所读取的数据利用imshow语句一帧帧地读取出来 重点语句:VideoWriter 原理:在摄像头读取完图之后,利用VideoWriter语句将图像保存为固定格式 通过加入一个循环语句,按空格将图片按

    2024年02月11日
    浏览(52)
  • opencv从视频文件读取视频内容,从摄像头读取保存视频内容

    (1)argparse模块使编写用户友好的命令行接口变得容易。 (2)程序定义了它需要的参数,而argparse将找出如何从sys.argv中解析这些参数。 (3)argparse模块还会自动生成帮助和使用消息,并在用户给程序提供无效参数时发出错误信息。 import argparse # 导入库 parser = argparse.Argume

    2024年02月22日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包