使用 UWP/c++ 录制具有同步关联元数据的视频

问题描述

我想用 C++ 和 UWP API 录制视频。我使用 MediaCapture 对象来执行此操作。

m_mediaCapture = Platform::Agile<MediaCapture>(ref new MediaCapture());

我设法使用“StartRecordToStorageFileAsync”功能录制了一个视频。

m_mediaCapture->StartRecordToStorageFileAsync(...)

除此之外,我希望记录与每一帧相关的元数据(例如时间戳、相机参数、图像索引...)。我设法通过对象“MediaFrameReader”访问这些属性。我将函数“onFrameArrived”绑定到“FrameArrived”事件。

m_mediaCapture->CreateFrameReaderAsync(...).then([=](MediaFrameReader^ reader)
{
   ...
   m_mediaFrameReader->FrameArrived +=
                                ref new TypedEventHandler<MediaFrameReader^,MediaFrameArrivedEventArgs^>(
                                    std::bind(&VideoRecordController::onFrameArrived,this,_1,_2));
}

我可以在哪里访问所需的元数据。

void VideoRecordController::onFrameArrived(MediaFrameReader^ sender,MediaFrameArrivedEventArgs^ args)
{
    if (MediaFrameReference^ frame = sender->TryAcquireLatestFrame())
    {
        // Access to MediaFrameReference Metadata,e.g. :
        auto timestamp = frame->SystemRelativeTime->Value.Duration;
        auto cameraParameters = frame->VideoMediaFrame->CameraIntrinsics;
    }
    // Or misc. data
    static int frameIndex = 0;
    frameIndex++;
    // ... Save Metadata
}

但是,元数据与保存的视频不同步(不同的输出频率)。视频以 ~30 FPS 录制,而元数据以 ~20 DataPerSecond 录制。看起来 'FrameArrived' 事件并未在每一帧中调用。 我的问题是:如何使用同步的关联帧元数据录制视频?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)