Воспроизвести аудиофайл из Freeswitch после того, как вызов соединен - PullRequest
0 голосов
/ 06 марта 2020

Я инициирую вызов из браузера WebRT C и SIP-клиента и хочу воспроизвести файл .wav с помощью endless_playback после того, как вызов соединен с другой стороной через PTSN. Я попробовал две вещи, ни одна из которых не работает.

a) Использование плана набора

<action application="endless_playback" data="the path of wav file"/> //option 1
<action application="bridge" data="the call info"/>
<action application="endless_playback" data="the path of wav file"/> //option 2

Проблема в том, что в варианте 1 файл воспроизводится, но вызов никогда не соединяется, а в варианте 2 файл воспроизводится после зависания принимающего вызова.

b) Использование сценария LUA

local TheSound = "the path of the wav file"

if (session:ready() == true) then

    session:execute("playback", TheSound)

end

Скорее всего, это сработает, но это не сработало, потому что мне нужно выполнить воспроизведение после того, как произошел мост.

Я думаю, мне нужно изменить строку сценария LUA на следующий псевдокод

listen for call connected event and then

    session:execute("playback", TheSound)

Как я могу это сделать?

1 Ответ

0 голосов
/ 08 марта 2020

Я нашел рабочее решение, используя uuid_broadcast

Шаг 1: в диалплан добавьте эту строку непосредственно перед мостом

<action application="export" data="nolocal:execute_on_answer=lua somescript.lua"/>
<action application="bridge" data="the bridge info"/>

Обратите внимание, что если вы устанавливаете значение переменной перед мостом и необходимо получить к ней доступ из скрипта lua после моста, обязательно добавьте эту строку:

<action application="export" data="thevariable=${thevariable}"/>

Шаг 2: в файле somescript. lua, вам нужно сначала определить uuid вызова, а затем вы можете транслировать звук на этот вызов и даже выбрать, на каком этапе вы воспроизводите файл:

local theuuid = session:getVariable('uuid')

api = freeswitch.API()

local thesoundcast = "uuid_broadcast "..theuuid.."pathofsoundfile.wav aleg"
api:executeString(thesoundcast)

И вуаля.

...