#c #uwp #mediacapture
Вопрос:
Я хочу записать видео с помощью API C и UWP. Для этого я использую объект 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(amp;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 кадров в секунду, в то время как метаданные записываются со скоростью ~20 секунд в секунду. Похоже, что событие ‘FrameArrived’ вызывается не в каждом кадре.
Тогда мой вопрос : как записать видео с синхронизированными метаданными связанного кадра ?
Спасибо!
Комментарии:
1. Различные частоты вывода не указывают
FrameArrived
на то, что событие вызывается не в каждом кадре, что отражает только скорость доступа к метаданным MediaFrameReference, а сохранение метаданных происходит медленнее, чем запись видео. Кроме того, я должен сказать, что трудно искусственно сделать эти два события одинаковыми.