我有两个相机,如下所示,我试图在Media Foundation拓扑中使用。以下是我的拓扑结构摘要:
网络摄像头 - > MJPG解码器 - >自定义MFT - > H264编码器 - > MP4文件接收器
问题在于,生成的MP4文件的持续时间和时间刻度标记都不正确,这两个标记都适用于MP4容器和H264流。我可以使用像MP4Box或YAMB这样的工具轻松纠正这个问题,但我最终的目标是流式传输视频。
我发现的一个潜在原因是相机源生成的样本不会在时间0开始。根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms700134(v=vs.85).aspx#live_sources中的子弹#2,实时源的时间戳应该从0开始。
沿着这一行,我尝试了以下方法来“纠正”样本时间戳:
IMFSample::SetSampleTime
MEMediaSample
和MEStreamTick
事件关联的时间戳。在这两种情况下,媒体会话都会抛出错误0xC00D4A44
(MF_E_SINK_NO_SAMPLES_PROCESSED
),并且在“mdat”原子声明之后,生成的MP4文件会突然结束。
照相机
使用的系统(两者都有相同的问题):
问题:
答案 0 :(得分:1)
尝试重置每个样本标志MFSampleExtension_Discontinuity
pSample->SetUINT32( MFSampleExtension_Discontinuity, FALSE );