直接将来自网络摄像机的视频录制到磁盘上。
最终视频录制内容将以 MP4 格式存储在文件系统上。
下面的示例将录制 5 秒视频并存储到文件系统上。
using UnityEngine;
using System.Collections;
using System.Linq;
using UnityEngine.VR.WSA.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 | 在视频模式停止时调用。 |