Asterisk не проигрывает звуковые файлы
После установки, Asterisk ищет файлы в следующем каталоге: "/var/lib/asterisk/sounds" .
Вроде как, этот каталог указан в глобальном конфигурационном файл Astyersk-а.
(/etc/asterisk/asterisk.conf) (Но, опять таки, я не смог найти в нем ссылку именно на эту папку. Там имеются ссылки на несколько папок, но именно на папку "/var/lib/asterisk/sounds"- Я не нашел.)
Внутри данного каталога имеется структура папок, разбитая по языкам. Если вы не устанавливали никаких дополнительных языковых файлов, внутри каталога будет только папка en, внутри которой будут находиться сами звуковые файлы. У многих файлов будут одинаковые названия, а вот расширения - разные. Дело в том, что один и тот же файл присутствует в различных форматах сжатия. Это позволяет системе выбирать для воспроизведения тот формат, который для нее наименее сложен для воспроизведения (то есть, меньше всего загружает систему). Именно поэтому, при указании файла для приложений (Playback, Background и т. д.) мы не указываем расширение. Система выбирает сама.
Как же понять, что она выберет? Для этого нужно использовать команду "show translation"в консоле Asterisk. (Правда, мне так и не удалось получить от нее результат. То ли данные устаревшие, то ли я что-то не то делал. Консоль Asterisk сообщила мне в ответ о том, что такой команды не существует).
Если же указывать файл с расширением, то система принудительно будет пытаться воспроизвести именно его.
А теперь непосредственно о русификации звуковых фалов Asterisk-а.
Вначале их нужно скачать. Для этого переходим в папку, в которую мы выкачивали исходники Asterisk-а ("cd /usr/src/asterisk") и вводим команду:
"wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ru-gsm-current.tar.gz"
Далее, создаем папку "ru" внутри каталога "/var/lib/asterisk/sounds":
Теперь производим раз-архивацию файла "asterisk-core-sounds-ru-gsm-current.tar.gz" в папку
"tar zxvf asterisk-core-sounds-ru-gsm-current.tar.gz -C /var/lib/asterisk/sounds/ru".
Теперь нужно заставить Asterisk использовать русскоязычные звуковые файлы. Есть два способа, известные на текущий момент Мне, как это сделать:
1) Внести изменения в глобальный конфигурационный файл "/etc/asterisk/asterisk.conf". Ищем в данном файле параметр "defaultlanguage" и прописываем ему значение "ru".
2) Или же, вносим данное значение "language=ru" в файл конкретного канала (SIP, IAX2 или ZAP(теперь он зовется DAHDI)).
Пример: Чтобы Asterisk стал использовать русские звуковые файлы для SIP-каналов (всех устройств и программ, подключенных к Asterisk-у по SIP-протоколу), нужно внести следующий параметр в файл "/etc/asterisk/sip.conf":
После этого, для каналов SIP, Asterisk начнет искать файлы в каталоге "/var/lib/asterisk/sounds/ru".
Варианты, как в Asterisk проиграть звуковой файл несколько раз
Способ первый - проиграть файл и разъединить. Здесь мы не проигрываем файл несколько раз.
Способ второй - принять вызов и поставить его на удержание, мелодию реализовать своим классом в musichold.conf.
Способ третий в Dial указать опцию m, то есть поставить на удержание сразу в Dial, молодию реализовать классом.
Третий вариант здесь не реализован – это просто Dial с опцией m.
Способ четвертый использовать GOTO, то есть зациклить мелодию
Способ первый и второй
;Держим вызов три секунды
exten => 911,1,Wait(3)
Устанавливаю в переменную per1 в путь до звуковых файлов
exten => 911,n,Set(per1="/var/lib/asterisk/sounds/ru")
;Отвечаю на вызов
exten => 911,n,Answer()
;Проигрываю файл или устанавливаю удержание
exten = >911,n,MusicOnHold(class,[avaliable])
exten => 911,n,Playback($/tt-weasels)
;Жду 5 секунд
exten => 911,n,Wait(5)
;Разъединяю
exten => 911,n,Hangup()
;Через GOTO четвертый способ
;Переход на ext in-ivr
exten => 911,1,Goto(in-ivr,s,1)
;Диалплан in-ivr для проигрывания мелодии бесконечно долго
[in-ivr]
;Устанавливаем переменные с путями до файлов
;exten => s,1,Set(per1="/var/lib/asterisk/sounds/ru")
exten => s,1,Set(per2="/var/lib/asterisk/moh")
exten => s,n,Set(i=1)
exten => s,n,Goto(out-ivr,s,1)
;Проигрываем мелодию
;exten => s,n,Playback($/tt-weasels)
[out-ivr]
exten => s,1,While($[$ < 20])
exten => s,n,Playback($/macroform-cold_day)
;exten => s,n,Playback($/tt-weasels)
exten => s,n,Set(i=$[$ + 1])
exten => s,n,Goto(s,1)
exten => s,n,EndWhile
;Ждем 2 сек,не обязательно
exten => s,n,WaitExten(2)
exten => s,n,Hangup()
;Нажали 1, проговариваем 1 возвращаемся в главное меню
;exten => 1,1,Playback($/1")
;exten => 1,2,Playback($/1")
;exten => 1,3,Goto(s,1)
Далее будем исходить из того, что соединение устанавливается (т.е. проблем на уровне SIP нет). Признаком потери RTP пакетов будет отсутствие звука в одном направлении или в обоих. Фактически это означает, что при работе с Asterisk нет звука.
Применительно к NAT существует несколько способов настройки Asterisk в зависимости от существующей конфигурации сети.
ASTERISK на выделенном IP адресе, клиенты за NAT
Распространенным случаем (особенно при использовании виртуального сервера телефонии) являются клиенты за NAT, сервер же находится на публичном выделенном IP адресе.
Чтобы избежать потери звука потребуется отредактировать sip.conf:
[general]
localnet=192.168.1.1/24
externip=185.12.48.1
[user1]
nat=yes
qualify=300
В качестве externip задается белый адрес сервера с Asterisk.
Также делаем указание на то, что на стороне клиентов используется NAT и задаем проверку соединения каждые 300 мс.
Другой случай: Asterisk находится за NAT, клиенты снаружи. На практике такое может быть при подключении удаленных сотрудников к серверу телефонии, находящемуся в локальной сети. RTP пакеты при некорректной настройке будут передаваться от звонящего, в обратную сторону голосовой трафик не пойдет.
Настройка в sip.conf похожа на использованную в предыдущем случае, но для клиентов запрещается reinvite, т.е. трафик может ходить только через сервер. клиенты между собой напрямую общаться не могут.
[general]
localnet=192.168.1.1/24
externip=192.168.1.2
[user1]
nat=yes
canreinvite=no
Также стоит убедиться, что в rtp.conf задан диапазон портов (начальный и конечный порт) и что движение трафика через них не ограниченно в iptables.
rtpstart=10000
rtpend=20000
Asterisk и SIP-клиенты находятся за NAT
Последний типичный случай: и сервер Asterisk и SIP-клиенты находятся за NAT.
Настройка в этом случае полностью аналогична предыдущему случаю, однако дополнительно требуется настроить проброс портов:
При подключении к провайдеру SIP телефонии всегда следует изучить имеющуюся справочную информация по настройке сервера для работы с NAT или запросить таковую.
Также в сети можно найти схемы поиска причин отсутствия звука при работе с Asterisk. Авторскими данные схемы не являются, однако они очень хорошо составлены и могут оказаться полезны при траблшутинге, поэтому ссылки на них приводятся в рамках данного материала.
Зачастую, возникает задача, поменять голосовое приветствие, либо же залить какую-нибудь рекламу на свою IP-ATC. Это сделать не трудно, но вся проблема заключается в том, что Asterisk понимает определенный формат звукового файла, с определенной частотой звучания.
Программ, которые занимаются обработкой аудио великое множество, но многие из них платные, многие — тяжелы в использовании. Тут на помощь приходит программа Audacity. Она совершенно бесплатна, доступна в сети Интернет и совершенно незамысловата в работе. К тому же, руссифицирована, что является приятным дополнением для пользователей.
Разберемся по-этапно, как создать голосовой файл для импорта в Asterisk Открываем программу. Она выглядит так:
Далее, как обычно, загружаем в программу звуковой файл. Делается это так: Файл — Открыть. Получается такой вид:
Вроде бы все хорошо, но… Проблема в том, что Asterisk проигрывает формат mono, а у нас на данный момент звуковой файл в формате stereo. С помощью Audacity переводим stereo в mono. Выбираем: Дорожки — Стерео в моно.
Теперь необходимо поменять частоту звучания с 44100 Гц в 8000 Гц. Выбираем: Правка — Параметры:
Выбираем частоту дискретизации по умолчанию — 8000 Гц. Отлично. Теперь дело за малым — экспортировать данный файл. Делается это так: Файл — Экспортировать.
Открывается окошко Windows, указываем имя файла, тип файла — WAV 16 bit PCM, выбираем куда сохранить и жмем « Сохранить». Все! Файл экспортирован и готов к импорту в Вашу IP-ATC Asterisk.
Читайте также: