значения в файле adts - PullRequest
0 голосов
/ 30 марта 2020

У меня есть 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 больше выборок, чем входных данных, и каковы его первые произвольные данные и последние нулевые данные?

какое свойство следует указывать установить в моем декодере, чтобы он работал хорошо?

...