Pull to refresh

Comments 26

А чем по крону не устраивает делать то же самое? По ночам конвертить спокойно и складывать куда надо.

И прав не надо давать, лишняя лазейка же, тем более права даются на такое как chown chmod, что равно сильно простому запуску под рутом по возможностям.
В том то и дело, что многие делают по крону.
Кого то устраивает. Но, во первых, есть сервисы, которые и по ночам принимают звонки. Во вторых, в данном случае, запись разговора готова сразу, и не на следующий день.
Лучше бы OPUS использовали, он гораздо сильнее понизил бы битрейт для голоса, без слышимых артефактов.
тогда встанет вопрос — чем слушать opus. А mp3 поддерживает любой плеер.
OPUS поддерживается во многих аудиопроигрывателях и почти во всех популярных браузерах.
ключевое слово «почти».
Если бы использовался OPUS, то в названии статьи было бы OPUS.
Как Вы могли прочесть, в названии нет ни слова про opus. Это говорит о том, что о нем рассуждать неуместно. Когда буду использовать opus? напишу про opus — надеюсь ответ ясен.

В своё время, когда появился OPUS, его представляли как «убийцу mp3», прошло время, и как видим, этого не случилось.

А что касается поддержки opus в VoIP — смею Вас уверить, огромное количество железок его не поддерживает до сих пор, причем это не SOHO, а промышленные решения. А если брать в расчет софтовые решения, не все бросились обновлять отлаженную систему для поддержка данного кодека. И еще один существенный минус, вытекающий из этого, это то, что конечные решения (телефонные аппараты), в большинстве своём не поддерживают opus, а это ведет к лишнему транскодированию, что чревато лишней нагрузкой.
Вы, в целом, правы: MP3 будет еще долго использоваться для музыки, т.к. при 320 кбит/с он не так уж и плох, но при низких битрейтах подчистую проигрывает практически всему (OPUS, Vorbis, AAC). Если даже AAC не сказать, чтобы прямо повсеместно используется, то OPUS до этого еще дальше.
Про железо и VoIP вы опять правы, но поддержка OPUS есть в софтофонах, и он обеспечивает отличное качество речи при 20 кбит/с. Если вы транскодируете PCM в MP3 только для архива, то, по моему мнению, OPUS тут подошел бы больше, чем MP3.

В качестве примера, послушайте 48 кбит/с MP3 и 48 кбит/с OPUS.
Поверьте мне, по роду своей деятельности, я достаточно осведомлен о кодеках, и opus в том числе.
Но, в контексте данной статьи:
1. opus-tools нет в растпространенных репах
2. не факт, что накинув заголовок и поменяв расширение на .wav это съедят плееры.

Что касается прослушки для сравнения, давайте оставим это меломанам. Тем более, здесь речь идет о записи телефонного разговора, в котором качество и так оставляет желать лучшего.
И самое главное, если в данном примере, заменить mp3 на opus, то не думаю что размеры файлов будут отличаться более чем на 1-2%.
Тут главная задача была, уменьшить размер. И не создать геморой уменьшив размер еще чуть больше.

