VideoRecording

演示如何使用视频录制功能。

用法

../../_images/image_18.png
Start/Stop:开始录屏/结束录屏。

详解

场景中的Recorder

如果要使用视频录制功能,需要在场景中添加 VideoRecorder。详细的配置说明可以参考API文档。

../../_images/image_s17_1.png

录制相机输出

只需要将一个组件添加到Camera上就可以录制camera的输出。

cameraRecorder = Camera.main.gameObject.AddComponent<CameraRecorder>();

在组件的 OnRenderImage 方法中调用 VideoRecorder.RecordFrame 即可。

public void OnRenderImage(RenderTexture source, RenderTexture destination)
{
    Graphics.Blit(source, destination);
    ...
    videoRecorder.RecordFrame(source);
}

录制相机输出并叠加其它内容

如果你需要在录制的视频中叠加其它内容,在 RecordFrame 调用之前使用 Graphics.Blit 或其它方法绘制即可。

public void OnRenderImage(RenderTexture source, RenderTexture destination)
{
    Graphics.Blit(source, destination);
    ...
    Graphics.Blit(source, rt, externalMaterial);
    videoRecorder.RecordFrame(rt);
}

Recorder事件

VideoRecorder.StatusUpdate 事件可以用来获取录制状态。

videoRecorder.StatusUpdate += (status, msg) =>
{
    if (status == RecordStatus.OnStarted)
    {
        GUIPopup.EnqueueMessage("Recording start", 5);
    }
    if (status == RecordStatus.FailedToStart || status == RecordStatus.FileFailed || status == RecordStatus.LogError)
    {
        GUIPopup.EnqueueMessage("Recording Error: " + status + ", details: " + msg, 5);
    }
    Debug.Log("RecordStatus: " + status + ", details: " + msg);
};

Unity线性颜色空间

需要记住的是:VideoRecorder录制的是 RenderTexture,原原本本的录制。如果使用不同的Unity色彩空间,录制的数据并不会被自动转换到正确的颜色。

如果使用你在使用线性颜色空间,请在录制过程中通过shader或其它方式对texture进行色彩转换之后再输入给 videoRecorder.RecordFrame

还有什么可以录制

这个sample录制了camera的输出。但这不是 VideoRecorder的全部用法。 VideoRecorder.RecordFrame 可以接收传入的任何 RenderTexture 。被录制的texture由用户代码传入,因此录制的内容可以随意控制。