Multiconferencia video con Appconference 2.0

El otro día Elio nos hablaba de Appconference 2.0 el nuevo plugin que permitirá a los usuarios de Asterisk multiconferencia con vídeo.

Ya es posible bajarse Appconference 2.0 RC1 desde Sourceforge, descomprimimos el tarball, compilamos e instalamos:

tar -xzvf appconference-2.0rc1.tar.gz
cd appconference-2.0rc1
make
sudo make install

Reiniciamos Asterisk, y si todo ha ido bien en el CLI deberíamos poder ver las opciones que tenemos con el comando help conference:

asteriskPBX*CLI> help conference 
         conference debug  enable debugging for a conference
         conference drive  pairs two members to drive VAD-based video switching
  conference drivechannel  pairs two channels to drive VAD-based video switching
           conference end  stops a conference
          conference kick  kick member from a conference
   conference kickchannel  kick channel from conference
          conference list  list members of a conference
          conference lock  locks incoming video to a member
   conference lockchannel  locks incoming video to a channel
          conference mute  mute member in a conference
   conference mutechannel  mute channel in a conference
    conference play sound  play a sound to a conference member
       conference restart  restart a conference
   conference set default  sets default video source
conference set defaultcha  sets default video source channel
    conference show stats  show conference stats
   conference stop sounds  stop sounds for a conference member
          conference text  sends a text message to a member
 conference textbroadcast  sends a text message to all members in a conference
   conference textchannel  sends a text message to a channel
        conference unlock  unlocks conference
        conference unmute  unmute member in a conference
 conference unmutechannel  unmute channel in a conference
    conference video mute  mutes video from a member
conference video mutechan  mutes video from a channel
  conference video unmute  unmutes video from a member
conference video unmutech  unmutes video from a channel
   conference viewchannel  switch channel in a conference
    conference viewstream  switch view in a conference

No hay ficheros de configuración y las conferencias se crean al momento desde el dialplan:

Dialplan syntax: Conference(ConferenceName/Flags/Priority[/VADSTART/VADCONTINUE])
 
    * ConferenceName: Whatever you want to name the conference
    * Flags: please see Flags.txt for a comprehensive list of dialplan flags
    * Priority: Currently ignored; was to be a "speaking priority" so a 
        higher priority caller could "override" others.
    * VADSTART: Optional: "probability" to use to detect start of speech.
    * VADCONTINUE: Optional: "probability" to use to detect continuation 
        of speech.

Tenemos a nuestra disposición una serie de flags que pasamos como parámetro al comando conference:

Mute/no receive options:
'C' : member starts with video muted
'c' : member starts unable to receive video
'L' : member starts with audio muted
'l' : member starts unable to receive audio
 
Speex preprocessing options (right now app_conference does preprocessing only for Zaptel members):
'V' : enable speex preprocessing Voice Activity Detection 
'D' : enable speex preprocessing De-noise
'A' : enable speex preprocessing Automatic Gain Control
'T' : member connects through Zaptel, so speex preprocessing should be enabled
 
DTMF options:
'X' : enable DTMF switch: video can be switched by users using DTMF. Do not use with 'S'.
'R' : enable DTMF relay: DTMF tones generate a manager event
If neither 'X' nor 'R' are present, DTMF tones will be forwarded to all members in the conference
 
Moderator/video switch options:
'M' : member is a "moderator". When a moderator quits, all members are kicked and the conference is disabled.
'S' : member accepts VAD controlled video switching.  Do not use with 'X'.
 
Miscellaneous:
't' : member accepts text based control messages.  The messages are described in a separate document
'N' : Assume that the member starts off with camera disabled.
 
Future development (these are not implemented yet):
'x' : marked member.  We plan to change the behavior so that when ALL moderators quit, all members that are marked will get kicked. Other members in the conference are not affected.

Además tenemos gran variedad de comandos en el CLI para controlar, depurar y hacer pruebas con las conferencias:

*CLI> conference list <conference name>
 
 
- conference debug: enable debugging for a conference
  usage: conference debug <conference_name> [ on | off ]
 
