среда, 15 апреля 2015 г.

Что за внутренний кодек L16?

В логе можно увидеть такую строку:
[DEBUG] switch_ivr_play_say.c:1314 Codec Activated L16@8000hz 1 channels 20ms

По сути, это чистый WAV, 16 бит на такт, 8кГц, линейное преобразование. Каждые 20 мс сигнала собираются в 1 пакет.
Промежуточный внутренний кодек фрисвича, когда нужно транскодирование, микширование итд.

HD - те же 16 бит, но полоса больше, допустимые значения 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000



в файле src/include/switch_utils.h  есть такая строка
#define switch_is_valid_rate(_tmp) (_tmp == 8000 || _tmp == 12000 || _tmp == 16000 || _tmp == 24000 || _tmp == 32000 || _tmp == 11025 || _tmp == 22050 || _tmp == 44100 || _tmp == 48000)
а также в src/include/switch_loadable_module.h есть функция проверки switch_check_interval, там ещё с привязками к ptime.
В src/switch_pcm.c - через switch_core_codec_add_implementation добавляются L16-кодеки.

Расходы даже на L16@8000 будут порядка 128 кБит, что слишком много для нормального использования, PCM* дают почти такое же качество при существенно меньшем расходе канала - 64 кБит. Ещё меньше будет GSM, 13.2кБит при практически тех же вычислительных расходах, но через него уже факс пройти не в состоянии.

Линки
https://wiki.freeswitch.org/wiki/Codecs
https://freeswitch.org/stash/scm/fs/freeswitch.git
http://www.voipoffice.ru/tags/VOIP_kodeki/

зы Спасибо Stanislav Sinyagin за консультации.

1 комментарий:

  1. L16 - это нежатый никаким кодеком звук. Просто набор 2-хбайтовых целых значений, обозначающий уровень звука в каждый конкретный момент времени (соответственно, 8000 раз в секунду, 16000 раз в секунду и тд.)

    ОтветитьУдалить