阅读 89

EasyAR4.0使用说明(Unity3D)九----屏幕录像

屏幕录像不是增强现实的功能,只是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官方文档 docs.unity3d.com/2018.4/Docu…

使用屏幕录像功能

视频版地址:www.bilibili.com/video/bv1eK…