我使用 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 返回的时间大于播放时间。
我不知道这是怎么发生的。欢迎任何建议。谢谢!