Video Capture with Holograms in Unity

Hello,
I want to record mixed reality video in unity.
I already tried using VideoCapture (https://developer.microsoft.com/en-us/windows/holographic/locatable_camera_in_unity).
but hologram is not appeared even if cameraParameters.hologramOpacity = 1.0f
I don't know why holograms is missing...
Should I set another one?
this is my code.


using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Linq;
using UnityEngine.VR.WSA.WebCam;

if WINDOWS_UWP

using Windows.Storage;
using Windows.System;
using System.Collections.Generic;
using System;
using System.IO;

endif

public class VideoRecording : 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 = 1.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);
}

}

Answers

  • Hey,
    Please try change:
    VideoCapture.CreateAsync(false, delegate (VideoCapture videoCapture)

    to:
    VideoCapture.CreateAsync(true, delegate (VideoCapture videoCapture)

Sign In or Register to comment.