- conference end: stops a conference
  usage: conference end <conference name>
 
- conference kick: kick member from a conference
  usage: conference kick <conference_name> <member id>
 
- conference kickchannel: kick channel from a conference
  usage: conference kickchannel <conference_name> <channel>
 
- conference list: list members of a conference. If no conference is specified, all conferences are listed
  usage: conference list {conference_name}
 
- conference lock: locks incoming video to a member
  usage: conference lock <conference name> <member id>
 
- conference lockchannel: locks incoming video to a channel
  usage: conference lockchannel <conference name> <channel>
 
- conference mute: mute member in a conference
  usage: conference mute <conference_name> <member id>
 
- conference mutechannel: mute channel in a conference
  usage: conference mutechannel <channel>
 
- conference play sound: play a sound to a conference member
  usage: conference play sound <channel-id> <sound-file> [mute]
  If mute is specified, all other audio is muted while the sound is played back.
 
- conference restart: kick all users in all conferences
  usage: conference restart
 
- conference set default: sets default video source
  usage: conference set default <conference name> <member>
  use a negative value for member if you want to clear the default
 
- conference set defaultchannel: sets default video source channel
  usage: conference set defaultchannel <conference name> <channel>
 
- conference show stats: show conference stats
  usage: conference show stats
 
- conference text: sends a text message to a member. Depends on the member's channel capabilities.
  usage: conference text <conference name> <member> <text>
 
- conference textbroadcast: sends a text message to all members in a conference
  usage: conference textbroadcast <conference name> <text>
 
- conference textchannel: sends a text message to a channel
  usage: conference textchannel <conference name> <channel> <text>
 
- conference unlock: unlocks incoming video
  usage: conference unlock <conference name>
 
- conference unmute: unmute member in a conference
  usage: conference unmute <conference_name> <member id>
 
- conference unmutechannel: unmute channel in a conference
  usage: conference unmutechannel <channel>
 
- conference video mute: mutes video from a member
  usage: conference video mute <conference name> <member>
 
- conference video mutechannel: mutes video from a channel
  usage: conference video mutechannel <conference name> <channel>
 
- conference video unmute: unmutes video from a member
  usage: conference video unmute <conference name> <member>
 
- conference video unmutechannel: unmutes video from a channel
  usage: conference video unmutechannel <conference name> <channel>
 
- conference viewchannel: switch video for a channel in a conference
  usage: conference viewchannel <conference_name> <dest channel> <src channel>
 
- conference viewstream: switch video for a member a conference
  usage: conference viewstream <conference_name> <member id> <stream no>
 
- conference drive: drive VAD video switching of destination member using audio from source member
  usage: conference drive <conference name> <source member> [destination member]
  If destination member is missing or negative, break existing connection
 
- conference drivechannel: drive VAD video switching of destination channel using audio from source channel
  usage: conference drivechannel <conference name> <source channel> [destination channel]
  If destination channel is missing, break existing connection

Por otro lado tenemos el comando videoswitch desde el CLI help videoswitch:
Actualización:todas las referencias a videoswitch han cambiado a conference

asteriskPBX*CLI> help videoswitch
        videoswitch debug  enable debugging for a videoswitch
         videoswitch kick  kick member from a videoswitch
         videoswitch list  list members of a videoswitch
         videoswitch mute  mute member in a videoswitch
  videoswitch mutechannel  mute channel in a videoswitch
   videoswitch show stats  show videoswitch stats
       videoswitch unmute  unmute member in a videoswitch
videoswitch unmutechannel  unmute channel in a videoswitch
  videoswitch viewchannel  switch channel in a videoswitch
   videoswitch viewstream  switch view in a videoswitch
 
asteriskPBX*CLI> help videoswitch debug 
usage: videoswitch debug <videoswitch_name> [ on | off ]
       enable debugging for a videoswitch
 
asteriskPBX*CLI> help videoswitch kick
usage: videoswitch kick <videoswitch_name> <member no>
       kick member form a videoswitch
 
asteriskPBX*CLI> help videoswitch list
usage: videoswitch list {<videoswitch_name>}
       list members of a videoswitch or list of videoswitches if no name
 
