Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


VideoCapture

Records a video from the web camera directly to disk.
Read time 3 minutesLast updated 2 days ago

Definition

public class VideoCapture : IDisposable

Remarks

This API is supported in the Windows Players (Standalone and Universal Windows Platform) and in the Windows Editor. The final video recording will be stored on the local file system in the MP4 format. VideoCapture is implemented using the WinRT interface: Windows.Media.Capture.IMediaCapture.
For more information, see Microsoft documentation on Windows MediaCapture.
Note: Universal Windows Platform requires both webcam and microphone capabilities.

Examples

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; bool m_isStoppingRecording = false; void Start() { StartVideoCaptureTest(); } void Update() { if (m_VideoCapture == null || !m_VideoCapture.IsRecording) { return; } if (!m_isStoppingRecording && Time.time > m_stopRecordingTimer) { m_isStoppingRecording = true; 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) { if (!result.success) { Debug.LogError(string.Format("Failed to start video capture mode. HRESULT: 0x{0:X8}", (uint)result.hResult)); m_VideoCapture.Dispose(); m_VideoCapture = null; return; } 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) { if (result.success) Debug.Log("Stopped Video Capture Mode!"); else Debug.LogError(string.Format("Failed to stop video capture mode. HRESULT: 0x{0:X8}", (uint)result.hResult)); m_VideoCapture.Dispose(); m_VideoCapture = null; } void OnStartedRecordingVideo(VideoCapture.VideoCaptureResult result) { if (!result.success) { Debug.LogError(string.Format("Failed to start recording video. HRESULT: 0x{0:X8}", (uint)result.hResult)); m_VideoCapture.StopVideoModeAsync(OnStoppedVideoCaptureMode); return; } Debug.Log("Started Recording Video!"); m_stopRecordingTimer = Time.time + MaxRecordingTime; } void OnStoppedRecordingVideo(VideoCapture.VideoCaptureResult result) { if (result.success) Debug.Log("Stopped Recording Video!"); else Debug.LogError(string.Format("Failed to stop recording video. HRESULT: 0x{0:X8}", (uint)result.hResult)); m_VideoCapture.StopVideoModeAsync(OnStoppedVideoCaptureMode); }}

Properties

Property

Description

IsRecordingIndicates whether or not the VideoCapture instance is currently recording video.

Static Properties

Property

Description

SupportedResolutionsA list of all the supported device resolutions for recording videos.

Methods

Method

Description

DisposeYou must call Dispose to shutdown the VideoCapture instance and release the underlying WinRT objects.
GetUnsafePointerToVideoDeviceControllerProvides a COM pointer to the native IVideoDeviceController.
StartRecordingAsyncAsynchronously records a video from the web camera to the file system.
StartVideoModeAsyncAsynchronously starts video mode.
StopRecordingAsyncAsynchronously stops recording a video from the web camera to the file system.
StopVideoModeAsyncAsynchronously stops video mode.

Static Methods

Method

Description

CreateAsyncAsynchronously creates an instance of a VideoCapture object that can be used to record videos from the web camera to disk.
GetSupportedFrameRatesForResolutionReturns the supported frame rates at which a video can be recorded given a resolution.

Structs

Struct

Description

VideoCapture.VideoCaptureResultA data container that contains the result information of a video recording operation.

Enums

Enum

Description

VideoCapture.AudioStateSpecifies what audio sources should be recorded while recording the video.
VideoCapture.CaptureResultTypeContains the result of the capture request.

Delegates

Delegate

Description

VideoCapture.OnStartedRecordingVideoCallbackCalled when the web camera begins recording the video.
VideoCapture.OnStoppedRecordingVideoCallbackCalled when the video recording has been saved to the file system.
VideoCapture.OnVideoCaptureResourceCreatedCallbackCalled when a VideoCapture resource has been created.
VideoCapture.OnVideoModeStartedCallbackCalled when video mode has been started.
VideoCapture.OnVideoModeStoppedCallbackCalled when video mode has been stopped.