【问题标题】:portaudio video/audio syncportaudio 视频/音频同步
【发布时间】:2012-12-16 06:45:00
【问题描述】:

我使用 ffmpeg 解码视频/音频流并使用 portaudio 播放音频。我遇到了与 portaudio 的同步问题。我有一个像下面这样的功能,

double AudioPlayer::getPlaySec() const  
{  
    double const latency = Pa_GetStreamInfo( mPaStream )->outputLatency;  
    double const bytesPerSec = mSampleRate * Pa_GetSampleSize( mSampleFormat ) * mChannel;  
    double const playtime = mConsumedBytes / bytesPerSec;  
    return playtime - latency;  
}  

mCousumeBytes 是在 portaudio 回调函数中写入音频设备的字节数。我以为我可以根据字节数得到播放时间。实际上,当我执行使 cpu 忙碌的其他进程(如 open firefox )时,音频会变得断断续续,但回调不会停止,因此 mConsumeBytes 超出预期,并且 getPlaySec 返回的时间大于播放时间。
我不知道这是怎么发生的。欢迎任何建议。谢谢!

【问题讨论】:

    标签: portaudio


    【解决方案1】:

    延迟,在 PortAudio 中的定义有点模糊。就像您将数据放入缓冲区和您可以预期它播放之间的平均时间一样。这不是您想要用于此目的的东西。

    相反,要查找设备的当前播放时间,您实际上可以使用Pa_GetStreamTime 函数轮询设备。

    您可能想查看this document 了解更多详细信息。

    【讨论】:

    • 我发现我的同步逻辑有问题。这不是由portaudio引起的。但是,您提供了一份很棒的文件!还是谢谢!
    【解决方案2】:

    我知道这是旧的。但是还是; PortAudio v19+ 可以为您提供自己的采样率。您应该将其用于音频同步,因为不同硬件之间的实际采样率播放可能不同。 PortAudio 可能会尝试补偿(取决于实现)。如果您有漂移问题,请尝试使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-16
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多