Greetings community,
I’m running into difficulties trying to capture the live audio stream from an EAGI script on file descriptor 3. While the file descriptor appears to be open, there is no data written.
I set up a custom context like so in extensions_custom.conf
:
[custom-plugin]
exten => s,1,Answer()
exten => s,n,EAGI(plugin.py)
exten => s,n,Hangup()
I have it configured in the admin panel’s custom destination, and then I have an inbound route that uses it as a custom destination. The script gets correctly executed when an incoming call is received, and I can e.g. log or hangup from the script. So far so good.
But if I try to read on file descriptor 3:
audio = os.fdopen(3, 'rb')
data = audio.read(4096)
It’ll hang forever. I’ve tried to make it nonblocking, but that did not help.
I’m calling from a regular phone line into a voip line provided by OVHCloud, and I’ve registered the line on this server using freePBX.
Things I’ve tried:
- run strace on the process id. I can clearly see it hanging on the read:
sudo strace -e trace=read,write -p 154109 strace: Process 154109 attached read(3, # <- hangs at this point
- trying Record() instead of EAGI. It correctly records the audio data.
- tried a bash script that reads from fd 3, same behavior
- read the logs, both by running
asterisk -rvvv
and by tailing/var/log/asterisk/full
, no errors at runtime
I’m using asterisk v22.0.0 with freepbx v17.0.
I do see some errors when starting asterisk, e.g.:
loader.c: Error loading module cannot open shared object file: No such file or directory
loader.c: Error loading module 'format_mp3.so': /usr/lib/asterisk/modules/format_mp3.so: cannot open shared object file: No such file or directory
loader.c: Error loading module 'res_pjsip_phoneprov_provider.so', missing dependency: res_phoneprov
It is similar to: EAGI: can't read file descriptor 3, any read blocks forever , which has no solution.
What other things could I check, how could I debug this further?
Thank you in advance