A voice controlled video conference

In this example, the desired behaviour for participants to be able to speak when they wish. A user's video application should start sending video when their audio application starts sending audio. No two video applications should aim to be sending at the same time, although some transient overlap can be tolerated.

#figure2095#
Figure: Unifiying Floor Control with CCCP

Applications:

There are hosts x and y, amongst others. It is assumed that session control messages are being sent, as in the example above. A typical exchange of messages may be as follows:
 <#2107#> (1, audio.send, x)xxxxx <#2107#>¯ (*,sm.local,x),(*,floor.master,x)xxx¯

<#2110#> From<#2110#>		 		<#2111#> To<#2111#>		 		<#2112#> Message<#2112#>
 
<#2113#> the user at x starts speaking.  Silence suppression cuts out, and the
audio tool starts sending audio data:<#2113#>
 
<#2114#> (1, audio.send, x) <#2114#>		<#2115#> (*,sm.local,x),(*,floor.master,x)<#2115#>
		<#2116#> MEDIA_STARTED audio x<#2116#>
 
<#2117#> ...this causes the sm to highlight the ``you are sending audio'' icon<#2117#>
 
<#2118#> it also causes the floor manager to report to the other floor
managers:<#2118#>
 
<#2119#> (1, floor.master,x)<#2119#>		<#2120#> (*, floor.master, *)<#2120#>		<#2121#> MEDIA_STARTED
audio x<#2121#>
 
<#2122#> and also it requests the local video tool to send video:<#2122#>
 
<#2123#> (1, floor.master,x)<#2123#>		<#2124#> (*, video.send, x)<#2124#>		<#2125#> START_SENDING
video <#2125#>
 
<#2126#> ...this causes the video tool to start sending<#2126#>
 
<#2127#> (1, video.send, x) <#2127#>		<#2128#> (*, sm.local, x),(*.floor.master, x)<#2128#>
		<#2129#> MEDIA_STARTED video x<#2129#>
 
<#2130#> ...which, in turn, causes the sm to highlight the ``you are sending video''icon<#2130#>
 

 
<#2131#> the user at x stops speaking.  Silence suppression cuts in, , and the
audio tool stops sending audio data<#2131#>
 
<#2132#> (1, audio.send, x)<#2132#>		<#2133#> (*,sm.local,x),(*,floor.master,x)<#2133#>
		<#2134#> MEDIA_STOPPED audio x<#2134#>
 
<#2135#> ...this causes the sm to de-highlight the ``you are sending audio'' icon<#2135#>
 
<#2136#> ...the session manager starts a timeout procedure before it will stop
sending video<#2136#>
 
...
 
<#2137#> a user at y starts sending audio and video data.<#2137#>
 
<#2138#> The local audio and video tools report this to the session manager:<#2138#>
 
<#2139#> (1,audio.recv,x)<#2139#>		<#2140#> (*,sm.local,x)<#2140#>		<#2141#> MEDIA_STARTED audio y<#2141#>
 
<#2142#> (1,video.recv,x)<#2142#>		<#2143#> (*,sm.local,x)<#2143#>		<#2144#> MEDIA_STARTED video y<#2144#>
 
<#2145#> ...as in previous example, sm highlights sender's name<#2145#>
 
<#2146#> Also y's floor manager reports what's happening:<#2146#>
 
<#2147#> (1, floor.master, y)<#2147#>		<#2148#> (*, floor.master,*)<#2148#>		<#2149#> MEDIA_STARTED
audio y<#2149#>
 
<#2150#> (1, floor.master, y)<#2150#>		<#2151#> (*, floor.master,*)<#2151#>		<#2152#> MEDIA_STARTED
video y<#2152#>
 
<#2153#> the local floor manager tells the local video tool to stop sending<#2153#>
 
<#2154#> (1, floor.master,x)<#2154#>		<#2155#> (*, video.send, x)<#2155#>		<#2156#> STOP_SENDING video<#2156#>
 
<#2157#> ...this causes the video tool at x to stop sending<#2157#>
 
<#2158#> (1, audio.send, x)<#2158#>		<#2159#> (*,sm.local,x),(*,floor.master,x)<#2159#>		<#2160#>
MEDIA_STOPPED video x<#2160#>
 
...