https://github.com/eswar-2001/MFWriter/ ... Writer.cpp
Вот что я делаю. :
Я считываю кадр, связываю его с соответствующей временной меткой и записываю в видеофайл.
Код: Выделить всё
CComPtr mediaBuffer(createMediaBuffer(input));
// Create a media sample and add the buffer to the sample.
CComPtr sample;
MFWRITER_RETURN_ON_ERROR(throwIf(MFCreateSample(&sample)));
MFWRITER_RETURN_ON_ERROR(throwIf(sample->AddBuffer(mediaBuffer)));
// Set the time stamp and the duration.
MFWRITER_RETURN_ON_ERROR(throwIf(sample->SetSampleTime(_frameStart)));
MFWRITER_RETURN_ON_ERROR(throwIf(sample->SetSampleDuration(_frameDuration)));
// Send the sample to the Sink Writer.
MFWRITER_RETURN_ON_ERROR(throwIf(_sinkWriter->WriteSample(_videoStreamIndex, sample)));
// Advance the starting position for the next frame
_frameStart += _frameDuration;
Отметка времени начинается с 0,333 вместо 0, что, по-видимому, соответствует значению длительности кадра. Я напечатал значение _frameStart до и после связывания его с образцом с помощью SetSampleTime, и в обоих случаях оно напечатало 0, как и ожидалось. Однако в созданном файле MP4 временная метка первого кадра равна 0,333 вместо 0. Я не могу определить причину этой проблемы.
Подробнее здесь: https://stackoverflow.com/questions/791 ... t-to-0-ins