阅读:2147回复:9
向gung, mike_wang 请教视频流和声音不同步问题
在请教问题之前,先说明一下我的框架:
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... |
沙发#
发布于: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之后解决,如何解决呢? 谢谢; |
|
板凳#
发布于:2002-12-08 12:24
在请教问题之前,先说明一下我的框架: 我看emaillxj是各大虾,又没有兴趣交流一下啊。 我的e-mail,huangjielg@hotmail.com。 关于时间,可能是这样子的, 用 StreamClassQueryMasterClock 可以得到当前系统已经播放 到了那个时间,然后你可以把这个时间和你已经采集到了的数据 做比较,如果有延迟的话,说明丢包了。 我没有做过,猜的而已;) |
|
地板#
发布于:2002-12-09 09:37
谢谢ppl提供的思路,我先试试看是否有效;
我也是初入门,以后多多指教; |
|
地下室#
发布于:2002-12-11 15:56
跟你不一样,我是非压缩视频音频采集播放,capture filter出来后就是renderer了,情况很简单的,你的这个,呵呵,不会的说 :(
|
|
5楼#
发布于:2002-12-11 17:12
谢谢gung,现在还没解决,继续在犒
|
|
6楼#
发布于:2002-12-12 22:42
to gung大侠:
偶现在也在做,想向您请教。如何联系? |
|
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来播放你的文件看看效果如何 |
|
8楼#
发布于:2003-01-23 11:13
谢谢,你的建议是对的,同步应该与驱动成无关,只要驱动保证数据及时的提交,后来,经过检验,与Dmux(微软的)有关,dmux处理数据时要求有PMT数据。从而确定pcr所在的pid,从而同步音频视频;
|
|
9楼#
发布于:2003-01-23 15:04
嘿嘿,给分吧!
|
|