直接将来自网络摄像机的视频录制到磁盘上。
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.
Important: Requires Windows 10 (v10.0.10240.0 or later) and doesn't work on Windows 7.
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 | You must call Dispose to shutdown the VideoCapture instance and release the native WinRT objects. |
GetUnsafePointerToVideoDeviceController | 为原生 IVideoDeviceController 提供 COM 指针。 |
StartRecordingAsync | 将来自网络摄像机的视频异步录制到文件系统中。 |
StartVideoModeAsync | 异步启动视频模式。 |
StopRecordingAsync | 异步停止将来自网络摄像机的视频录制到文件系统。 |
StopVideoModeAsync | 异步停止视频模式。 |
CreateAsync | 异步创建 VideoCapture 对象的实例,该实例可将来自网络摄像机的视频录制到磁盘上。 |
GetSupportedFrameRatesForResolution | 返回可让系统以给定分辨率录制视频的受支持的帧率。 |
OnStartedRecordingVideoCallback | 在网络摄像机开始录制视频时调用。 |
OnStoppedRecordingVideoCallback | 在视频录制内容被保存到文件系统时调用。 |
OnVideoCaptureResourceCreatedCallback | 在创建 VideoCapture 资源时调用。 |
OnVideoModeStartedCallback | 在视频模式启动时调用。 |
OnVideoModeStoppedCallback | 在视频模式停止时调用。 |