Asterisk 源码分析(一)
Asterisk 录音可以用monitor,mixmonitor 两个app.区别是 monitor录单通道,mixmonitor 录双通道,
过程:调用monitor时指定录音文件名字,格式,挂载到channel中,到双方接续开始时 调用ast_read 读取 rtp 流, 如果协议栈支持 回调,则调用协议栈提供的read函数, 如sip. sip_read函数,sip_read内部 调用 rtp 接口函数,sip_rtp_read,sip_rtp_read又调用rtp 引擎函数 ast_rtp_read ,ast_rtcp_read,接收帧数据,ast_rtp_read 函数 则调用 recvfrom udp sockt 函数读取udp包并解析挂在到channel的rtp 结构中。
最后,__ast_read函数调用 ast_writestream把帧数据写到录音文件中,,,结束。。
Monitor():用于记录通话过程中录音的功能。
实例一:
- exten => _x.,1,Answer()
exten => _x.,n,Wait(1)
exten => _x.,n,Monitor(wav,asterisk-help)
exten => _x.,n,Dial(SIP/${EXTEN})
exten => _x.,n,Hangup()
实例二:指定录音路径
MixMonitor(); 不说明,不解释,看实例
实例一:
- exten => _x.,1,Answer()
exten => _x.,n,Wait(1)
exten => _x.,n,MixMonitor(asterisk-help.wav)
exten => _x.,n,Dial(SIP/${EXTEN})
exten => _x.,n,Hangup()
实例二:
- exten => _x.,1,Answer()
exten => _x.,n,Wait(1)
exten => _x.,n,MixMonitor(asterisk-help.wav,b) ;加了个b参数,就是通话过后才录音,没有录制振铃音
exten => _x.,n,Dial(SIP/${EXTEN})
exten => _x.,n,Hangup()