Запись разговоров — Астериск шаг за шагом

Запись разговоров

В примерах, приведённых ниже, используются переменные (выглядят так: ${имя_переменной}), например, ${fname} и другие. Если переменные не являются предопределёнными, их нужно определить до использования с помощью команды Set.

Пример:

Set(fname=MyFileName)

MixMonitor — запись аудиофайла

Запись разговоров в Астериске выполняется с помощью команды MixMonitor в диалплане:

MixMonitor(filename[,options[,command]])

Аргументы:

filename   — имя записываемого файла. Если не содержит абсолютный путь, то помещается в директорию, определенную по умолчанию в конфиге asterisk.conf

options   — параметры выполнения команды

command   — команды, которые нужно выполнить после завершения работы MixMonitor (можно ввести несколько команд, разделяя их &&)

Внимание! Для действий над файлами в командах, указанных в command, нужно указывать полный путь к ним (директория по умолчанию здесь не действует).

Директория по умолчанию: /var/spool/asterisk/monitor

Путь /var/spool/asterisk указывается в файле asterisk.conf в переменной astspooldir, папка monitor создаётся автоматически.

Lame — преобразование аудиофайла в mp3

Преобразование файлов в mp3 позволяет экономить место на диске, занимаемое файлами. Минута файла wav занимает примерно 955 kB, стерео wav-файла — в два раза больше (1910 kB), файла mp3 — в 8 раз меньше (240 kB).

Для преобразования в mp3 сначала надо установить lame:

sudo apt-get install lame

Пример команды для записи wav-файла с последующим его преобразованием в mp3 и удалением исходного wav-файла:

MixMonitor(${fname}.wav,b,lame -b 16 ${fname}.wav ${fname}.mp3 && rm ${fname}.wav)

Sox — микширование аудиофайлов

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

Для микширования файлов сначала надо установить sox:

sudo apt-get install sox

Параметры для команды MixMonitor для дополнительной записи файлов с каналами только звонящего и только отвечающего абонентов:

r(имя_файла_с записью_звонящего)
t(имя_файла_с записью_отвечающего)

Чтобы не записывать файл с обоими каналами, в команде MixMonitor нужно не указывать filename, т.е. сразу после скобки ставить запятую.

Чтобы после записи файлов смиксовать их в один файл, после второй запятой в параметрах команды MixMonitor указать команду, которую нужно выполнить после завершения работы команды MixMonitor:

sox -M файл1.wav файл2.wav файл_результат.wav

Пример:

MixMonitor(,r(${fname}_r.wav)t(${fname}_t.wav),sox -M ${fname}_r.wav ${fname}_t.wav ${fname}.wav)

Пример фрагмента диалплана, выполняющий запись файла mp3 с разнесением звонящего и отвечающего в разные каналы, файлы раскладываются по папкам год-месяц-день:

same =>      n,Set(__RecDir=/var/spool/asterisk/monitor)
same =>      n,Set(fname=${RecDir}/${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/${STRFTIME(${EPOCH},,%Y%m%d_%H%M%S)}_${CALLERID(num)})
same =>      n,MixMonitor(,bW(2)r(${fname}_r.wav)t(${fname}_t.wav),sox -M ${fname}_r.wav ${fname}_t.wav ${fname}.wav && lame -b 32 -m d ${fname}.wav ${fname}.mp3 && rm ${fname}*.wav)

В примере в параметрах lame указывается:

-m d   — режим кодирования каналов: dual channels. В этом режиме стереоканалы кодируются совершенно независимо, каждому каналу выделяется ровно половина битрейта. Поэтому:

-b 32   — целевой битрейт, указываем в два раза больше чем обычный 16 для телефонии

Следующая команда после lame (после &&) удаляет все больше не нужные wav-файлы.