emailxj
驱动牛犊
驱动牛犊
  • 注册日期2002-05-15
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2147回复:9

向gung, mike_wang 请教视频流和声音不同步问题

楼主#
更多 发布于:2002-12-06 10:45
在请教问题之前,先说明一下我的框架:

caputerfileter(内核流,靠一个卡捕捉mpeg2的dvb广播流--ts流)
                         |
                         | TS流
                         |
                      dmux filter (1)
                     (按照pid分流)
                     |         |          
      mpeg2视频PES流 |         | mpeg2音频PES流
                     |         |
mpeg2 video decode filter   mpeg2 audio decode filter  
              |                         |
              |                         |  
            overlay mix               Direct sound (2)
              |                        
            video renderer        
                
播放时出现的问题是声音滞后,而且随着播放时间的延长,滞后现象更加明显;开始时是大概滞后3秒左右,在播放1到2个小时时会滞后8秒左右,不知道从什么地方入手;
    
    1.这个图中仅仅caputerfileter是自己的,其他都是使用别人的相关filter;

    2.现在就仅仅采取如下一个措施
    在上图(1),(2)两个Filter中,都自带了一个clock,我们设置(2)即direct sound的clock为整个参考clock,比把(1)的clock设置为整个参考clock效果好;
     声音滞后(或超前)仍然没法解决,但不丢包(丢包的话,声音应该是断断续续的);


相关问题:
    1.以前参考过gung的一个贴子
如下:
..............................................
计算好时间,填好((PKSSTREAM_HEADER)Srb->CommandData.DataBufferArray)->PresentationTime结构就好了
可以在OptionsFlags中或上KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY报告丢包了
...............................................

        PKSSTREAM_HEADER pStreamHeader;
        pStreamHeader->PresentationTime.Time = ?;
        pStreamHeader->PresentationTime.Numerator = ?;
        pStreamHeader->PresentationTime.Denominator = ?;

我不知道这里的时间概念是什么,是computer 的 system time,还是mpeg2的参考时钟;

    2.想请教各位大虾,解决上面的问题有什么思路?
同步问题是在dmux之前解决,还是在dmux之后解决,如何解决呢?

       谢谢;
    

最新喜欢:

kilroy_guokilroy...
emailxj
驱动牛犊
驱动牛犊
  • 注册日期2002-05-15
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-06 10:47
在请教问题之前,先说明一下我的框架:

caputerfileter(内核流,靠一个卡捕捉mpeg2的dvb广播流--ts流)
......................|
......................| TS流
......................|
................dmux filter (1)
.................(按照pid分流)
.................| .............|
..mpeg2视频PES流 | .............| mpeg2音频PES流
.................| .............|
.mpeg2 video decode filter ....mpeg2 audio decode filter
..............| ......................|
..............| ......................|
.........overlay mix ...........Direct sound (2)
..............|
.........video renderer

播放时出现的问题是声音滞后,而且随着播放时间的延长,滞后现象更加明显;开始时是大概滞后3秒左右,在播放1到2个小时时会滞后8秒左右,不知道从什么地方入手;

1.这个图中仅仅caputerfileter是自己的,其他都是使用别人的相关filter;

2.现在就仅仅采取如下一个措施
在上图(1),(2)两个Filter中,都自带了一个clock,我们设置(2)即direct sound的clock为整个参考clock,比把(1)的clock设置为整个参考clock效果好;
声音滞后(或超前)仍然没法解决,但不丢包(丢包的话,声音应该是断断续续的);


相关问题:
1.以前参考过gung的一个贴子
如下:
..............................................
计算好时间,填好((PKSSTREAM_HEADER)Srb->CommandData.DataBufferArray)->PresentationTime结构就好了
可以在OptionsFlags中或上KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY报告丢包了
...............................................

PKSSTREAM_HEADER pStreamHeader;
pStreamHeader->PresentationTime.Time = ?;
pStreamHeader->PresentationTime.Numerator = ?;
pStreamHeader->PresentationTime.Denominator = ?;

我不知道这里的时间概念是什么,是computer 的 system time,还是mpeg2的参考时钟;

2.想请教各位大虾,解决上面的问题有什么思路?
同步问题是在dmux之前解决,还是在dmux之后解决,如何解决呢?

谢谢;
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-08 12:24
在请教问题之前,先说明一下我的框架:

