Unity3D windows平台视频录制录屏插件 UnityRecorder
例子:从官方例子简单改了
using UnityEditor;
using UnityEditor.Recorder;
using UnityEditor.Recorder.Input;
using System;
namespace UnityEngine.Recorder.Examples
{
public enum RecorderControllerState
{
Video,
Animation,
ImageSequence
}
/// <summary>
/// 录制
/// </summary>
public class RecorderExammlpText : MonoBehaviour
{
RecorderController m_RecorderController;
private RecorderControllerState controllerState = RecorderControllerState.Video;
[Header("下面两个单纯观看数据,不用管")]
public RecorderControllerSettings controllerSettings;
public MovieRecorderSettings videoRecorder;
private string animationOutputFolder;
private string mediaOutputFolder;
private void Start()
{
controllerSettings = ScriptableObject.CreateInstance<RecorderControllerSettings>();
m_RecorderController = new RecorderController(controllerSettings);
animationOutputFolder = Application.dataPath + "/SampleRecordings";
mediaOutputFolder = Application.dataPath + "../SampleRecordings";
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
StartRecorder();
}
if (Input.GetKeyDown(KeyCode.D))
{
StopRecorder();
}
}
#region 记录视频-结束视频 位置在项目根目录
/// <summary>
/// 开始记录视频
/// </summary>
/// <param name="state">默认视频</param>
public void StartRecorder(RecorderControllerState state = RecorderControllerState.Video)
{
//var outputFolder = Application.dataPath + "/SampleRecordings";
switch (state)
{
case RecorderControllerState.Video:
// Video
RecorderVideo();
break;
case RecorderControllerState.Animation:
// Animation
RecorderAnimation();
break;
case RecorderControllerState.ImageSequence:
// Image Sequence
RecorderImageSequence();
break;
default:
break;
}
// Setup Recording
controllerSettings.SetRecordModeToManual();
controllerSettings.frameRate = 60.0f;
Options.verboseMode = false;
m_RecorderController.StartRecording();
}
/// <summary>
/// 录制视频
/// </summary>
private void RecorderVideo()
{
videoRecorder = ScriptableObject.CreateInstance<MovieRecorderSettings>();
videoRecorder.name = "My Video Recorder";
videoRecorder.enabled = true;
videoRecorder.outputFormat = VideoRecorderOutputFormat.MP4;
videoRecorder.videoBitRateMode = VideoBitrateMode.Low;
// videoRecorder.SetOutput_720p_HD(); GameViewInputSettings 修改屏幕分辨率
videoRecorder.imageInputSettings = new GameViewInputSettings
{
outputWidth = 1920,
outputHeight = 1080
};
videoRecorder.audioInputSettings.preserveAudio = true;
string str = DateTime.Now.Year.ToString()+"_" + DateTime.Now.Month + "_" + DateTime.Now.Day + "_" + DateTime.Now.Hour + "_" + DateTime.Now.Minute + "_" + DateTime.Now.Second;
videoRecorder.outputFile = mediaOutputFolder + "/Magic_" + str;
controllerSettings.AddRecorderSettings(videoRecorder);
}
/// <summary>
/// 动画
/// </summary>
private void RecorderAnimation()
{
var animationRecorder = ScriptableObject.CreateInstance<AnimationRecorderSettings>();
animationRecorder.name = "My Animation Recorder";
animationRecorder.enabled = true;
var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
animationRecorder.animationInputSettings = new AnimationInputSettings
{
gameObject = sphere,
recursive = true,
};
animationRecorder.animationInputSettings.AddComponentToRecord(typeof(Transform));
animationRecorder.outputFile = animationOutputFolder + "/animation_" + DefaultWildcard.GeneratePattern("GameObject") + "_" + DefaultWildcard.Take;
controllerSettings.AddRecorderSettings(animationRecorder);
}
/// <summary>
/// 图像序列
/// </summary>
private void RecorderImageSequence()
{
var imageRecorder = ScriptableObject.CreateInstance<ImageRecorderSettings>();
imageRecorder.name = "My Image Recorder";
imageRecorder.enabled = true;
imageRecorder.outputFormat = ImageRecorderOutputFormat.PNG;
imageRecorder.captureAlpha = true;
imageRecorder.outputFile = mediaOutputFolder + "/image_" + DefaultWildcard.Frame + "_" + DefaultWildcard.Take;
imageRecorder.imageInputSettings = new CameraInputSettings
{
source = ImageSource.MainCamera,
outputWidth = 1920,
outputHeight = 1080,
captureUI = true
};
controllerSettings.AddRecorderSettings(imageRecorder);
}
/// <summary>
/// 停止录制
/// </summary>
public void StopRecorder()
{
Debug.Log("停止录制");
m_RecorderController.StopRecording();
controllerSettings.RemoveRecorder(videoRecorder);
}
#endregion
void OnDisable()
{
StopRecorder(http://www.my516.com);
}
}
}
---------------------
Unity3D windows平台视频录制录屏插件 UnityRecorder的更多相关文章
- Fundebug录屏插件更新至0.6.0
摘要: 录屏插件的性能进一步优化,传输的数据体积大幅度减少. 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 BUG,提 ...
- Fundebug录屏插件更新至0.5.0,新增domain参数
摘要: 通过配置domain来保证"视频"的正确录制 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 ...
- Fundebug录屏插件更新至0.4.0,修复BUG,优化性能
摘要: 录屏功能更加强大,欢迎免费试用! 关于Fundebug录屏功能 Fundebug是专业的程序BUG监控服务,当线上应用出现BUG的时候,我们可以第一时间报警,帮助开发者及时发现BUG,提高De ...
- [转]Gnome桌面的录屏插件easyscreencast
原文地址:https://www.linuxprobe.com/gnome-easyscreencast.html
- 基于FFMpeg的C#录屏全攻略
最近负责一个录屏的小项目,需要录制Windows窗口内容并压缩保存到指定文件夹,本想使用已有的录屏软件,但是本着学习的态度去探索了FFMpeg,本文主要介绍基于FFMpeg开源项目的C#录屏软件开发. ...
- Fundebug前端JavaScript插件更新至1.7.1,拆分录屏代码,还原部分Script error.
摘要: BUG监控插件压缩至18K. 1.7.1拆分了录屏代码,BUG监控插件压缩至18K,另外我们还原了部分Script error,帮助用户更方便地Debug.请大家及时更新哈~ 拆分录屏代码 从 ...
- 澄清Fundebug录屏技术的几点误会
1. "视频"并非真的视频.也不是通过连续播放大量截图来实现 首先请大家观看这个视频: 视频中,当鼠标点击"场景重现",会立即播放一段"视频" ...
- script命令录屏
关于linux上的操作,我们的确可以使用'history'命令来显示出来操作记录,但是有些时候,我们不仅仅需要知道做了什么,还需要知道操作的时候,产生了什么效果,这个时候‘history’命令就显示无 ...
- 新手学习FFmpeg - 调用API完成录屏并进行H.264编码
Screen Record H.264 目前在网络传输视频/音频流都一般会采用H.264进行编码,所以尝试调用FFMPEG API完成Mac录屏功能,同时编码为H.264格式. 在上一篇文章中,通过调 ...
随机推荐
- 【POJ 3461】 Oulipo
[题目链接] 点击打开链接 [算法] KMP [代码] #include <algorithm> #include <bitset> #include <cctype&g ...
- 替换一个文件中的内容BAT
@echo off setlocal enabledelayedexpansion set file=%1set "file=%file:"=%" for %%i in ...
- Centos6.6安装后一些常见问题详解
<一>.centos6.6通过VM最小化安装后上不了网的解决方法: 在安装centos6.6时,没有在网络设置中设置网卡自动启动的,安装完系统后,是不能联网的,解决方法如下: vi/etc ...
- C++笔试题(七)
微软研究院是一个听起来就牛B的地方啊,反正我是进不去,不过不妨碍我看看他的笔试题到底是怎么样的.下面四道题就是微软研究院的笔试题目,题后附有我的解答.微软研究院(亚洲)的网址是:http://rese ...
- hdu 1573 X问题【扩展中国剩余定理】
扩展中国剩余定理的板子,合并完之后算一下范围内能取几个值即可(记得去掉0) #include<iostream> #include<cstdio> #include<cm ...
- 洛谷P2585 [ZJOI2006]三色二叉树(树形dp)
传送门 设$dp[u][i]$表示点$u$颜色为$i$时最多(最少)的绿点个数(这里用$0$表示绿点) 然后直接用树形dp就可以了 记得把情况讨论清楚 //minamoto #include<b ...
- java 强大的反射机制
这段时间,在对接一个开源的版本时,发现由于依赖的开源版本api老是随着版本的变化而变化,导致代码经常需要修改,异常痛苦. 终于,在一个风和日丽的下午(五月末的广州异常暴晒),楼主下定决心要修掉这个大篓 ...
- LuoguP2700逐个击破【并查集/生成树/正难则反】By cellur925
题目传送门 题目大意:给你一棵树,求把其中k个点相互隔离(不连通)所需要的边权代价. 这题我开始是想要求出把k个点联通的最小代价的,但后来发现还是实现起来比较困难,题解里貌似也没有这种做法,于是就鸽了 ...
- 【Nginx】解决Post请求变Get的问题
默认情况下Nginx会把post请求做一次重定向操作,然后后端收到的就成了Get请求,还会导致一些参数的遗漏. 日志如下: 172.16.1.108 - - [11/Jan/2019:18:27:09 ...
- AtCoder Grand Contest 018 D - Tree and Hamilton Path
题目传送门:https://agc018.contest.atcoder.jp/tasks/agc018_d 题目大意: 给定一棵\(N\)个点的带权树,求最长哈密顿路径(不重不漏经过每个点一次,两点 ...