ffmpeg からデコードした lpcm データを audioqueue で再生すると、取得した経過時間AudioQueueGetCurrentTime
がメディアのデュレーションを超えます。しかし、同じメディアを AVFoundation フレームワークでデコードすると、経過時間はメディアの継続時間と等しくなるため、デコードせずに ffmpeg でメディアを読み取り、圧縮されたメディア データを audioqueue に送信すると、経過時間もメディアの継続時間と等しくなります。次のように設定されたAudioStreamBasicDescription :
asbd.mSampleRate = 44100;
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagsCanonical;
asbd.mBytesPerPacket = 4;
asbd.mFramesPerPacket = 1;
asbd.mBytesPerFrame = 4;
asbd.mChannelsPerFrame = 2;
asbd.mBitsPerChannel = 16;
asbd.mReserved = 0;
AVFoundation からデコードしたデータで再生する場合、AudioStreamBasicDescriptionの設定は上記と同じです。私のテストでは、ffmpeg と AVFoundation でAudioTimeStamp.mSampleTime
得られる値が異なり、ffmpeg の値は AVFoundation よりも大きいことがわかりました。AudioQueueGetCurrentTime
だから私はこれがどのように起こるか、そしてそれを修正する方法を知りたいですか?ありがとう!