版本: Unity 6 (6000.0)
语言English
  • C#

VideoCapture

UnityEngine.Windows.WebCam 中的类

/

实现于:UnityEngine.CoreModule

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。尽管我们无法接受所有提交,但我们确实会阅读用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

将网络摄像头的视频直接录制到磁盘。

此 API 在 Windows 播放器(独立版和通用 Windows 平台)和 Windows 编辑器中受支持。最终的视频录制将以 MP4 格式存储在本地文件系统中。VideoCapture 使用 WinRT 接口实现:Windows.Media.Capture.IMediaCapture。
有关更多信息,请参阅 Microsoft 文档中的Windows MediaCapture

注意:通用 Windows 平台需要网络摄像头和麦克风功能。

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 来关闭 VideoCapture 实例并释放本机 WinRT 对象。
GetUnsafePointerToVideoDeviceController提供指向本机 IVideoDeviceController 的 COM 指针。
StartRecordingAsync异步将网络摄像头的视频录制到文件系统。
StartVideoModeAsync异步启动视频模式。
StopRecordingAsync异步停止将网络摄像头的视频录制到文件系统。
StopVideoModeAsync异步停止视频模式。

静态方法

CreateAsync异步创建一个 VideoCapture 对象的实例,该实例可用于将网络摄像头的视频录制到磁盘。
GetSupportedFrameRatesForResolution返回给定分辨率下可以录制视频的受支持帧速率。

委托

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