web-dev-qa-db-ja.com

アスタリスクWaitForSilenceは無音を検出しません

ダイヤルプランを使用してWaitForSilenceで録音を再生し、相手が話し終わるか、メッセージがボイスメールに残るまで待機するようにしています。しかし、5秒間の沈黙を待つようには見えません。私が話しているとしても、それはまだ沈黙を検出します。

私のAELダイヤルプランはこれです:

100 => {
        Answer();
        WaitForSilence(5000,2,60);
        AGI(agi://127.0.0.1/playmessage,${CALLID});
        AGI(agi://127.0.0.1/saytext,"Goodbye.");
        Hangup();
}

出力

== Using SIP RTP CoS mark 5
       > Channel SIP/twilio-0000006e was answered
    -- Executing [100@makeCall:1] Answer("SIP/twilio-0000006e", "") in new stack
    -- Executing [100@makeCall:2] WaitForSilence("SIP/twilio-0000006e", "5000,2,60") in new stack
    -- Waiting 2 time(s) for 5000 ms silence with 60 timeout
    -- Exiting with 5000ms silence >= 5000ms required
    -- Exiting with 5000ms silence >= 5000ms required
    -- Executing [100@makeCall:3] AGI("SIP/twilio-0000006e", "agi://127.0.0.1/playmessage,45") in new stack
    -- Playing '/var/nam/data/outgoing/60' (escape_digits=#) (sample_offset 0)
       > 0x7f2179cf7990 -- Probation passed - setting RTP source address to 54.172.61.251:18920
    -- Playing '/var/nam/data/tts/9eccb3f2ed77972157becdfbbac7232c' (escape_digits=1#) (sample_offset 0)
    -- <SIP/twilio-0000006e>AGI Script agi://127.0.0.1/playmessage completed, returning 4
  == Spawn extension (makeCall, 100, 3) exited non-zero on 'SIP/twilio-0000006e'

AMD()を追加しても、常にすべてをマシンとして検出し、それでも実際には無音をリッスンしません。アスタリスクが沈黙が何であるかを知らないという私の構成に何か問題がありますか?

それとも、沈黙がメッセージの再生を開始するのを待つ方法を誤解していますか?

1

よろしくお願いします。最後に、通話を録音すると役立つかもしれないとどこかで読んだので、Monitor()アプリケーションを使い始めました。最後に、アスタリスクはafter録音を再生するまでリスニング無音ではなかったことがわかりました最初。これは、Monitor()がAsteriskによって最初に再生されるまで録音を開始せず、反対側が話し始めたときではないことに気付いたときにわかりました。

それを修正するために、私は待つ前に黙祷をしました:

        100 => {
                Answer();
//              Monitor(wav,"playback-${CALLID}",m);
                Playback(silence/1);
                WaitForSilence(1000,1,60);
                AGI(agi://127.0.0.1/playmessage,${CALLID});
                AGI(agi://127.0.0.1/saytext,"Goodbye.");
                Hangup();
        }

Monitor()がコメントアウトされた私の単純なコードの上に表示されます。上記は問題なく留守番電話でも機能します。

2

沈黙を待つとAMDの両方が重要な音が出ない期間を待つ

そのため、チャンネルには常にサウンドがあります。

最も可能性の高い理由-品質の悪いライン。

沈黙のしきい値を変更することで、それを修正してみることができます。

AMDの場合は最後のパラメータです

AMD([|initialSilence][|greeting][|afterGreetingSilence][|totalAnalysisTime][|minimumWordLength][|betweenWordsSilence][|maximumNumberOfWords][|silenceThreshold])

新しいバージョンでは、dsp.confでしきい値を変更することもできます

その値を十分に高くすると、沈黙は常にあると考えられます。だからあなたはそれを実験する必要があります。

0
arheops