Asterisk 录音功能实现函数

Asterisk 源码分析(一)

              ——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():用于记录通话过程中录音的功能。
       语法:Monitor(ext,basename,flags)
                 ext:  用于指定改录音文件的格式,默认的将是wav文件
                 basename: 该录音文件的文件名
                 flags  : 。。。。。。。。。。。。

实例一:

  1. 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()
    当呼分机后,将在 “/var/spool/asterisk/monitor”目录下生成 "asterisk-help-in.wav"和"asterisk-help-out.wav"两个文件

实例二:指定录音路径    

复制代码
       exten => _x.,1,Answer()
       exten => _x.,n,Wait(1)
       exten => _x.,n,Monitor(wav,/root/asterisk-help)  ;这里还可以指定到录音到/root目录下(
好像不能录)
       exten => _x.,n,Dial(SIP/${EXTEN})
       exten => _x.,n,Hangup()
MixMonitor(); 不说明,不解释,看实例
实例一:
  1. 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()
    语音文件保存 在 “/var/spool/asterisk/monitor” 目录下 为 asterisk-help.wav

实例二:
  1. 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()

   还有其他参数需要研究!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章