2012-08-15 3 views
0

ffmpeg에서 오디오 큐를 사용하여 디코딩 된 lpcm 데이터를 재생할 때 경과 시간이 AudioQueueGetCurrentTime 인 경우 미디어 지속 시간을 초과합니다. 그러나 AVFoundation 프레임 워크를 사용하여 동일한 미디어를 디코딩 할 때 경과 된 시간은 미디어의 지속 시간과 동일하므로 디코딩되지 않은 ffmpeg로 미디어를 읽은 다음 압축 된 미디어 데이터를 오디오 대기열로 보내면 경과 시간도 미디어의 지속 시간과 같습니다. 다음과 같은 AudioStreamBasicDescription 세트 :오디오 큐 재생 lpcm이 ffmpeg에서 디코딩 된 경우 오디오 대기열의 경과 시간이 미디어의 내구성을 초과 함

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의 설정은 상기와 동일하다. 내 검사에 의해 AudioTimeStamp.mSampleTimeAudioQueueGetCurrentTime에 의해 발견 된 것은 ffmpeg와 AVFoundation간에 다른 것으로 밝혀졌으며, ffmpeg의 값은 AVFoundation보다 큽니다. 그래서 나는 어떻게 이런 일이 일어나고 그것을 고치는 지 알고 싶다. 감사합니다.

답변

0

여기서 실수는 asbd.mSampleRate = 44100이 항상 올바르지 않기 때문에 때로는 결과가 맞지만 다른 것은 잘못되었습니다. 그런 다음 asbd.mSampleRate = audioCodecCtx->sample_rate을 설정해야합니다. 항상 잘 작동합니다!