全息镜头摄像机视频捕获未在UWP中启动

全息镜头摄像机视频捕获未在UWP中启动,uwp,camera,hololens,c++-winrt,Uwp,Camera,Hololens,C++ Winrt,我有一个应用程序是用UWP(C++/WinRT)编写的——没有统一性,在Hololens上。应用程序尝试从前摄像头开始视频捕获,如下所示: iasyncation Init() { 标准:锁紧防护装置(m锁); m_mediaCapture=mediaCapture(); m_mediaCapture.Failed([此](自动和发送方,自动和参数) {/*记录错误*/}); MediaCaptureInitializationSettings mcis; mcis.StreamingCaptu

我有一个应用程序是用UWP(C++/WinRT)编写的——没有统一性,在Hololens上。应用程序尝试从前摄像头开始视频捕获,如下所示:

iasyncation Init()
{
标准:锁紧防护装置(m锁);
m_mediaCapture=mediaCapture();
m_mediaCapture.Failed([此](自动和发送方,自动和参数)
{/*记录错误*/});
MediaCaptureInitializationSettings mcis;
mcis.StreamingCaptureMode(StreamingCaptureMode::Video);
mcis.mediacegory(mediacegory::Media);
MemoryPreference(MediaCaptureMorypreference::Cpu);
co_等待m_mediaCapture.InitializeAsync(mcis);
co_返回;
}
iasyncation启动(const MediaCapture&mc)
{
标准:锁紧防护装置(m锁);
对于(auto src:mc.FrameSources())
{
MediaFrameSource=src.Value();
MediaFrameSourceInfo=source.info();
如果(是否需要(信息))
{
m_reader=mc.CreateFrameReaderAsync(source.get();
m_reader.AcquisitionMode(MediaFrameReaderAcquisitionMode::Realtime);
m_reader.FrameArrived([this](自动和mfr,自动和args){HandleCapturedFrame(mfr,args);});
}
}
co_返回;
}
void HandleCapturedFrame(const-MediaFrameReader和reader,const-MediaFrameArrivedEventArgs和args)
{
标准:锁紧防护装置(m锁);
自动帧=reader.TryAcquireLatestFrame();
//对框架做点什么
frame.Close();
}
问题是,启动相机不可靠。当我将应用程序部署到Hololens,或者让它从VS运行时,相机会初始化并正常工作。当我关闭应用程序并重新打开时,
Start
会毫无例外地执行,但随后会触发
MediaCapture.Failed
处理程序,并显示消息
媒体源无法从停止状态转到暂停状态。
。Hololens上的隐私摄像头LED也没有点亮,我也没有视频帧。从VS重新部署或重新启动Hololens会有所帮助,但会给我一次或两次成功的初始化,然后再次失败

当应用程序关闭时,我确实
co_wait m_reader.StopAsync()
m_reader.Close()
m_mediaCapture.get().Close()
,我想不出还有什么清理工作要做


有人知道如何获得一致的摄像头初始化吗?也许我忘记了一些清理工作…

你确定停止和关闭在关闭之前已经完成了吗?可能尝试添加一些带有所有状态的调试消息。@HoloLady:是的,我进行清理(异步调用正在等待),再等待1秒钟,然后执行
CoreApplication::Exit()
以杀死appAnd,如果您只需再延迟20秒运行一次,只是为了检查是否不是这样?我试图使用Microsoft/Windows universal samples()中的相机分辨率示例(C++)重现您的错误,但失败了。我关闭了应用程序,然后重新打开,一切正常。但区别在于,示例在用户单击初始化按钮后开始传输视频帧。所以,应用程序在生命周期的哪个状态下开始传输视频帧?在错误状态下初始化MediaCapture可能是错误的原因。我使用摄像头人脸检测示例()重现了您的问题,重新启动应用程序后,摄像头将无法工作。关闭应用程序后,我试图在设备门户中杀死“HolocomeraApp.exe”,然后应用程序将可靠地打开。你的应用程序可以用这种方式暂时修复吗?