在directshow图中设置音频样本的时间戳

我正在开发一个directshow音频解码器滤波器,以解码AC3音频。 过滤器用于实时图,解码TS多播。 demuxer(mainconcept)为我提供了解复用的音频数据,但没有为样本提供时间戳。 如何获取/计算音频的正确时间戳?     
已邀请:
每个AC-3帧都嵌入了
6 * 256
样本的数据。采样率可以是32 kHz,44.1 kHz或48 kHz(由AC-3规范数字音频压缩标准(AC-3,E-AC-3)定义)。帧本身不携带时间戳,因此您需要分别假设连续流和递增时间戳。正如您所提到的,源是实时的,您可能需要在数据饥饿时重新调整时间戳。 每个AC-3帧都是固定长度的(您可以从比特流头中识别出来),因此您可能还在检查解复用器是否为您提供单个AC-3帧或批量中的几个帧。     
我发现这个论坛帖子: http://www.ureader.com/msg/14712447.aspx 在其中,成员给出以下公式来计算音频的时间戳,给定它的格式(采样率,通道数,每个样本的位数):   使用PCM音频,duration_in_secs = 8 * buffer_size / wBitsPerSample /   nChannels / nSamplesPerSec或duration_in_secs = buffer_size /   nAvgBytesPerSec(因为,对于PCM音频,nAvgBytesPerSec =   wBitsPerSample * nChannels * nSamplesPerSec / 8)。 您需要添加的唯一内容是跟踪变量,它告诉您流所在的样​​本编号,因此您可以使用它来在开始线性流时将开始时间和结束时间抵消持续时间(duration_in_secs)。对于搜索操作,您当然需要知道或计算流中的样本编号。 不要忘记DirectShow中时间戳的单位是类型为REFERENCE_TIME,长整数或Int64。每个单位等于100纳秒。这就是为什么你在视频过滤器中看到值10,000,000除以相关的每秒帧数(FPS)来计算每帧的时间戳,因为10,000,000等于REFERENCE_TIME变量中的1秒。     

要回复问题请先登录注册