는 얼마나는 FFmpeg의 libav *를 이용하여 오디오 스트림을 디코딩 내 프로세스libavcodec에서 오디오 프레임을 어떻게 디코딩합니까? 여기
[videofile] -> (오디오 패킷을 읽어) -> [PKTS 큐] -> (디코더) -> 난 디코더 후 버퍼를 삽입해야 할 어떤 이유 화자의 샘플 버퍼
[videofile] -> (오디오 패킷을 읽어) -> [PKTS 큐] -> (디코더) -> [샘플 버퍼] -> 스피커의 샘플 버퍼
samples buffer
의 오디오 샘플은 LPCM 16 비트입니다. 오디오의 점을 저장하려면 sample buffer
첫 번째 샘플의 pts를 저장하십시오. 그런 식으로, 나는 버퍼에있는 모든 샘플의 pts를 계산할 수 있습니다.
오디오 스트림에 연속 오디오 샘플이있는 경우에만 계산이 정확하다는 문제가 있습니다. ffmpeg의 디코딩 된 오디오 프레임에는 항상 연속 샘플이 포함되어 있습니까?
하자 설명한다 디코더는 제 1-> 10 샘플을 포함하는 오디오 프레임을 복호라고하고, 다음 프레임은 제 15> (20)로부터 샘플들을 포함한다. 만약 내가 모든 샘플을 버퍼에 넣으면, 버퍼는 [1..10 15..20]과 같을 것입니다. 왜냐하면 나는 첫 번째 샘플의 pts 만 저장하기 때문에 15에서 20까지의 샘플에 대한 계산은 두 번째 11에서 14까지 침묵 부분이 있기 때문에 잘못 될 것입니다. – jAckOdE
다음 프레임에는 11-14가 손실되면 15-> 20의 샘플이 포함됩니다. 그렇지 않으면 순서대로 나오지, 그렇지? 따라서 들어오는 샘플에 간격이 있으면 예 출력에도 간격이 생기고 디코더가 할 수있는 것이 없습니다. 그러나 들어오는 비트 스트림이 완료되고 유효한 구문과 의미를 가진다면 연속적인 출력을 얻어야합니다. – av501
11-14 (샘플 부분이 없음)의 샘플이없는 경우 프레임이 손실되지 않고 해당 기간 동안 오디오 샘플이 없습니다. – jAckOdE