gpt4 book ai didi

c++ - 更正实时 IMFMediaSource 时间戳

转载 作者:行者123 更新时间:2023-11-28 07:37:32 24 4
gpt4 key购买 nike

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

网络摄像头 --> 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 开始。

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

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

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


相机

  • 罗技 BCC950 ConferenceCam
  • Thinkpad W520 集成摄像头

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

  • Windows 7 专业版 x64
  • Windows 8 x86

问题:

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

最佳答案

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

pSample->SetUINT32( MFSampleExtension_Discontinuity, FALSE );

关于c++ - 更正实时 IMFMediaSource 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com