asteriskPBX*CLI> help videoswitch mute
usage: videoswitch mute <videoswitch_name> <member no>
       mute member in a videoswitch
 
asteriskPBX*CLI> help videoswitch unmute
usage: videoswitch unmute <videoswitch_name> <member no>
       unmute member in a videoswitch
 
asteriskPBX*CLI> help videoswitch mutechannel
usage: videoswitch mute <videoswitch_name> <channel>
       mute channel in a videoswitch
 
asteriskPBX*CLI> help videoswitch unmutechannel
usage: videoswitch unmute <videoswitch_name> <channel>
       unmute channel in a videoswitch
 
asteriskPBX*CLI> help videoswitch viewchannel
usage: videoswitch viewchannel <videoswitch_name> <dest channel> <src channel>
       channel <dest channel> will receive video stream <src channel>
 
asteriskPBX*CLI> help videoswitch viewstream
usage: videoswitch viewstream <videoswitch_name> <member no> <stream no>
       member <member no> will receive video stream <stream no>

Aquí tenéis un ejemplo para empezar a hacer pruebas, llamamos a la extension 2300 y nos pondrá el usuario en la conferencia "test" permitiendo al usuario cambiar la fuente de video mediante DTMF:

exten => 2300,1,Videoswitch(test/RX)
 
This puts the user into a conference 'test' with the options RX.
 
The options are the same as app_conference, except:
 
X - enable the caller to switch video stream using DTMF
R - relay the DTMF to the management interface
C - Mute video - no video from this client
c - No Receive video - send no video to this client
L - Mute audio - no audio from this client
l - No Receive audio - send no audio to this client
M - member is moderator - when they leave everyone else is kicked

Así que ya sabéis, Appconference 2.0 está a la vuelta de la esquina y la conferencia de vídeo es algo que está bastante solicitado, con que si eres de los que no pueden esperar es buen momento ya para empezar a hacer pruebas. Aunque debemos recordar que sólo es una release candidate y toda está documentación podría cambiar Wink

Comentarios

No encuentro videoswicth

Pude compilar sin problema el appconference 2.0 RC1 para CentOS 5 con Asterisk 1.4.9, cuando reinicio Asterisk en el CLI no tengo ningun resultado con:

asterisk*PBX> help videoswitch

Tambien busque dentro de mis modulos y no encuentro la app_videoswitch, donde la puedo encotrar ??, para probar el appconference cuanto antes.Cool

Ya no existe videoswitch

Hola Roger,

ya no existe videoswitch, así que la última parte del artículo ha quedado un poco desfasada. Todas las referencias a videoswitch han cambiado a conference. Por tanto todas las opciones las puedes ver usando help conference.

Saludos

Muchas gracias por la

Muchas gracias por la respuesta tan rápida. Déjame ver si entendi bien ya no existe ninguna de las aplicaciones de videoswitch, todo lo puedo hacer directamente con los comandos del conference, ya sea desde el CLI o con los las flags que le pace a la app Conference(NAME/FLAGS/...) no? Solo con los los pulsos DTMF cambio la fuente de información de Video directamente y todo lo demás. Bueno muchas gracias de nuevo,

Salu2.

Me pillaste en el momento justo

Pues la verdad es que me pillaste en el momento justo y la respuesta si que fué rápida.

Puedes manejar el conference, cambiando las fuentes de vídeo por DTMF, hay otra opción llamada VAD (Voice Activity Detection) que va cambiando de fuente de vídeo en función de la persona que está hablando en ese momento.

Más abajo si sigues los comentarios y sabes un poco de inglés puedes ver como lo hizo Guido.

Saludos.

videoswitch

Sorry if I don't speak spanish. i'm italian. I could only speak english.

When I digit "help videoswitch" i don't see nothing. the installation of appconference is finished correctly but the help menu for videoswitch is not present. Only for "conference" i can see the help options. Help me please! I can't have a videoconference....only audioconference for the extension that i create........

Thanks everybody and sorry for my bad english.... ;-)

Documentation outdated

Seem that this documentation was a little bit outdated, in 2.0 RC1:

Merged app_videoswitch code from Neil Stratford.
All "videoswitch" references changed to "conference".

So your sintax was already correct, you where using S flag in Moderator/video switch options (accepts VAD controlled video switching) but you could use your phone DTMF tones to switch video streams using RX flags as follows:

exten => 9999,1,Conference(conferenza/RX)

Let us know if this worked for you.

appconference

I don't have a phone....I have a softphone (eyebeam...X-lite)....how can i use DTMF tones to switch video streams ????

Thanks everybody very much!

No problem with eyeBeam

Try dialing on eyeBeam, this should send DTMF digits to Asterisk. If you can access and navigate through voicemail, using eyeBeam keypad, then you are done Asterisk is receiving DTMF digits from eyeBeam correctly.

If not working, try to change DTMF settings:

Dial ***7469 (send)

Once you get the advanced options menu up, filter first for DTMF.

Find the Force Inband DTMF entry, and change the value accordingly.

Then filter for 2833. Find the RTP 2833 enabled line, and change this value accordingly.

Setting both to 0 will result in your sending SIP INFO DTMF.

Switch video

Hello! thank you!!! now is all ok!!! perfect! with three clients, i could jump from one to the other if i digit #1, #2 or #3 (the temporal order of start of services for the client rilevated from server asterisK).

I read in an internet page that eyebeam support only 4 video simultaneusly. Is it true? Is there another softphone that support more video simultaneusly?

And how can i see all video by clients simultaneusly without use of DTMF? I read something about VAD...is it good for you? Does Eyebeam support VAD selection of the video stream?

THANKS A LOT FOR ALL!!! 

Good job

Hi! First of all, I don't know much about eyeBeam since I haven't used it. So you should better ask eyeBeam support. Wink

This is not a problem if you switch from your phone or using video stream VAD selection.

AFAIK this application switch video streams so you are only receiving one video stream simultaneously.

VAD stands for Voice Activity Detection (AKA RTP Silence Suppression), so if you set up this option you will receive the videostream associated with the person who's talking.

If you use VAD, you should know that would be better if your channels support DTX(silence detection/discontinuous transmission), although it's not strictly necessary should be more efficient.

VAD

'S' : member accepts VAD controlled video switching.

Do not use with 'X'.

So, or I use exten => 9999,1,Conference(conferenza/RX) like now

or I use exten => 9999,1,Conference(conferenza/S[/VADSTART/VADCONTINUE])

?

Thank you !!!!!!!!!!!

for VAD

For VAD you should use:

exten => 9999,1,Conference(conferenza/S)

VADSTART and VADCONTINUE are optional and can be used to adjust settings if you are experiencing problems (maybe no RX support in channel) detecting start of speech. If you enable VAD switching (S) you cannot switch using DTMF (X option)

The end

Finally I configure my asterisk with VAD. It's all ok and more easy for the clients to use than DTMF because video switch automatically if the client is speaking (it switchs after 10 seconds of speak). My last question is: you say that appconference only switch streams. So, also if eyebeam support only 4 video comunications simultaneusly, I could have much more video comunications simultaneusly because eyebeam see them always like one !????? is it true ???

Anyway, thanks a lot for everything!!! Without you I were lost! ;-)

bye !!!

Good news

Hi! Glad to hear it's working.

Yes! You could have more than four speakers, appconference will deliver only one simultaneous video stream, so eyeBeam will receive only one videostream. This unique videostream can be switched either using DTMF or using VAD.

So, with appconference you can have in the conference as many speakers as you want this is not limited by eyeBeam, this will be limited by your Asterisk Server, or network capacity.

Notice that most IP phones receive only one videostream simultaneously, but it's appconference who handles simultaneous videostreams not phone/softphone.

You're welcome. Hope to see you again.Wink

AppConference on AsteriskNow

Hi! I'm come back ;-) I have a question: could I also install appconference on a AsteriskNow system based? How can I do that? Like I did for the Asterisk that I installed on my Ubuntu 7.10 manually? Thank you very much !

This should not be a problem

Hi Guido,

you also have to install Appconference manually, however using Asterisknow should not be a problem.

How to install appconference on asterisknow

Ok. So if it's possible, how can i do that? Sorry but I don't know what I can do... I installed asterisknow by cd iso image on a pc that act as server. I see now the "AsteriskNow Console Menu". Here, I can select only these voices:UPDATE, CONSOLE, RESTART, SHUTDOWN, REBOOT and QUIT. And if I enter on server by a client browser by ip address of the server, I can't install nothing of external like appconference by the asterisknow GUI. Do you know how can I install the appconference plugin like I did with asterisk on ubuntu 7.10? Thank you very much! You're very kind...like ever! Thanks a lot!

p.s. i have just confidured asterisknow by the GUI to have simple audio conference and it's all ok.

You should allow root access

Hi! login with ssh into AsteriskNow if your AsteriskNow ip is (i.e. 192.168.1.100), from another linux box type:

ssh admin@192.168.1.100

And then enter your admin password. Then where you are in the shell, install as usual. On Windows you can use Putty if you want.

YES !

YES! It's ok! Perfect! All installed by ssh command! Thank you!! You save me another time! I will tell you wich differences there are if appconference is istalled on asterisk or on asterisknow. I have to do some trials. Thank you! ;-)

Ok

You are welcome Guido.

You will be an Appconference expert. Wink

Appconference, AsteriskNOW, IAX

Hi! After some trials, I note that appconference with VAD on AsteriskNOW run a little bit better than on asterisk. The good thing is that with AsteriskNOW you can do everything that you with asterisk but in less time. There is only one problem (but I think that it's the same on asterisk): two people that are speaking in the same room and appconference give problems (echo, don't switch with VAD)............it's a bad thing because two people on the same room couldn't have a videoconference with other people in other rooms..........have you ever note that? Finally, i would ask to you if do you know if there is a softphone that support IAX protocol (for VIDEO)....i don't find nothing for iax video........but iax support video........maybe in future.....? THANK A LOT......YOU'RE THE BEST.....;-)

True

Yes there are still some problems as you noticed. This is only a release candidate and I think it will be improved in future versions.

IAX now support video using videosupport=yes and codec=theora/h264 in the iax.conf file. If you are interested in IAX video checkout the IAXclient project, this guys are making a very good job:

http://iaxclient.wiki.sourceforge.net

Another step...ASTERISKNOW over PEN DRIVE

HI! Do you know how can I install asterisknow iso over a pen drive? Thank you very much! Wink

Really don't know much

Really I don't know much about this topic. Asterisknow is based on rPath and uses conary packaging.

I think could be easier install other distro on a Pendrive and then install Asterisk and Asterisk GUI, more or less could be the same. Here you can choose.

There is not much info on how to install Asterisk or rPath distros on a pendrive.

Another idea could be setup a virtual machine and install an AsteriskNow VmWare image or mountable FileSystem thus degrading a little bit more Asterisk Performance due to VM requirements.

There is a distro called AstLinux, that also fits well on devices without huge space available.

another problem with appconference...

Hi! I have another problem with appconference. Using X-lite or Eyebeam and activating audio codec iLBC and video codec h.263, or h263+ or h264, appconference doesn't show any video stream and send this warning:

"chan_sip.c:3670 sip write: asked to transmit frame type 64, while native formats is 0x400
(ilbc) (1024) read/write=0x400 (ilbc)(1024)/0x400 (ilbc)(1024)"

I found this: http://www.moythreads.com/wordpress/2007/09/02/mixing-audio-overflow-in-...

but i want to ask you if you know something about this appconference incompatibility. Thanks a lot!

didn't know

Hi! Guido.

Seems to be a buffer overflow. I didn't know about this problem.

Maybe somebody has posted a bug as this is a critical problem.

Thanks to you for letting us know.

Are you still using 2.0 RC1?

Notice that on 26 February Appconference 2.0.1 was released with many bug fixes, you can find it on Sourceforge site. If you are still using 2.0 RC1, you should consider upgrading before you continue your testing.