AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Asterisk не находит звуковые файлы по стандартному пути

Newbies/FAQ Forum 23 сообщений 06.10.2011 13:09 - 01.11.2011 12:01
#1 06.10.2011 13:09

Asterisk не находит звуковые файлы по стандартному пути


есть астериск собранный из исходников, есть стандартный набор звуковых файлов, которые лежат: "/var/lib/asterisk/sounds/"
например файл pbx-transfer присутствует в трех экземплярах: в ../sounds/; ../sounds/en/; ../sounds/ru/;
при попытке его проиграть астериск выдает:

[Oct 6 15:57:55] WARNING[11607]: file.c:650 ast_openstream_full: File pbx-transfer does not exist in any format
[Oct 6 15:57:55] WARNING[11607]: file.c:956 ast_streamfile: Unable to open pbx-transfer (format 0x4 (ulaw)): No such file or directory

и если воспроизведение приложением playback решается просто указанием полного пути, то как быть со стандартными приложениями minivm, direct, transfer, и т.д., где нельзя явно указать путь?

Отсюда вопрос: как явно задать путь к стандартной папке со звуковыми файлами?
#3 07.10.2011 09:15

ну так все правильно вроде сделал...

в asterisk.conf
...
languageprefix=yes
...

в sip.conf
...
language=ru
...

в extensions.conf
...
exten => s,1,NoOp()
same => n,Verbose("${CALLERID(num)} вызывает ${EXTEN}")
same => n,Verbose("${CHANNEL(language)}")
same => n,Dial(SIP/linksys_skat,30,rtT)
same => n,Congestion
...

стандартные файлы продублированы в папках "/var/lib/asterisk/sounds/" и "/var/lib/asterisk/sounds/ru/"

при входящем получаю:
203 вызывает s
ru

после соединения пытаюсь перевести звонок и получаю
[Oct 7 11:53:13] WARNING[17513]: file.c:650 ast_openstream_full: File pbx-transfer does not exist in any format
[Oct 7 11:53:13] WARNING[17513]: file.c:956 ast_streamfile: Unable to open pbx-transfer (format 0x4 (ulaw)): Invalid argument

при этом в варианте:
same => n,Dial(SIP/linksys_skat,30,rtTA(/var/lib/asterisk/sounds/pbx-transfer))
файл воспроизводится, а в варианте
same => n,Dial(SIP/linksys_skat,30,rtTA(pbx-transfer))
нет
во многих источниках говорится, что путь к звуковым файлам можно явно задать в файле asterisk.conf, но как именно нигде не сказано...
#4 07.10.2011 11:53

Могу в лоб метод предложить, только не бейте. В main/file.c в районе вот той самой 956 строчки:

fs = ast_openstream(chan, filename, preflang);
if (!fs) {
ast_log(LOG_WARNING, "Unable to open %s (format %s): %s\n", filename, ast_getformatname_multiple(fmt, sizeof(fmt), chan->nativeformats), strerror(errno));
//сюда добавить следующую строчку
ast_log (LOG_WARNING, "Debug:%s %s %s", chan, filename, preflang)
return -1;
}

Отсюда будет видно из чего он собирает путь к файлу, а там уже будет понятнее.
#5 07.10.2011 13:49

изменения внес, скомпилировал

а лог он будет писать при ./configure, при компиляции или нужно скомпилировать, установить и попробовать воспроизвести ошибку?

простите за ламерские вопросы... в программировании полный ноль.
#6 07.10.2011 14:47

скомпилировать, установить, он будет это в CLI писать сразу после "Unable to open..."
#7 11.10.2011 11:34

честно говоря легче не стало...

[Oct 11 14:31:49] WARNING[13999]: file.c:650 ast_openstream_full: File pbx-transfer does not exist in any format
[Oct 11 14:31:49] WARNING[13999]: file.c:956 ast_streamfile: Unable to open pbx-transfer (format 0x4 (ulaw)): No such file or directory
[Oct 11 14:31:49] ERROR[13999]: app_dial.c:1967 dial_exec_full: error streaming file 'pbx-transfer' to callee
#8 12.10.2011 10:17

Code:
updatedb

дождаться завершения команды, затем
Code:
locate pbx-transfer

покажите вывод

Added after 4 minutes:

еще попробуйте в asterisk.conf languageprefix=no, (не забудьте рестартануть астерсик!)
а также проверьте права на файлы звуков.

_________________
Успехов!
#9 12.10.2011 12:53

locate pbx-transfer:

/var/lib/asterisk/sounds/pbx-transfer.wav
/var/lib/asterisk/sounds/en/pbx-transfer.gsm
/var/lib/asterisk/sounds/en/pbx-transfer.wav
/var/lib/asterisk/sounds/ru/pbx-transfer.gsm
/var/lib/asterisk/sounds/ru/pbx-transfer.wav

Права роли не играют
1) Asterisk запускается от root'а
2) Если явно указать путь файл проигрывается

languageprefix=no результата не дал
#10 12.10.2011 13:50

а какие модули format* установлены?
#11 12.10.2011 14:50

