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 コールバック関数でオーディオ デバイスに書き込まれたバイト数です。バイト数に応じて再生時間を取得できたと思いました。実際、他のプロセス (open firefox など) を実行して CPU をビジー状態にすると、オーディオが断続的になりますが、mConsumeBytes が予想以上に大きくなり、getPlaySec が再生時間よりも長い時間を返すため、コールバックは停止しません。
これがどのように起こったのかわかりません。どんな提案でも大歓迎です。ありがとう!