PDA

Voir la version complète : [RESOLU] queues et conversion a MP3



sbeu
07/09/2015, 21h13
Bonjour à tous,
Une question:
J'ai une file d'attente (queue :heink:) et cette queue est paramétrée pour enregistrer les conversations en WAV.

J'aurais besoin d'exécuter un script qui convertit la conversation en mp3 une fois l'appel terminé.

Je souhaiterais connaître la meilleure façon de le faire. Jusqu'à présent je faisais un cron qui, chaque minute, convertissait tous les .wav du répertoire en mp3


# wav to mp3
cd /var/spool/asterisk/monitor
for i in *.wav; do
if [ -e "$i" ]; then
file=`basename "$i" .wav`
#lame -h -b 192 "$i" "$file.mp3"
sox -r 8000 -c 1 "$i" "$file.mp3"
fi
done

Cette solution ne fonctione pas, car si une conversation est en cours, un fichier wav existe dans le répertoire et ce fichier se convertit mal, car le wav est ouvert.

Donc je souhaiterais exécuter un script une fois que l'appel est terminé. Je sais exécuter un script dans le cas où c'est une conversation "normale", c'est à dire PAS dans une queue.

J'ai essayé ça:


exten => 500,1,Queue(support,wtTr)
exten => 500,2,System(/bin/sh /etc/asterisk/test.sh ${MONITOR_FILE} /var/spool/asterisk/monitor/mp3/{$MONITOR_FILE})


Mais la seconde ligne n'est pas exécutée.

J'espère avoir été clair.

Merci de votre aide.

quintana
08/09/2015, 12h31
Salut,

Il faut utiliser l'extension h.

++

sbeu
08/09/2015, 14h05
Merci beaucoup Quintana.
Dans l'extension h, je pourrai connaître quel fichier il faut convertir?
Car je dois convertir uniquement le fichier wav qui correspond à la communication qui vient de terminer, et pas TOUS les fichiers wav que je trouve. En effet si il y a des communications en cours et si je convertis TOUS les fichiers wav présents, alors que convertirais aussi les fichiers wav qui sont en cours de communication. Et je retomberai dans le même problème que le problème initial.

olppp
08/09/2015, 15h04
Bonjour,


les variables de la session sont passées à h, tu peux utiliser {$MONITOR_FILE}. Utilise plutôt la commande agi pour appeler un script externe.


A+

sbeu
08/09/2015, 15h33
Merci à tous les deux,
Je vais maintenant voir comment fonctionnent les appels vía AGI.

Reaper
14/09/2015, 14h07
Je vais coller une solution que j'ai utilisé dans le temps, on peut faire mieux mais bon.

En gros j'enregistre l'entrant et sortant dans les répertoires séparées, de plus je crée les sous dossiers avec ANEE-MOIS/JOUR

Par exemple 2015-09/01

Le fichier est APPELE-APPELANT-HH-MM-SS.mp3

Par exemple 0199967575-0888854284-15-52-55.mp3

La conversion est lancée par Mixmonotor j'ai pas besoin de l'extension h, mais la ligne est longue car j'ai du mettre l'ensemble d'opérations dedans.

A la fin je fais in chmod pour les droits, en sorte que le mp3 soit disponible pour le client en ftp.


J'ai également une petite fonctionnalité de Liste Blanche qui est très simple, si le numéro est dans la AstDB, nous n'allons pas enregistrer l'appel.
Pour importer les numéros, je lis un fichier txt avec un script bash, et je l'import dans la base.

Comment sont enregistrés les numéros dans txt:

999999999
888888888


Le script:

#!/bin/bash

/usr/sbin/asterisk -r -x "database deltree ListeBlanche"


/usr/bin/dos2unix /home/CLIENT/ListeBlanche.txt #Il faut convertir en format unix pour enlever les caracteres AINSI

while IFS= read -r line;do
fields=($(printf "%s" "$line"|/bin/cat -))
command /usr/sbin/asterisk -x "database put ListeBlanche ${fields[0]} 1"
command /bin/echo "database put ListeBlanche ${fields[0]} 1"
done < /home/CLIENT/ListeBlanche.txt



extensions.conf

[general]

