1

我有两个摄像头,如下所列,我正尝试在媒体基础拓扑中使用它们。这是我的拓扑的摘要:

网络摄像头 --> 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,实时源的时间戳应该从 0 开始。

沿着这条线,我尝试了以下方法来“更正”示例时间戳:

  1. 在我的自定义 MFT 中重新基于采样时间,使用IMFSample::SetSampleTime.
  2. MEMediaSample为 IMFMediaSource 和 IMFMediaStream 对象创建了一个包装器,用于捕获并更正与和MEStreamTick事件关联的时间戳。

在这两种情况下,媒体会话都会引发错误0xC00D4A44( MF_E_SINK_NO_SAMPLES_PROCESSED),并且生成的 MP4 文件在“mdat”原子声明之后突然结束。


相机

  • 罗技 BCC950 会议摄像机
  • Thinkpad W520 集成摄像头

使用的系统(都有相同的问题):

  • Windows 7 专业版 x64
  • 视窗 8 x86

问题:

  1. 是否还有其他一些原因我忽略了不正确的视频持续时间/时间尺度?
  2. 如果没有,是否有正确的方法来重新建立样本时间戳?
4

1 回答 1

1

尝试为每个样本标志 MFSampleExtension_Discontinuity 重置

pSample->SetUINT32( MFSampleExtension_Discontinuity, FALSE );
于 2013-05-17T07:18:17.537 回答