user information passed to VC synthesizer: list of participants participant info: IP address/hostname application/supported audio video formats available bandwidth(upstream and downstream) membership permissions(invitation only; any join; private/public) additional application components needed (FTP/chat/whiteboard) recipes if (participant[x].vidFormat != participant[y].vidFormat) -> search for transcoder along path || nearest path if participant[*].app = realplayer -> request RealServer from VC service if (IP multicast/end system multicase not supported) -> unicast -> max downstream bw = sum(participate[x].txmtdatarate) if (VC apps also include FTP and text chat and whiteboard) -> define filters and flows (i.e. load balance? lower priority on FTP) interface from VC synthesizer to services synthesizer sends to basic video conference service: membership permissions supported audio video formats of participants video conference service returns: servers available synthesizer sends to multicast service: list of participant IP addresses + server IP addresses multicast service returns: overlay topology or NULL if multicast not possible synthesizer sends to transcoder service: topology, participants' video/audio formats supported transcoder service returns: transcoders info: location and capabilities synthesizer sends to diffserv service: QoS requirements for all the flows diffserv service returns: flow ID's synthesizer returns to user: appropriate handles(i.e. group ID, data entry points)