Difference between revisions of "Telephone system:shoutcast streams"
m (added party line (not really well tested)) |
(updated stream conference logic (they are not numbered anymore)) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | <onlyinclude>The most efficient way to have shoutcast streams as <abbr title="music on hold">MOH</abbr> is to set up a muted conference. This way, the fist connection will be made when the first listener joins, and no extra streams will be opened. | ||
+ | </onlyinclude> | ||
+ | |||
=== Synopsis === | === Synopsis === | ||
Line 10: | Line 13: | ||
The setup mentioned below will start one stream for the first caller, and will close it after the last caller leaves. | The setup mentioned below will start one stream for the first caller, and will close it after the last caller leaves. | ||
+ | {{StreamLinkTable | ||
+ | |stages=Saal Adams (13x1);s1,Saal Borg (13x2);s2,Saal Clarke (13x3);s3,Saal Dijkstra (13x4);s4,Saal Eliza (13x5);s5,Chaos West Bühne (13x6);s150,WikiPakaWG Esszimmer (13x7);s89,Open Infrastructure Orbit (13x8);oio | ||
+ | |formats=Audio;.mp3|types=Native;|typeCount=1 | ||
+ | |languages=;_native|languageCount=1 | ||
+ | |}} | ||
== implementation == | == implementation == | ||
Line 15: | Line 23: | ||
=== totally muted single stream === | === totally muted single stream === | ||
==== dialplan ==== | ==== dialplan ==== | ||
− | This sample is the | + | This sample is the 1300 to 1309, used for dialing in one of nine rooms when a conference is happening. |
When there currently is no event, the <abbr title="special information tone">SIT</abbr> will be played | When there currently is no event, the <abbr title="special information tone">SIT</abbr> will be played | ||
Line 21: | Line 29: | ||
<pre> | <pre> | ||
− | + | <!-- These are moderated muted conferences, which will give you the single MOH stream without moderator | |
− | |||
− | |||
− | |||
make sure moh is not set in the conference params, so we can set it here | make sure moh is not set in the conference params, so we can set it here | ||
also, don't set the enter and leave (global) sounds, since it will reconnect the stream --> | also, don't set the enter and leave (global) sounds, since it will reconnect the stream --> | ||
− | <action application="set" data=" | + | <!-- by default, play SIT to indicate the stream is not available --> |
− | <!--action application="set" data=" | + | <extension name="unavailable event" continue="true"> |
+ | <condition field="destination_number" expression="^130([0-9])$"> | ||
+ | <action application="set" data="event[0]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[1]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[2]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[3]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[4]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[5]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[6]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[7]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[8]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | <action application="set" data="event[9]=tone_stream://$${nl-sit}" inline="true"/> | ||
+ | </condition> | ||
+ | </extension> | ||
+ | |||
+ | <!-- classic example of numbered rooms --> | ||
+ | <!--extension name="event stream numbered"> | ||
+ | <condition field="destination_number" expression="^130([1-4])$"> | ||
+ | <action application="set" data="event[${1}]=shout://live.self.c3voc.de/S${1}_native.mp3" inline="true"/> | ||
+ | </condition> | ||
+ | </extension--> | ||
+ | |||
+ | <!-- actual conferences: just comment out the streams that are not available --> | ||
+ | <extension name="event stream"> | ||
+ | <condition field="destination_number" expression="^130([0-9])$"> | ||
+ | <action application="answer"/> | ||
+ | |||
+ | <!--vv list of conferences here vv--> | ||
+ | <action application="set" data="event[0]=shout://playerservices.streamtheworld.com/api/livestream-redirect/KINK.mp3" inline="true" | ||
+ | <action application="set" data="event[1]=shout://live.self.c3voc.de/c3lounge_native.mp3" inline="true"/> | ||
+ | <action application="set" data="event[2]=shout://live.self.c3voc.de/abchillgleis_native.mp3" inline="true"/> | ||
+ | <!--^^ list of conferences here ^^--> | ||
+ | <!-- conference_moh_sound is set earlier in this dialplan file --> | ||
+ | <action application="set" data="conference_moh_sound=${event[${1}]}" inline="true"/> | ||
<action application="conference" data="130$1@stream+flags{mute}"/> | <action application="conference" data="130$1@stream+flags{mute}"/> | ||
</condition> | </condition> | ||
Line 62: | Line 100: | ||
=== party line listening to the muted stream === | === party line listening to the muted stream === | ||
==== dialplan ==== | ==== dialplan ==== | ||
− | This sample is the | + | This sample is the 1391 to 1399, used for dialing in one of nine rooms when a conference is happening. |
When there currently is no event, the <abbr title="special information tone">SIT</abbr> will be played | When there currently is no event, the <abbr title="special information tone">SIT</abbr> will be played | ||
Line 69: | Line 107: | ||
<pre> | <pre> | ||
<extension name="event partyline"> | <extension name="event partyline"> | ||
− | <condition field="destination_number" expression="^ | + | <condition field="destination_number" expression="^139([0-9])$"> |
<action application="answer"/> | <action application="answer"/> | ||
<!-- This is an unmoderated conference, which will give you the single MOH stream | <!-- This is an unmoderated conference, which will give you the single MOH stream | ||
Line 76: | Line 114: | ||
<action application="conference_set_auto_outcall" data="loopback/130$1"/> | <action application="conference_set_auto_outcall" data="loopback/130$1"/> | ||
− | <action application="conference" data=" | + | <action application="conference" data="139$1@partystream+flags{mintwo}"/> |
</condition> | </condition> | ||
</extension> | </extension> | ||
Line 103: | Line 141: | ||
</pre> | </pre> | ||
− | [[Category:Telephony]] | + | [[Category:Telephony]][[Category:Telephone snippet]][[Category:FreeSWITCH]] |
Latest revision as of 19:59, 27 December 2021
The most efficient way to have shoutcast streams as MOH is to set up a muted conference. This way, the fist connection will be made when the first listener joins, and no extra streams will be opened.
Contents
Synopsis
ACKspace has several shoutcast streams you can dial in to. To see the list of streams, see the dialplan
Normally, the streams are put in a local stream.loc file, but this will cause FS to open all streams, even when there are no listeners. Since we have so many, this is not an option.
Also, when you set a MOH per user, this will open the same stream simultaneously for each caller.
The setup mentioned below will start one stream for the first caller, and will close it after the last caller leaves.
Audio | ||
---|---|---|
Native | ||
Saal Adams (13x1) | link | |
Saal Borg (13x2) | link | |
Saal Clarke (13x3) | link | |
Saal Dijkstra (13x4) | link | |
Saal Eliza (13x5) | link | |
Chaos West Bühne (13x6) | link | |
WikiPakaWG Esszimmer (13x7) | link | |
Open Infrastructure Orbit (13x8) | link |
implementation
totally muted single stream
dialplan
This sample is the 1300 to 1309, used for dialing in one of nine rooms when a conference is happening. When there currently is no event, the SIT will be played
The users are muted, but also will there never be a moderator, which causes the other callers to listen to MOH indefinitely.
<!-- These are moderated muted conferences, which will give you the single MOH stream without moderator make sure moh is not set in the conference params, so we can set it here also, don't set the enter and leave (global) sounds, since it will reconnect the stream --> <!-- by default, play SIT to indicate the stream is not available --> <extension name="unavailable event" continue="true"> <condition field="destination_number" expression="^130([0-9])$"> <action application="set" data="event[0]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[1]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[2]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[3]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[4]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[5]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[6]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[7]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[8]=tone_stream://$${nl-sit}" inline="true"/> <action application="set" data="event[9]=tone_stream://$${nl-sit}" inline="true"/> </condition> </extension> <!-- classic example of numbered rooms --> <!--extension name="event stream numbered"> <condition field="destination_number" expression="^130([1-4])$"> <action application="set" data="event[${1}]=shout://live.self.c3voc.de/S${1}_native.mp3" inline="true"/> </condition> </extension--> <!-- actual conferences: just comment out the streams that are not available --> <extension name="event stream"> <condition field="destination_number" expression="^130([0-9])$"> <action application="answer"/> <!--vv list of conferences here vv--> <action application="set" data="event[0]=shout://playerservices.streamtheworld.com/api/livestream-redirect/KINK.mp3" inline="true" <action application="set" data="event[1]=shout://live.self.c3voc.de/c3lounge_native.mp3" inline="true"/> <action application="set" data="event[2]=shout://live.self.c3voc.de/abchillgleis_native.mp3" inline="true"/> <!--^^ list of conferences here ^^--> <!-- conference_moh_sound is set earlier in this dialplan file --> <action application="set" data="conference_moh_sound=${event[${1}]}" inline="true"/> <action application="conference" data="130$1@stream+flags{mute}"/> </condition> </extension>
conference.conf.xml profile
For this to work, a separate conference profile needs to be used: It doesn't have a MOH set, so it can be overridden at the dial plan. Also, it doesn't have announcements sound set, so the stream doesn't reconnect after a user enters or leaves.
<profile name="stream"> <param name="domain" value="$${domain}"/> <param name="rate" value="32000"/> <param name="interval" value="20"/> <param name="energy-level" value="300"/> <param name="muted-sound" value="conference/conf-muted.wav"/> <param name="unmuted-sound" value="conference/conf-unmuted.wav"/> <param name="pin-sound" value="conference/conf-pin.wav"/> <param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/> <param name="caller-id-name" value="$${outbound_caller_name}"/> <param name="caller-id-number" value="$${outbound_caller_id}"/> <param name="comfort-noise" value="false"/> <param name="conference-flags" value="wait-mod"/> <param name="caller-controls" value="none"/> </profile>
party line listening to the muted stream
dialplan
This sample is the 1391 to 1399, used for dialing in one of nine rooms when a conference is happening. When there currently is no event, the SIT will be played
When the first user calls in, it will automatically add the streaming MOH conference, so that they can chat while the stream is playing on the background. It will stop the conference when the last (real) person hangs up.
<extension name="event partyline"> <condition field="destination_number" expression="^139([0-9])$"> <action application="answer"/> <!-- This is an unmoderated conference, which will give you the single MOH stream don't set moh in the conference params --> <action application="conference_set_auto_outcall" data="loopback/130$1"/> <action application="conference" data="139$1@partystream+flags{mintwo}"/> </condition> </extension>
conference.conf.xml profile
For this to work, a separate conference profile needs to be used: It doesn't have a MOH set, since it adds the MOH stream conference Also, it doesn't have announcements sound set, so the stream doesn't reconnect after a user enters or leaves.
<profile name="partystream"> <param name="domain" value="$${domain}"/> <param name="rate" value="32000"/> <param name="interval" value="20"/> <param name="energy-level" value="300"/> <param name="muted-sound" value="conference/conf-muted.wav"/> <param name="unmuted-sound" value="conference/conf-unmuted.wav"/> <param name="pin-sound" value="conference/conf-pin.wav"/> <param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/> <param name="caller-id-name" value="$${outbound_caller_name}"/> <param name="caller-id-number" value="$${outbound_caller_id}"/> <param name="comfort-noise" value="false"/> </profile>