DIRNAMESORTANT=/home/CLIENT/Sortant
DIRNAMEENTRANT=/home/CLIENT/Entrant


[Entrant]
exten => _X.,1,Gotoif($["${DB(ListeBlanche/${CUT(CUT(SIP_HEADER(To),@,1),:,2)})}" = "1"]?dial_direct)
exten => _X.,n,Set(DIRNAME1=/home/CLIENT/Entrant/${STRFTIME(${EPOCH},,%Y-%m/%d)})
exten => _X.,n,Set(FILENAME1=${CUT(CUT(SIP_HEADER(To),@,1), :,2)}-${CALLERID(num)}-${STRFTIME(${EPOCH},,%H-%M-%S)})
exten => _X.,n,System(/bin/mkdir -p ${DIRNAME1} && /bin/chmod -R 777 ${DIRNAMEENTRANT}/${STRFTIME(${EPOCH},,%Y-%m)})
exten => _X.,n,MixMonitor(${DIRNAME1}/${FILENAME1}.wav,b,/usr/bin/lame --quiet "${DIRNAME1}/${FILENAME1}.wav" "${DIRNAME1}/${FILENAME1}.mp3" && /bin/rm -rf ${DIRNAME1}/${FILENAME1}.wav && /bin/chmod -R 777 ${DIRNAME1}/${FILENAME1}.mp3 && /bin/chown CLIENT:CLIENT -R ${DIRNAMEENTRANT}/${STRFTIME(${EPOCH},,%Y-%m)})
exten => _X.,n,Dial(SIP/IPBX/${CUT(CUT(SIP_HEADER(To),@,1),:,2)})
exten => _X.,n(dial_direct),Dial(SIP/IPBX/${CUT(CUT(SIP_HEADER(To),@,1),:,2)})


[Sortant]
exten => _X.,1,Gotoif($["${DB(ListeBlanche/${CALLERID(num)})}" = "1"]?dial_direct)
exten => _X.,n,Set(DIRNAME2=/home/CLIENT/Sortant/${STRFTIME(${EPOCH},,%Y-%m/%d)})
exten => _X.,n,Set(FILENAME2=${EXTEN:1}-${CALLERID(num)}-${STRFTIME(${EPOCH},,%H-%M-%S)})
exten => _X.,n,System(/bin/mkdir -p ${DIRNAME2} && /bin/chmod -R 777 ${DIRNAMESORTANT}/${STRFTIME(${EPOCH},,%Y-%m)})
exten => _X.,n,MixMonitor(${DIRNAME2}/${FILENAME2}.wav,b,/usr/bin/lame --quiet "${DIRNAME2}/${FILENAME2}.wav" "${DIRNAME2}/${FILENAME2}.mp3" && /bin/rm -rf ${DIRNAME2}/${FILENAME2}.wav && /bin/chmod -R 777 ${DIRNAME2}/${FILENAME2}.mp3 && /bin/chown CLIENT:CLIENT -R ${DIRNAMESORTANT}/${STRFTIME(${EPOCH},,%Y-%m)})
exten => _X.,n,Dial(SIP/FOURNISSEUR/${EXTEN},,g)
exten => _X.,n(dial_direct),Dial(SIP/FOURNISSEUR/${EXTEN},,g)


En terme de charge, je dois avoir une trentaine d'appels en simultané et elle est faible.

Cpu(s): 0.8%us, 0.4%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1026908k total, 1007168k used, 19740k free, 228588k buffers
Swap: 1324024k total, 552k used, 1323472k free, 667184k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20289 root 20 0 695m 31m 8836 S 6.0 3.1 713:40.07 asterisk

Bon voila si c'est utile pour quelqu’un un jour.

sbeu
06/10/2015, 16h56
En utilisant l'extension h, j'appelle un script .sh avec AGI qui réalise la conversion du wav au mp3, et ça marche nickel.
Une petite remarque sur les utilitaires de conversion:

1) LAME: en utilisant LAME, j'ai des problèmes sur les PETITS fichiers wav. La conversion ne se fait pas, ou se fait mal, c'est à dire que le début du son n'est pas converti.
2) SOX: aucun problème en utilisant sox, je recommande.