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 : 。。。。。。。。。。。。
實例一:
-
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()
實例二:指定錄音路徑
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(); 不說明,不解釋,看實例
實例一:
-
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()
還有其他參數需要研究!