Запись разговоров
В примерах, приведённых ниже, используются переменные (выглядят так: ${имя_переменной}), например, ${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-файлы.