У меня есть 32-битные данные потока с плавающей запятой с одним каналом и 8000 выборок в секунду. Я хочу сжимать данные каждый час и декодировать их при необходимости и получать данные. Я выбрал алгоритм AA C (я знаю, что это с потерями). Я использовал gstreamer-1.0 avenc_aa c для кодирования и avdec_aa c для декодирования.
Encode Pipeline
appsrc->rawaudioparse->audioconvert->avenc_aac->aacparse->filesink
для rawaudioparse свойства, я установил «частоту дискретизации» 8000, потому что это меньшая частота дискретизации avenc_aa c* Поддержка 1013 *.
g_object_set(G_OBJECT(rawaudioparser) , "pcm-format", GST_AUDIO_FORMAT_F32LE
"num-channels", 1,
"sample-rate", 8000,
NULL);
Я применил следующий фильтр к ссылка между aacparse и filesink , чтобы получить файлы adts.
gst_caps_new_simple ("audio/mpeg", "stream-format", G_TYPE_STRING, "adts", NULL);
Трубопровод декодирования
filesrc->aacparse->avdec_aac->audioconvert->audioresample->appsink
.
не установил никакого свойства или ограничения для конвейера декодирования.
для теста я использовал 2-секундные данные (образец 1600).
Кажется, что конвейер кодирования работает хорошо, и я получаю файл adts. В выходных данных только часть (около 500 отсчетов) кажется релевантной входным данным, а остальные не имеют смысла.
Когда я открываю файл adts с помощью программного обеспечения Audacity, это больше, чем 2 секунды. сначала он показывает произвольные данные, затем показывает мои данные (все они правильные), а после этого показывает ноль. audacity output
Почему в файле cc больше выборок, чем входных данных, и каковы его первые произвольные данные и последние нулевые данные?
какое свойство следует указывать установить в моем декодере, чтобы он работал хорошо?