c++ - 使用 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”事件。我的问题是:如何录制具有同步关联帧元数据的视频?
谢谢!
解决方案
推荐阅读
- excel - Mac 上的 VBA Excel:打印/导出为 PDF
- c# - 使用 Web 服务部署 asp netcore 2.1
- ios - 如何在没有 iPhone 的情况下在 Windows 上为 iPhone 调试网站?
- swift - 在 SPM 项目中使用 vDSP_normalizeD 在 nil 上出现编译器错误
- reactjs - 触发状态“selectedOptions2”时如何映射()
- c# - 支持对象为 NULL 时的 WPF 条件绑定
- php - 特定 if 语句的含义
- vue.js - VueX - 在与动作不同的模块中调度动作
- javascript - 如何响应龙卷风中的 GET 请求?
- node.js - 如何在不知道分布的情况下将彼此靠近的项目分组?