Module Description Use Count
format_jpeg.so jpeg (joint picture experts group) image 0
format_h264.so Raw H.264 data 0
format_sln16.so Raw Signed Linear 16KHz Audio support (S 0
format_vox.so Dialogic VOX (ADPCM) File Format 0
format_gsm.so Raw GSM data 0
format_siren14.so ITU G.722.1 Annex C (Siren14, licensed f 0
format_wav.so Microsoft WAV format (8000Hz Signed Line 0
format_g723.so G.723.1 Simple Timestamp File Format 0
format_h263.so Raw H.263 data 0
format_siren7.so ITU G.722.1 (Siren7, licensed from Polyc 0
format_ilbc.so Raw iLBC data 0
format_g729.so Raw G729 data 0
format_wav_gsm.so Microsoft WAV format (Proprietary GSM) 0
format_pcm.so Raw/Sun uLaw/ALaw 8KHz (PCM,PCMA,AU), G. 0
format_sln.so Raw Signed Linear Audio support (SLN) 0
format_g726.so Raw G.726 (16/24/32/40kbps) data 0
16 modules loaded

Я думаю если бы кодека не хватало, файл не игрался бы совсем в пределах звонка...
а он гад играется, но только при подстановке абсолютного пути...
#12 14.10.2011 22:41

при сборке какието ключи указывали в ./configure?
_________________
Успехов!
#13 17.10.2011 10:45

только один
не помню как точно пишется, но суть - отключить компиляцию документации
-- non xml_doc или вроде того...
#14 20.10.2011 13:44

Проблему решить не удалось.
Переустановил Астериск из пакетов, пользуюсь звуковыми файлами...

Added after 57 minutes:

Всем спасибо за ответы.

Added after 2 hours 6 minutes:

Нет, проблема не хочет меня покидать....

Приложение VoiceMail() и VoiceMailMain() упорно берет файлы озвучки из папки "en" Evil or Very Mad
при том что переменная канала стоит как "ru".

Подскажите, может для голосовой почты нужно язык отдельно указывать, и где?

Консоль
-- Executing [999@phones:4] Answer("SIP/linksys_skat-00000010", "") in new stack
-- Executing [999@phones:5] VoiceMailMain("SIP/linksys_skat-00000010", "@default") in new stack
-- Playing 'vm-login.gsm' (language 'ru')
-- Playing 'vm-password.gsm' (language 'ru')
-- Playing 'vm-youhave.gsm' (language 'ru')
[Oct 20 16:32:56] WARNING[10471]: file.c:650 ast_openstream_full: File digits/2n does not exist in any format
[Oct 20 16:32:56] WARNING[10471]: file.c:953 ast_streamfile: Unable to open digits/2n (format 0x4 (ulaw)): No such file or directory
[Oct 20 16:32:56] WARNING[10471]: file.c:650 ast_openstream_full: File vm-newx does not exist in any format
[Oct 20 16:32:56] WARNING[10471]: file.c:953 ast_streamfile: Unable to open vm-newx (format 0x4 (ulaw)): No such file or directory

Либо я чего-то не понимаю либо одно из двух...
#15 21.10.2011 08:04

Если не критично - просто скопируйте в en все что в ru Smile
_________________
P4 3.0 + 1Gb CentOS 5.5 Aster 1.8.5
Не люблю gui-сборки: натуральный продукт вкуснее.
#16 21.10.2011 09:11

Решение найдено, даже удивительно что никто носом не ткнул.... Хотя в документации правильных путей не нашел...
Так вот оказывается некоторые приложения, такие как VoiceMail() берут файлы озвучки не из /var/lib/asterisk/sounds, а ищут в /usr/share/asterisk/sounds
Туда кстати у меня из пакета поставилась и стандартная английская озвучка, для исправления ситуации просто удаляем папку
Code:
rm -r /usr/share/asterisk/sounds

И создаем на ее месте символическую ссылку
Code:
ln -s /var/lib/asterisk/sounds /usr/share/asterisk/sounds
#17 23.10.2011 09:16

Выглядит так как будто это проблема операционной системы (кстати что за ось?) Или вы ставили астериск в первый раз из пакета чужой сборки (rpm/pkg/etc). Я угадал?
_________________
Успехов!
#18 24.10.2011 07:45

Операционка Ubuntu Server x64 вроде 10, версия ядра 2.6.35-22-server.

В первом случае ставил из исходников.
#19 30.10.2011 17:56

RamonSantiago wrote:
Так вот оказывается некоторые приложения, такие как VoiceMail() берут файлы озвучки не из /var/lib/asterisk/sounds, а ищут в /usr/share/asterisk/sounds

у меня там не ищут, это только у вас так. по этой же причине никто носом вас так и не ткнул, так что не удивляйтесь. симлинк это костыль, а хотелось бы всетки первопричину найти. и устранить на корню.

_________________
Успехов!
#20 30.10.2011 19:27

путь как путь....

посмотреть чего в asterisk.conf в [directories] написано ?
#21 31.10.2011 12:42

Asterisk.conf
[directories]
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /usr/share/asterisk
astagidir => /etc/asterisk/agi-bin ;/usr/share/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk

Added after 1 minutes:

Единственная строка, которая ссылается в /usr/...
astdatadir => /usr/share/asterisk
#22 01.11.2011 05:10

ну вот эта строчка за это и отвечает, там же AGI скрипты лежат(только для них вы путь переписали а для остальных нет) и MusicOnHold исправь ее на:
astdatadir => /var/lib/asterisk

_________________
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk
#23 01.11.2011 12:01

Спасибо что разъяснили, попробую...
А в остальных приложениях типа Dial где пути к звуковым файлам указываются?