А почему бы не дать право за запуск от рута конкретного скрипта, а в нем уже понижать права там, где это зачем-то нужно?
Тогда ему можно будет с чистой совестью выставить права типа 700. По-моему, это будет безопаснее, чем выдавать рутовые права на chmod, chown и rm.
На самом деле вы правы. sudo анохранизм от прошлых версий. на самом деле, sudo можно и не применять в данном случае, так как файлы создаются с владельцем asterisk, и для того чтоб их обработать прав достаточно и без sudo.
Если вам не обязательно использовать nice и ionice, тогда вообще можно обойтись без sudo.
если процессор многоядерный, то можно обойтись без nice, так как lame использует только одно ядро, а ffmpeg вообще не грузит, так как не перекодирует.
Я имел в виду нечто иное. Частичный отказ от sudo — это хорошо, но у вас, к примеру, у пользователя есть рутовый chown, а значит, по сути, есть и полный рутовый доступ. Я же предлагаю разрешить в sudoers запускать от рута только определенный скрипт, в котором вы пропишете все необходимые действия и который, разумеется, не будет доступен для редактирования пользователю asterix.
если не использовать ionice, то sudo можно убрать совсем.
ну и Ваш вариант совсем не плох.
Или, как вариант, для chown сделать в sudoers:
asterisk ALL = NOPASSWD: /bin/chown asterisk. /var/spool/asterisk/monitor/*
Сделал по инструкции, но для FreePBX 12.0.57 (CentOS 6.5 x64)
rpmforge установил для своей версии, но почему-то не устанавливалось с опцией --disablerepo=commercial-addons
[root@pbx ~]# rpm -Uhv pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
Retrieving pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
Preparing… ########################################### [100%]
1:rpmforge-release ########################################### [100%]
[root@pbx ~]# yum --disablerepo=commercial-addons install ffmpeg lame
Loaded plugins: fastestmirror, kmod

Error getting repository data for commercial-addons, repository not found

вобщем установил ffmpeg по тупому — yum install ffmpeg lame
в принципе скрипт работает, конвертирует.
Подскажите, как модифицировать скрипт, чтобы он нормализовал уровень звука?
Возможно во FreePBX 12 другие репы.
Подредактируйте строку с lame, чтоб сделать нормализацию.
кстати перестали воспроизводиться записи из веб-интерфейса UCP, ошибка «Media URL could not be loaded.» Вероятно из-за переименовывания исходных файлов. Приходится скачивать и слушать.
это да, это уже надо править в коде панели freepbx.
хотелось бы конкретики
Не понял? что значит «хотелось бы конкретики»?
Ищите на предмет «Content-Type» для отдаваемых файлов записи, и меняйте.
Я хочу чтоб у меня не ломался заложеный функционал freepbx, т.е. воспроизводились файлы из веб-интерфейса. Если вы делаете tutorial, то напишите полные действия, а не то, что вы описываете общими фразами.
Ищите на предмет «Content-Type» для отдаваемых файлов записи, и меняйте.

Где искать? Что искать? На что менять?
Понятия не имею что Вам надо искать.
Почитайте заголовок, где черным по белому написано 2.11. Там нет ни слова про FreePBX 12.
Туториал — это не значит, что подойдет каждому. Это значит только то, что в нём написано, а не то, что Вам хочется.
Может быть, если бы у Вас стояло 2.11, я бы еще мог посмотреть и подсказать.
А так, попробуйте решить сами, а потом отпишитесь об этом — будет польза.
Разобрался, оказывается зависит от браузера. В Фаерфоксе воспроизведение «поломалось», но в Хроме воспроизводится нормально. Извините за назойливость.
Тесты показали, что Opus на 8kbps практически не хуже чем pcm 8Khz/16bit на 128kbsp, и при этом в 16 раз меньше. Достаточно затем его переименовать в .wav и либо напрямую скормить браузеру, либо через тег audio.
В самом Asterisk поддержка Opus не нужна, если не нужно гонять голос в этом формате, а достаточно только хранить.

FFMpeg изначально не понимает opus, поэтому его необходимо собрать из сырцов ( http://www.betweendots.com/topic/59-install-ffmpeg-on-centos-automated-script/ ) вместе с libopus

Скрипт mixmon-opus.sh, который вставить в Post Call Recording Script через /etc/asterisk/scripts/mixmon-opus.sh ^{CALLFILENAME}.^{MIXMON_FORMAT}

#!/bin/bash
LOWNICE="/bin/nice -n 19 "
PATH='/oth/monitor/'
PATH2='/var/www/html/monitoropus/'
FULLNAME=${1}
FULLNAME=${FULLNAME/$PATH/}
ORIGINAL=${FULLNAME/.wav/}
WAVFILE=${PATH}${FULLNAME}
OPUSFILE=${PATH}${ORIGINAL}.opus
OPUSFILE2=${PATH2}${ORIGINAL}.wav

if [ "$2" ]; then
LOWNICE="/bin/nice -n 19 /usr/bin/ionice -c3"
echo ${FULLNAME}
fi
${LOWNICE} /usr/bin/ffmpeg -loglevel quiet -y -i ${WAVFILE} -acodec libopus -ab 8000 ${OPUSFILE}
#${LOWNICE} /usr/bin/ffmpeg -y -i ${WAVFILE} -acodec libopus -ab 8000 ${OPUSFILE}
/usr/bin/test -e ${OPUSFILE} && /bin/mv -f ${OPUSFILE} ${OPUSFILE2} && /usr/bin/test -e ${OPUSFILE2} && /bin/rm -f ${WAVFILE}
if [ ! "$2" ]; then
echo ${ORIGINAL}.wav ${2}>>/var/log/asterisk/opus.txt
else
echo ${ORIGINAL}.wav >>/var/log/asterisk/opusbatch.txt
fi

Обратите внимание, что ionice работает только из под root, поэтому используется только когда мы запускаем процесс ручного перекодирования (существует второй аргумент при запуске). При запуске из под пользователя asterisk ionice не используется. Не забудьте поправить пути. Чтобы не запутаться где оригинальный wav, а где в формате opus, перекодированные переносятся в другое место, так что потребуется изменить вашу CDR/CRI систему.

Чтобы конвертировать существующие записи, достаточно вызвать
find /oth/monitor -name '*.wav' | parallel --gnu /etc/asterisk/scripts/mixmon-opus.sh {} 1 

либо чтобы это работало в фоне даже после отключения ssh сессии:
nohup find /oth/monitor -name '*.wav' | parallel --gnu /etc/asterisk/scripts/mixmon-opus.sh {} 1 >/dev/null 2>&1 &


Обратите внимание, что используется утилита parallel, которую нужно сначала поставить, и которая запускает столько копий, сколько ядре процессора, что ускоряет перекодирование в 4-8 раз.
FreePBX 14 — позволяет скачать, но не позволяет проиграть, ошибка "/bin/sox FAILS: WAV file encoding MP3 is not supported". Есть идеи, как обойти, не влезая в код (они внедрили подпись по GPG и матерятся, если какой-то файл изменился)? Как я понимаю, будет достаточно оторвать вызов перекодировщика при попытке проиграть файл в браузере, а где это сделать?
Разобрался — его скрипты понимают, если бэкенд отдает сразу mp3 (вот только все равно вызывается sox с конвертацией в sln48 — нафига?!), как следствие, оставил от вашего скрипта половину, которая перекодирует, и стащил из соседнего поста вызов mysql с изменением файла в базе. Спасибо.
Sign up to leave a comment.

Articles

Change theme settings