媒体基础H264解码器无法正常工作

时间:2014-09-03 20:34:48

标签: c++ video decode h.264 ms-media-foundation

我正在使用媒体基础创建视频会议应用程序,而我在解码通过网络接收的H264视频帧时遇到问题。

设计

目前,我的网络源会在每个请求样本上对令牌进行排队,除非有可用的存储样本。如果样本通过网络到达且没有可用的令牌,则样本将存储在链接列表中。否则,它将与MEMediaSample事件一起排队。我也将解码器设置为低延迟。

我的问题

使用我的网络源运行拓扑时,我立即看到渲染到屏幕的第一帧。然后我经历了一段长时间的停顿,直到直播开始完美播放。几秒钟之后,流似乎暂停,但是你注意到它只是一遍又一遍地循环通过同一帧,每隔几秒就会添加一个实时帧,然后立即消失并返回显示旧循环。

为什么会这样?在这个问题上,我绝不是H264或媒体基金会的专家,但是,我一直试图解决这个问题几周而没有成功。我不知道问题可能在哪里。请帮我!

通过从0开始并为每个新样本添加持续时间来创建时间戳。其他数据是从IMFSampleGrabberSinkCallback中检索的。

我还将部分MFTrace发布到msdn媒体基金会论坛Link

我在那里提到,演示时钟似乎没有改变迹线,但我不确定这是原因还是如何修复它。

1 个答案:

答案 0 :(得分:0)

修改: 你可以分享这个问题的视频和完整的mftrace日志吗?我不清楚到底发生了什么:一段时间后你会看到现场视频吗?

当前日志中没有足够的信息来跟踪样本处理。从您的描述看起来只有关键帧被渲染。另外,渲染关键帧的持续时间很奇怪:

    Sample @00A74970, Time 6733ms, Duration 499ms. <- Duration is not 33ms.

我想看看那个样本发生了什么。

在任何情况下,如果您使用标准编码器和解码器,问题应该在于您的媒体源,以及它如何缓冲帧。循环缓冲区实现不正确?在开始将它们提供给解码器之前,您可能需要尝试缓存一两个或两个样本。