Version: 2020.1

VideoCapture

class in UnityEngine.Windows.WebCam

切换到手册

描述

直接将来自网络摄像机的视频录制到磁盘上。

最终视频录制内容将以 MP4 格式存储在文件系统上。

下面的示例将录制 5 秒视频并存储到文件系统上。

using UnityEngine;
using System.Collections;
using System.Linq;
using UnityEngine.Windows.WebCam;

public class VideoCaptureExample : MonoBehaviour { static readonly float MaxRecordingTime = 5.0f;

VideoCapture m_VideoCapture = null; float m_stopRecordingTimer = float.MaxValue;

// Use this for initialization void Start() { StartVideoCaptureTest(); }

void Update() { if (m_VideoCapture == null || !m_VideoCapture.IsRecording) { return; }

if (Time.time > m_stopRecordingTimer) { m_VideoCapture.StopRecordingAsync(OnStoppedRecordingVideo); } }

void StartVideoCaptureTest() { Resolution cameraResolution = VideoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First(); Debug.Log(cameraResolution);

float cameraFramerate = VideoCapture.GetSupportedFrameRatesForResolution(cameraResolution).OrderByDescending((fps) => fps).First(); Debug.Log(cameraFramerate);

VideoCapture.CreateAsync(false, delegate(VideoCapture videoCapture) { if (videoCapture != null) { m_VideoCapture = videoCapture; Debug.Log("Created VideoCapture Instance!");

CameraParameters cameraParameters = new CameraParameters(); cameraParameters.hologramOpacity = 0.0f; cameraParameters.frameRate = cameraFramerate; cameraParameters.cameraResolutionWidth = cameraResolution.width; cameraParameters.cameraResolutionHeight = cameraResolution.height; cameraParameters.pixelFormat = CapturePixelFormat.BGRA32;

m_VideoCapture.StartVideoModeAsync(cameraParameters, VideoCapture.AudioState.ApplicationAndMicAudio, OnStartedVideoCaptureMode); } else { Debug.LogError("Failed to create VideoCapture Instance!"); } }); }

void OnStartedVideoCaptureMode(VideoCapture.VideoCaptureResult result) { Debug.Log("Started Video Capture Mode!"); string timeStamp = Time.time.ToString().Replace(".", "").Replace(":", ""); string filename = string.Format("TestVideo_{0}.mp4", timeStamp); string filepath = System.IO.Path.Combine(Application.persistentDataPath, filename); filepath = filepath.Replace("/", @"\"); m_VideoCapture.StartRecordingAsync(filepath, OnStartedRecordingVideo); }

void OnStoppedVideoCaptureMode(VideoCapture.VideoCaptureResult result) { Debug.Log("Stopped Video Capture Mode!"); }

void OnStartedRecordingVideo(VideoCapture.VideoCaptureResult result) { Debug.Log("Started Recording Video!"); m_stopRecordingTimer = Time.time + MaxRecordingTime; }

void OnStoppedRecordingVideo(VideoCapture.VideoCaptureResult result) { Debug.Log("Stopped Recording Video!"); m_VideoCapture.StopVideoModeAsync(OnStoppedVideoCaptureMode); } }

静态变量

SupportedResolutions用于录制视频的所有受支持的设备分辨率列表。

变量

IsRecording指示 VideoCapture 实例当前是否在录制视频。

公共函数

Dispose必须调用 Dispose 来关闭 PhotoCapture 实例。
GetUnsafePointerToVideoDeviceController为原生 IVideoDeviceController 提供 COM 指针。
StartRecordingAsync将来自网络摄像机的视频异步录制到文件系统中。
StartVideoModeAsync异步启动视频模式。
StopRecordingAsync异步停止将来自网络摄像机的视频录制到文件系统。
StopVideoModeAsync异步停止视频模式。

静态函数

CreateAsync异步创建 VideoCapture 对象的实例,该实例可将来自网络摄像机的视频录制到磁盘上。
GetSupportedFrameRatesForResolution返回可让系统以给定分辨率录制视频的受支持的帧率。

委托

OnStartedRecordingVideoCallback在网络摄像机开始录制视频时调用。
OnStoppedRecordingVideoCallback在视频录制内容被保存到文件系统时调用。
OnVideoCaptureResourceCreatedCallback在创建 VideoCapture 资源时调用。
OnVideoModeStartedCallback在视频模式启动时调用。
OnVideoModeStoppedCallback在视频模式停止时调用。