我正在使用媒体基础创建视频会议应用程序,而我在解码通过网络接收的H264视频帧时遇到问题。
设计
目前,我的网络源会在每个请求样本上对令牌进行排队,除非有可用的存储样本。如果样本通过网络到达且没有可用的令牌,则样本将存储在链接列表中。否则,它将与MEMediaSample事件一起排队。我也将解码器设置为低延迟。
我的问题
使用我的网络源运行拓扑时,我立即看到渲染到屏幕的第一帧。然后我经历了一段长时间的停顿,直到直播开始完美播放。几秒钟之后,流似乎暂停,但是你注意到它只是一遍又一遍地循环通过同一帧,每隔几秒就会添加一个实时帧,然后立即消失并返回显示旧循环。
为什么会这样?在这个问题上,我绝不是H264或媒体基金会的专家,但是,我一直试图解决这个问题几周而没有成功。我不知道问题可能在哪里。请帮我!
通过从0开始并为每个新样本添加持续时间来创建时间戳。其他数据是从IMFSampleGrabberSinkCallback中检索的。
我还将部分MFTrace发布到msdn媒体基金会论坛Link
我在那里提到,演示时钟似乎没有改变迹线,但我不确定这是原因还是如何修复它。
答案 0 :(得分:0)
修改强>: 你可以分享这个问题的视频和完整的mftrace日志吗?我不清楚到底发生了什么:一段时间后你会看到现场视频吗?
当前日志中没有足够的信息来跟踪样本处理。从您的描述看起来只有关键帧被渲染。另外,渲染关键帧的持续时间很奇怪:
Sample @00A74970, Time 6733ms, Duration 499ms. <- Duration is not 33ms.
我想看看那个样本发生了什么。
在任何情况下,如果您使用标准编码器和解码器,问题应该在于您的媒体源,以及它如何缓冲帧。循环缓冲区实现不正确?在开始将它们提供给解码器之前,您可能需要尝试缓存一两个或两个样本。