caputerfileter(内核流,靠一个卡捕捉mpeg2的dvb广播流--ts流)
......................|
......................| TS流
......................|
................dmux filter (1)
.................(按照pid分流)
.................| .............|
..mpeg2视频PES流 | .............| mpeg2音频PES流
.................| .............|
.mpeg2 video decode filter ....mpeg2 audio decode filter
..............| ......................|
..............| ......................|
.........overlay mix ...........Direct sound (2)
..............|
.........video renderer

播放时出现的问题是声音滞后,而且随着播放时间的延长,滞后现象更加明显;开始时是大概滞后3秒左右,在播放1到2个小时时会滞后8秒左右,不知道从什么地方入手;

1.这个图中仅仅caputerfileter是自己的,其他都是使用别人的相关filter;

2.现在就仅仅采取如下一个措施
在上图(1),(2)两个Filter中,都自带了一个clock,我们设置(2)即direct sound的clock为整个参考clock,比把(1)的clock设置为整个参考clock效果好;
声音滞后(或超前)仍然没法解决,但不丢包(丢包的话,声音应该是断断续续的);


相关问题:
1.以前参考过gung的一个贴子
如下:
..............................................
计算好时间,填好((PKSSTREAM_HEADER)Srb->CommandData.DataBufferArray)->PresentationTime结构就好了
可以在OptionsFlags中或上KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY报告丢包了
...............................................

PKSSTREAM_HEADER pStreamHeader;
pStreamHeader->PresentationTime.Time = ?;
pStreamHeader->PresentationTime.Numerator = ?;
pStreamHeader->PresentationTime.Denominator = ?;

我不知道这里的时间概念是什么,是computer 的 system time,还是mpeg2的参考时钟;

2.想请教各位大虾,解决上面的问题有什么思路?
同步问题是在dmux之前解决,还是在dmux之后解决,如何解决呢?

谢谢;



我看emaillxj是各大虾,又没有兴趣交流一下啊。
我的e-mail,huangjielg@hotmail.com。
关于时间,可能是这样子的,
  用 StreamClassQueryMasterClock 可以得到当前系统已经播放
到了那个时间,然后你可以把这个时间和你已经采集到了的数据
做比较,如果有延迟的话,说明丢包了。
  我没有做过,猜的而已;)
  
 
  


emailxj
驱动牛犊
驱动牛犊
  • 注册日期2002-05-15
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-09 09:37
谢谢ppl提供的思路,我先试试看是否有效;

我也是初入门,以后多多指教;

gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-11 15:56
跟你不一样,我是非压缩视频音频采集播放,capture filter出来后就是renderer了,情况很简单的,你的这个,呵呵,不会的说 :(
emailxj
驱动牛犊
驱动牛犊
  • 注册日期2002-05-15
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-11 17:12
谢谢gung,现在还没解决,继续在犒
focusconss
驱动牛犊
驱动牛犊
  • 注册日期2002-11-17
  • 最后登录2006-08-02
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-12 22:42
to gung大侠:
    偶现在也在做,想向您请教。如何联系?
    
mike_wang
驱动中牛
驱动中牛
  • 注册日期2003-01-22
  • 最后登录2012-01-04
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-01-22 15:46
不好意思刚刚看到你的贴子,你做的东东更我做的很相似。
我以前也作过一个用于dvb播放的stream driver,我做的架构和你一样,也是只用driver来capture ts stream,后面的splitter/demultiplexer and decoder 都是由公司的其他人写的,不过根据dvb的原理,dvb ts stream 的同步是由decoder从stream中获得时间戳,然后decoder将时间戳发送给IgraphBuilder来处理,至于你所说的driver中的time参数,你在这个项目中可以不理他们!
建议:
1driver只要捕获到raw ts stream 即可
2调试过程可以自己写一个file writer filter,直接保存成文件
3可以用elecard或者其他的filter来播放你的文件看看效果如何
emailxj
驱动牛犊
驱动牛犊
  • 注册日期2002-05-15
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-23 11:13
谢谢,你的建议是对的,同步应该与驱动成无关,只要驱动保证数据及时的提交,后来,经过检验,与Dmux(微软的)有关,dmux处理数据时要求有PMT数据。从而确定pcr所在的pid,从而同步音频视频;
mike_wang
驱动中牛
驱动中牛
  • 注册日期2003-01-22
  • 最后登录2012-01-04
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-01-23 15:04
嘿嘿,给分吧!
游客

返回顶部