屏幕录像不是增强现实的功能,只是EasyAR SDK自带的一个功能。该功能限制颇多,只能在移动设备上使用,而且没有办法直接录制UI界面。屏幕录像功能本质上录的是RenderTexture。
总体说明
主要是在基础结构上添加了一个【VideoRecorder】游戏对象。另外,需要动态的往【Main Camera】主摄像机游戏对象上添加【CameraRecorder】脚本。
CameraRecorder脚本相关
- CameraRecorder脚本需要动态添加到Main Camera主摄像机游戏对象上,该脚本可以通过Setup方法设置录像内容的水印。
VideoCameraDevice游戏对象相关
- Enable属性可以用于关闭摄像头内容,这样,就能只录制屏幕内容。
- Camera Size属性用于设置摄像头获取的视频的分辨率。
VideoRecorder游戏对象相关
- Profile属性用于设置录制效果,最高可以录制1080高清内容。
- Qrientation属性用于设置录像时候是横屏(Landscape)还是竖屏(Portratit),或者根据当前屏幕情况设定(Screen Adaptive)。
- Record Zoom Mode属性设置屏幕录制。NoZoomAndClip:如果输出宽高比与输入不符,内容会被剪裁到适合输出比例。ZoomInWithAllContent:如果输出宽高比与输入不符,内容将不会被剪裁,在某个维度上会有黑边。
- File Path Type属性设置文件的路径类型,“Absolute”是绝对路径,“Persistent Data Path”是相对于持久数据路径的相对路径。通常使用后者,因为该路径下能保证可写入。
- File Path属性用于设置录制后保存的视频文件的具体路径及文件名。
取消多线程渲染
取消Other Settings标签下Multithreaded Rendering选项
使用屏幕录像功能
- 只导入EasyAR4.0 SDK,要使用屏幕录像功能还比较麻烦,还需要将官方示例中的一个脚本导入过来,这样使其起来会简单很多。
- 设置场景中的Main Camera的Clear Flags属性为Solid Color。
- 将EasyAR/Prefabs/Composites目录下的EasyAR_VideoCamera预制件拖到场景中。
- 将EasyAR/Prefabs/Primitives目录下的VideoRecorder预制件拖到场景中。
- 设置Videorecorder属性,设置File Path Type为Persistent Data Path,设置File Path为具体文件名。
添加2个按钮用于开始和停止录像,添加一个文本框显示提示。
编写脚本。
- 在脚本的“Awake”事件中,添加对“StatusUpdate”事件的侦听内容。将获取到的信息显示到文本框。
- 添加开始录制的方法。在运行了“StartRecording”事件后,还需要动态的往主摄像机上添加“CameraRecoder”脚本,并运行该脚本的“Setup”方法。
- 添加停止录像的方法,停止后,还需要删除动态添加的脚本。
using UnityEngine;
using UnityEngine.UI;
using easyar;
using VideoRecording;
public class RecorderController : MonoBehaviour
{
public Text uiText;
public VideoRecorder videoRecorder;
private CameraRecorder cameraRecorder;
private void Awake()
{
videoRecorder.StatusUpdate += (status, msg) =>
{
if (status == RecordStatus.OnStarted)
{
uiText.text = "Recording start";
}
if (status == RecordStatus.FailedToStart ||
status == RecordStatus.FileFailed || status == RecordStatus.LogError)
{
uiText.text = "Recording Error: " + status + ", details: " + msg;
}
Debug.Log("RecordStatus: " + status + ", details: " + msg);
};
}
public void StartRecorder()
{
videoRecorder.StartRecording();
cameraRecorder =
Camera.main.gameObject.AddComponent<CameraRecorder>();
cameraRecorder.Setup(videoRecorder, null);
}
public void StopRecorder()
{
if (videoRecorder.StopRecording())
{
uiText.text = "Recording stop " + videoRecorder.FilePath;
}
else
{
uiText.text = "Recording failed";
}
if (cameraRecorder)
{
cameraRecorder.Destroy();
}
}
}
运行以后,点击按钮就可以开始录像,文本框会显示开始录制的提示“Recording start”。点击停止按钮,就会停止录像。
录像的结果会保存在持久数据目录下,具体目录位置请查看Unity官方文档
https://docs.unity3d.com/2018.4/Documentation/ScriptReference/Application-persistentDataPath.html