Я получаю байтовый массив (int8_t*
) и хочу использовать FFMPEG для кодирования его в FLAC. Все примеры, которые я нашел, считывают данные из файлов, что не так для меня. Следуя оригинальным документам (см. здесь ), я предложил следующее решение:
#include "libavcodec/avcodec.h"
// ...
// params:
// audioData: original audio data
// len: length of the byte array (audio data)
// sampleRate: sample rate of the original audio data
// frameSize: frame size of the original data
uint8_t* encodeToFlac(uint8_t* audioData, int len, int sampleRate, int frameSize) {
uint8_t* convertedAudioData;
// Context information
AVCodecContext* context = avcodec_alloc_context();
context->bit_rate = 64000;
context->sample_rate = sampleRate;
context->channels = 2;
context->frame_size = frameSize;
short* samples = malloc(frameSize * 2 * context->channels);
int outAudioDataSize = len * 2;
convertedAudioData = malloc(outAudioDataSize);
int outSize = avcodec_encode_audio(c, convertedAudioData, outAudioDataSize, samples);
return convertedAudioData;
}
У меня есть две основные проблемы с вышеуказанным решением:
Я не указал, какой должна быть конечная кодировка (например, MP3, FLAC и т. Д.), Что заставляет меня задуматься, правильно ли я использую библиотеку FFMPEG?
Есть ли у меня вся необходимая информация об источнике - оригинальные аудиоданные? Я не уверен, что у меня есть вся необходимая информация для кодирования.