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()

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