2016-12-21 26 views
-1

Так что у меня проблема с кодировкой AAC. Я пытаюсь кодировать некоторые синтетические звуковые волны, но это не работает должным образом. Файл, который я получаю, дает просто супер короткий звук при воспроизведении в VLC. Когда я играю в ffplay, я играю так, как я ожидаю, но он говорит «продолжительность: 00: 00: 00.05», который, я полагаю, составляет 5 мс. Но я кодирую намного больше, и это играло больше. Таким образом, VLC воспроизводит очень короткий звук, ffplay воспроизводит более длинный файл (ожидаемая длина), но отображает его с очень короткой продолжительностью, что происходит?aac encoding with ffmpeg result в суперкоротком файле

Источник: http://pastebin.com/M5MKkEL3

Одна из вещей, которая выглядит не так для меня это: Если вы посмотрите на переменную «audio_time», если останова и прочитал его каждый закодировать кадр, вы получите это:

..
Закодировать рама 8: +0,00010416666666666666
Закодировать рама 9: +0,00012500000000000000
(и так далее)

Разница заключается в следующем: ~ 0,00002085, что соответствует 1/1000 разностей, которые я ожидал от ~ 47 выборок кадров в секунду, что и требует кодер с частотой дискретизации 48k (48k/1024 = ~ 47).

Так почему же я получу тысячу ожидаемых данных в кодировке?

Не стесняйтесь указать что-нибудь подозрительное!

Заранее благодарен!

ответ

0

Так что я нашел его, в строке 75, это не хватало:

time_base.num = per_frame_audio_samples; 
    time_base.den = aud_codec_context->sample_rate; 
    aud_codec_context->time_base = time_base; 

per_frame_audio_samples = 1024 в моем случае.