Video Conference Recording on FreeSWITCH

FreeSWITCH is a telephony platform which is capable of performing video conferencing, in an MCU like fashion.

Note: FreeSWITCH is not a Live Assist Product and as such the contents of this document are not supported.  The directions given are intended to be a starting point for configuration and are not given as a recommendation for a Production System.

Installing freeSWITCH with recording

If Recording is required the mod_av module is required to be built.  This can be done on the Debian OS following instructions found here:

https://freeswitch.org/confluence/display/FREESWITCH/FreeSWITCH+1.6+Video

Below is a snapshot of the installation from the above page:

Install Dependencies:

apt-get install -y --force-yes freeswitch-video-deps-most

Compiling:

# because we're in a branch that will go through many rebases it's

# better to set this one, or you'll get CONFLICTS when pulling (update)

git config --global pull.rebase true


# then let's get the source

cd /usr/src/

git clone https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch.git

cd freeswitch.git

./bootstrap.sh -j

./configure
 
Enable mod_av:
perl -i -pe 's/#applications\/mod_av/applications\/mod_av/g' modules.conf
make

make install

make cd-sounds-install

make cd-moh-install

make samples
 
Kernel Settings
echo "net.core.rmem_max = 16777216" /etc/sysctl.d/vid.conf

echo "net.core.wmem_max = 16777216" >> /etc/sysctl.d/vid.conf

echo "kernel.core_pattern = core.%p" >> /etc/sysctl.d/vid.conf
Conference Configuration:
The layout of the Conference can be altered by creating a definition.  Below is an example.
 
Edit:  /usr/local/freeswitch/autoload_configs/conference.conf.xml
<profile name="video-mcu">

      <param name="domain" value="$${domain}"/>

      <param name="rate" value="48000"/>

      <param name="channels" value="2"/>

<param name="interval" value="20"/>

<param name="energy-level" value="200"/>

<!-- <param name="tts-engine" value="flite"/> -->

<!-- <param name="tts-voice" value="kal16"/> -->

      <param name="muted-sound" value="conference/conf-muted.wav"/>

      <param name="unmuted-sound" value="conference/conf-unmuted.wav"/>

<param name="alone-sound" value="conference/conf-alone.w av"/>

<param name="enter-sound" value="tone_stream://%(200,0,5 00,600,700)"/>

<param name="exit-sound" value="tone_stream://%(500,0,3 00,200,100,50,25)"/>

      <param name="kicked-sound" value="conference/conf-kicked.wav"/>

      <param name="locked-sound" value="conference/conf-locked.wav"/>

      <param name="is-locked-sound" value="conference/conf-is-locked.wav"/>

      <param name="is-unlocked-sound" value="conference/conf-is-unlocked.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="video-floor-only|minimize-video-encoding|rfc-4579|livearray-sync|video-muxing-personal-canvas"/>

<param name="video-mode" value="mux"/>

      <param name="video-layout-name" value="3x3"/>

      <param name="video-layout-name" value="group:g"/>

      <param name="video-canvas-count" value="3"/>

      <param name="video-super-canvas-label-layers" value="true"/>

      <param name="video-canvas-size" value="1920x1080"/>

<param name="video-canvas-bgcolor" value="#333333"/>

      <param name="video-layout-bgcolor" value="#000000"/>

      <param name="video-codec-bandwidth" value="1mb"/>

      <param name="video-fps" value="15"/>

</profile>
Editing the Dial Plan:
The following records the inbound Video Stream into the Conference into a file in the /tmp/ folder. This is a mechanism for invoking mod_av.
 
 
    <extension name="cdquality_stereo_conferences">

      <condition field="destination_number" expression="^(35\d{2})$">

    <action application="export" data="nolocal:absolute_codec_string=OPUS,PCMU,PCMA,VP8"/>

<action application="set" data="enable_file_write_ buffering=false"/>

    <action application="export" data="execute_on_answer=record_session /tmp/${strftime(%Y%m%d_%H%M%S)}_${caller_id_number}_${destination_number}.mp4"/>

    <action application="answer"/>

        <action application="conference" data="test@video-stereo"/>

</condition>

    </extension>

Access Control List

Calls originating from FCSDK will need the 'Outbound Gateway' configured to direct calls into freeSWITCH.  The ACL will need to be configured to allow access to the dialplan.

 

For further details on FreeSWITCH configuration refer to: FCSDK /FreeSWITCH Interop Guide.