在dshow中,选一个公共的参考时钟,并且要求给每个Sample都打上时间戳,Video Renderer或Audio Renderer根据Sample的时间戳来控制播放。由于MF的资料很少,我猜应该也是类似逻辑处理。
现在开发media foudation的media source(如dshow的source filter)。我碰到问题是:我的video h264 采用软解,对于1080P,肯定是性能不够的。按照上诉逻辑,video renderer要不停的丢帧处理,从而实现a/v的同步,播放效果是卡顿的。但是实际发现,audio按照正常播放,video感觉播放缓慢,应该是renderer没有丢帧。这样就造成A/V不同步,播放时间越长,a/v时间间隔相差越大。seek后,能同步播放一点点,后续情况和之前一样。
是不是source filter需要做特殊处理,才能让renderer去丢帧??? dshow上有没有此类处理方法。谢谢各位!
------解决方案--------------------------------------------------------
看文档的描述,IQualityControl是Render在上游Filter的OutputPin支持的情况下调用的,所以应该会一直反馈到SourceFilter。
上游Filter如果支持IQualityControl的反馈,那么应该会有相应调整,对于加快播放速率来说,SourceFilter能做的,估计要么就是时间戳打快些,要么就是你说的选择性的送关键帧Sample,差太多的话,就和SEEK差不多了吧...
------解决方案--------------------------------------------------------
我没接触过MF,我只能从dshow的角度来说。
楼主说的“性能不够”是不是就是CPU相当高,来不及解码?如果是的,在CPU高的情况下,直接render播放,卡顿是必然的,好像dshow自身没有这方面的丢帧处理机制,只能通过提高解码效率来解决。
之前我做过类似的在CPU高的情况下处理A/V 同步的filter,在必要时人为丢帧以保持同步,主要是针对录制的情况,而测试时有进行直接render播放,因为CPU高,虽然丢帧,但是卡顿还是会有。
仅供参考。