0

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だから私はこれがどのように起こるか、そしてそれを修正する方法を知りたいですか?ありがとう!

4

1 に答える 1

0

Here the mistake is asbd.mSampleRate = 44100 is not always right, so sometimes the result is right, but others is wrong. Then you should set the asbd.mSampleRate = audioCodecCtx->sample_rate, this always work well!

于 2012-08-15T11:58:33.433 に答える