用Video Render播放dump下来的文件时 发生快进现象

muqiuyu1988 2012-08-28 09:45:06
我用的是dshow。
首先我在video decoder filter(解码器)后面接dump,将数据保存成文件。
之后我继承base filter,写了一个filter,功能类似于source filter,然后读取刚才dump的文件,后面直接接video render.
我的理解是,本来video decoder之后接的就是render,现在只是先把数据保存成文件,然后在读取播放,效果应该是一样的。
但是实际上,播放没有问题,图像也是正确完整的,但是视频是快进的,我用log打印了stream time和delive的PTS等相关数据,并没有看出sample有迟到的迹象。之后我尝试放慢读取速度(我用Sleep()函数来控制读取速度的),视频播放的速度正常了,但是video render的属性页中“平均水平同步偏移”和“标准水平同步偏移”两个值始终在上升。
 
  PS:看过陆其明的一篇音视频同步的实验报告,感觉他的做法和我是类似的啊,但是他貌似没有遇到我的问题。
哪位大侠知道这是怎么回事?我已经折腾了两三个礼拜了,压力很大啊。
...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArcRain 2012-08-29
  • 打赏
  • 举报
回复
方便的话把MEDIASAMPLE相关参数的设置代码贴出来看看,还有PTS换算的地方。
muqiuyu1988 2012-08-29
  • 打赏
  • 举报
回复
to dream238:
非常感谢一直帮我跟进这个问题,目前问题已经解决。是我读数据出的问题,和DShow无关.
我在fread之后加了fseek,所以每次读到的数据中间都有跳过一块数据,总长度是原来的一半,看起来效果和快进是一样的。
muqiuyu1988 2012-08-28
  • 打赏
  • 举报
回复
to dream238:
PTS单位换算没有问题啊
ArcRain 2012-08-28
  • 打赏
  • 举报
回复
是的,DirectShow里的media sample上的时间戳是百纳秒,可能与你的PTS单位不一致,注意换算下。
muqiuyu1988 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你自己写的source filter送给下游FILTER的时间戳正确吗?
[/Quote]

source filter的时间戳是我自己定的,起始的PTS试过0、100、300、1000等很多数据,deliver的时候,都比当前stream time的值大,也就是没有迟到。
你说的“时间戳是否正确”是不是就是指这个意思吗?
ArcRain 2012-08-28
  • 打赏
  • 举报
回复
你自己写的source filter送给下游FILTER的时间戳正确吗?

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