2015-04-16 3 views
1

У меня есть проект iOS, который воспроизводит онлайн-потоки радио, для воспроизведения используется FFmpeg. Также я добавил способность записывать потоки, декодировать потоки через функцию avcodec_decode_audio4 и записывать вывод в файл .wav. Но эти файлы слишком большие, потому что это несжатый формат, поэтому я хочу декодировать файлы до .mp3.FFmpeg сохранить поток в mp3

Я нашел пару способов конвертировать аудио, но только когда звук готов к файлу, но я хочу декодировать в сжатый формат, как только получаю кусок данных из потока, а не готового файла.

Возможно ли это? Можете ли вы мне посоветовать, как это достичь?

ответ

0

Вы можете использовать FFmpeg (ака libav) для кодирования аудио вы чтения с avcodec_decode_audio4 в файл в формате mp3, пока libav формировался с хромом (--enable-libmp3lame).

В принципе, вы настраиваете mp3-кодек, а затем вызываете avcodec_encode_audio2 (кто называет эти вещи?) На прогрессивном выходе avcodec_decode_audio4.

canonical example может быть запутанным, потому что он также касается видео, но вы должны быть в состоянии дразнить детали, которые вы хотите от него.

Этот post on transcoding audio от arashafiei в целом полезен.

+0

ОК, я попробую это. – Sergey92zp

+0

Эти имена относятся к историческим API, которые с тех пор устарели. В какой-то момент появилась функция avcodec_encode_audio() (это «1»), и был изменен прототип функции (возможно, uint8_t * data + int size -> AVPacket pkt), и таким образом родилась avcodec_encode_audio2(), а avcodec_encode_audio() (для совместимости) сохранена и называется avcodec_encode_audio2() внутренне. В конце концов, он был удален, и теперь у вас есть только avcodec_encode_audio2(). –