无法保存名称为当前时间的录制文件

时间:2014-06-19 09:31:19

标签: asterisk voip audio-recording

我正在使用星号11.9.0并尝试录制用户语音但无法保存用户录音,其名称为当前时间(2014-06-19 14:40:04.wav) 我的代码

[record]
exten => _X.,1,NoOp(----------Record-----------)
exten => _X.,n,Answer()
exten => _X.,n,set(__START=${CDR(start)})
exten => _X.,n,Playback(hello-world)
exten => _X.,n,Wait(1)
exten => _X.,n,Record(${START}:wav)
exten => _X.,n,Wait(1)
exten => _X.,n,Hangup()

我的cli节目

 Executing [4759500@record:5] Record("DAHDI/i1/8826093338-18fe", "2014-06-19 14:40:04:wav") in new stack
    -- <DAHDI/i1/8826093338-18fe> Playing 'beep.gsm' (language 'yes')
[Jun 19 14:40:07] WARNING[19525]: file.c:1181 ast_writefile: No such format '40:04:wav'
[Jun 19 14:40:07] WARNING[19525]: app_record.c:320 record_exec: Could not create file 2014-06-19 14
    -- Executing [4759500@record:6] Wait("DAHDI/i1/8826093338-18fe", "2") in new stack
    -- Executing [4759500@record:7] Hangup("DAHDI/i1/8826093338-18fe", "") in new stack

我认为星号在&#34;之后搜索文件格式:&#34;所以带有当前时间的文件名会产生问题。有没有办法将当前时间保存为录制的文件名。提前致谢。

4 个答案:

答案 0 :(得分:2)

你可以这样做:

Record(${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}.wav)

答案 1 :(得分:0)

你有正确的想法。您需要使用文件系统友好字符替换时间中的“:”。你可以用两种方法之一做到这一点;一个是使用带有SED的SHELL流程来完成工作。或者,您可以使用AST中的REPLACE命令。

以下代码示例未经测试。您需要阅读包含的链接并进行调整。我希望这能帮到你。

[record]
exten => _X.,1,Verbose(2,----------Record-----------)
 same => n,Answer()
 same => n,set(__START=$[REPLACE(:,${CDR(start)}),-])
 same => n,Playback(hello-world)
 same => n,Wait(1)
 same => n,Record(${START}.wav)
 same => n,Wait(1)
 same => n,Hangup()

请注意,自Ast 1.2以来,用于分隔录制格式的“:”将替换为“。”。

推荐阅读:

答案 2 :(得分:0)

不要在wav文件之前使用逗号。如果要使用当前日期时间保存文件,请使用此变量${STRFTIME(${EPOCH},,%d-%m-%Y %H:%M:%S)}.wav

答案 3 :(得分:-1)

您使用的文件名不含空格,否则星号解析不正确。

你在wav(格式)之前也使用过逗号