SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
XMeeting Graphical User Interface
           Ivan Guajana
                SWITCH




           December 2005 - February 2006
Table of Contents

Introduction
                            3
Goals
                                   4
Implementation
                          4
   Main Window
                          4

   Inspectors
                           5

   On Screen Display (OSD)
              6

   Video View
                           9

   Fullscreen mode
                      9

   Picture-in-Picture
                  10

   Miscellanea
                         11

Results
                                12
Future Work
                            12
Appendix A - Command Reference
         13
Appendix B - Functions Reference
       14
   XMInspectorController
               14

   XMOnScreenControllerWindow
          14

   XMOnScreenControllerView
            14

   XMOpenGLUtilities
                   15

   IGPopupView
                         15

Appendix C - Compatibility
             16


                                 2/16
Introduction
XMeeting1 is an open source video-conferencing client for the Mac OS X operating system
which enables users to establish and receive calls using the H.323 protocol (SIP support is
planned). The development status of XMeeting as of this project’s begin was alpha, mean-
ing that a great effort has gone into making the underlying libraries and functionalities work
and much less into the user interface, which was comprehensive but not very user-friendly.

The software is laid out as in the following schema:




                          User Interface (Obj-C, Cocoa)


                              Cocoa/Objective-C Layer


                              XMeeting Bridge Layer (C)


                       OPAL (C++)                         PWlib (C++)



Starting at the bottom we have the OpenH323 libraries, which are responsible for every-
thing which has to do with network protocols. A bridge layer, written in C, allows the com-
munication layer to interact with the higher layers, where audio/video management and
user interaction take place. The scope of this project is the grey box.




1   http://xmeeting.sourceforge.net/

                                             3/16
Goals
This project is aimed at implementing a graphical user interface (GUI) and several basic
functionalities for XMeeting. The goal is to provide the user with a pleasant, easy-to use,
yet powerful user interface complying Apple’s Human Interface Guidelines.

Along the interface redesign, a fullscreen mode complete with picture-in-picture capability
has been implemented.




Implementation
With the exception of the underlying communication libraries PWLib, OPAL (from the
OpenH323 project) and the bridge, XMeeting is written in Objective-C, using the Cocoa
framework. OpenGL and GLUT libraries as well as Apple’s CoreVideo were used to pre-
sent the video streams to the user.

The idea was to design a user interface which contained only the most useful controls and
put everything else away. Then provide convenient ways to access other functionalities.
Thus an on-screen display has been developed along with an inspector manger. The fol-
lowing sections describe a little more in-depth each part of the new UI.




                              XMeeting’s main user interface.



Main Window
Compared to the previous user interface, the main window’s layout is dramatically simpli-
fied. Addition and support modules are not displayed into it anymore, but are now inte-
grated into one of the two inspectors. The main window contains only one module, which
is swapped on request.

Currently there are two main modules: XMNoInCallModule and XMInCallModule, which
are shown respectively before and during a call. The window’s size is automatically ad-
justed to fit the module, which is responsible of returning its preferred size to the window
controller.


                                           4/16
The gatekeeper registration status is now encoded with colors using semaphore-like icons:

             
 means that there is no network connection, thus no gatekeeper registration was
         
     possible

             
 means that no GK registration took place, but it’s still possible to establish calls
         
     by entering IP addresses

             
 XMeeting successfully registered with the GK



To have the location popup button fit into the user interface style, a custom subclass of
NSPopupButton, called IGPopupView, has been added. The name doesn’t comply with
XMeeting name schema because it comes from another project (IGDocks2).

Inspectors
Because almost all the modules have been removed from the main interface, an alterna-
tive way of showing them had to be found. The adopted solution is to implement an in-
spector controller (called XMInspectorController), which manages an utility NSPanel. It is
fully dynamic in the sense that it can be given any number of modules during the initializa-
tion phase and the panel will show an NSSegmentedControl to switch between them, tak-
ing care of resizing itself and hide/show the resizing widget as needed.




                                           The Inspector utility panel.



Two XMInspectors are currently used in XMeeting and they are called Tools (accessed
through the main interface and from the Windows menu) and Inspector (only accessible
from the Windows menu). The ‘Inspector’ inspector contains all modules which are sup-
posed to provide the user with information. Examples are the call history, statistics, and
the new info module, whose goal is to present basic parameters such as GDS number, IP
address and status.



2   A freeware dock switcher utility available at http://cgi.ethz.ch/~guajanai/IG/works.php?what=igd

                                                       5/16
The ‘Tools’ inspector is designed to accommodate modules, which offer further functionali-
ties or configuration options to the user. Among these there are the XMLocalAudioVideo-
Module,in future the XMDialPad module and other. This inspector is directly accessible
from the main interface because it is also used to setup the camera settings and select a
video source. Given its importance, there are convenient shortcuts to it. For instance, in
the self-view area, clicking inside the video or the “No Video” picture brings up the XMLo-
calAudioVideoModule allowing the user to switch video sources.

On Screen Display (OSD)




                           On Screen Display for Audio/Video calls.

The goal of the OSD is to give user access to a given set of functionalities directly from the
video view, allowing her to use them on both the windowed and the fullscreen modes.


                              NSView




                                                               button
                    XMOnScreenControllerView
                   NSArray* buttons                            Name
                   drawRect                                    Tooltips
                                                               Icons
                                                               PressedIcons
                                                               IsPressed
                                                               CurrentStateIndex
                                                               Targets
                                                               Selectors
                                                               Rect
             XMInCallOSD            XMAudioOnlyOSD




                              On Screen Display class hierarchy.

Instead of drawing the OSD into the NSView using OpenGL, a more complex approach
and flexible approach has been taken. The OSD is split into two parts: a transparent win-
dow (XMOnScreenControllerWindow), which is drawn on top of the view and a subclass of
NSView (XMOnScreenControllerView) containing the logic to manage the OSD. In this
way, it’s easy to animate the opening/closing of the OSD using different effects like fade in/
out, move in/out and so on. Currently only fading and rolling effects are implemented, but
it’s easy to add other ones.




                                             6/16
NSWindow




                             XMOnScreenControllerWindow
                            NSArray* buttons
                            openWithE!ect:
                            closeWithE!ect:


                               XMOnScreenControllerWindow.



One can add/remove/insert buttons or separators into the OSD by using the provided
methods or implement pre-made subclasses which are displayed according to specific
needs. The XMInCallOSD and XMAudioOnlyOSD are two examples of the second ap-
proach. They are presented to the user according to the availability of the video stream. An
advantage of having subclasses of XMOnScreenControllerView is the ability to provide
methods to set the state of particular buttons from outside, which can be useful when a
button should modify another button’s state or a keyboard shortcut is used and the but-
ton’s state is not automatically updated.



   XMOnScreenControllerWindow instance




       Instance of and XMOnScreenControllerView subclass

                             Anatomy of the On Screen Display



Each button is defined by an NSMutableDictionary. Multi-state buttons are handled by us-
ing NSArrays for every state-related attribute. To clarify, here’s the example of the
fullscreen button, which is a two-state button and includes four icons:




                                            7/16
Key                             Value                        Type

  Name                          “Fullscreen”                   NSString*

  Tooltips                      “Enter fullscreen mode”,       NSArray of NSString*
                                “Exit fullscreen mode”

  Icons                         fullscreen_large.tif,          NSArray of NSImage*
                                windowed_large.tif

  PressedIcons                  fullscreen_large_down.tif,     NSArray of NSImage*

                                windowed_large_down.tif

  Selectors                     “goFullScreen”, “goWin-        NSArray of NSString*
                                dowed”

  Targets                       XMOSDVideoView in-             NSArray of NSString*
                                stance, XMOSDVideoView
                                instance

  CurrentStateIndex             0 (default)                    NSNumber encapsulating
                                                               an integer

  IsPressed                     NO                             NSNumber encapsulating
                                                               a BOOL

                           NSDictionary keys representing a button.



The ‘Tooltips’ key is not currently used, but might be usefuls in the future. To conveniently
create a suitable NSMutableDictionary* for a button, one can use the following method:

- (NSMutableDictionary*)createButtonNamed:(NSString*)name
                               
    tooltips:(NSArray*)tooltips icons:(NSArray*)icons 
                               
    pressedIcons:(NSArray*)pressedIcon
   
    
    
                               
    selectors:(NSArray*)selectors 
 
     
    
    
                               
    targets:(NSArray*)targets 

     
    
    
    
                               currentStateIndex:(int)currentIdx;



When drawing, the entries in each array at index CurrentIndexState are picked. On mouse
down, the IsPressed variable is set to YES, causing the icon in the PressedIcon array to
be used for drawing. On mouse up, IsPressed is set again to NO and the current state in-
dex is incremented with the formula

               CurrentStateIndex = (CurrentStateIndex + 1) % [Icons count]

where [Icons count] returns the number of icons contained in the array, corresponding to
the number of states available for the button.


                                               8/16
Video View
The video view is the area of the user interface where video is rendered. It is implemented
using OpenGL, allowing for a great deal of flexibility, as it will be shown in the Picture-in-
Picture section. Basically the incoming video stream is transformed into an OpenGL tex-
ture using CoreVideo and the result is mapped to a polygon. This process is repeated for
each incoming frame. If the user chooses to see her local video at the same time, the
same applies to the second video stream, which is rendered into a separate polygon.

The displacement, scaling and rotation of the polygons are completely arbitrary, allowing
for different Picture-in-Picture modes and animations in-between.

The implemented video view, called XMOSDVideoView, contains also the logic to display/
dismiss the on-screen display. This is done by adding a tracking rectangle to the view it-
self, make sure to resize it along with the view, and enabling mouseEntered/mouseExited
events. This triggers the OSD when the user enters the view with the mouse. For the
fullscreen view and to improve the behavior, an NSTimer has been introduced, which is
responsible to watch for mouse movements inside the view. If the mouse remains in the
same place for more than 1 second, the OSD is dismissed. If it’s moved, then the OSD
appears again.

Fullscreen mode
For the implementation of the fullscreen mode, a window as large as the main screen is
created, the system menu bar and the dock are hidden and the current video view is put
into it with NSWindow’s setContentView: method. Using this approach we avoid several
problems related to OpenGL and event handling. First of all it is not necessary to create a
second OpenGL context for the fullscreen view, because we just re-use the existing one.
Secondly, we get event handling for free, because it’s implemented into the NSWindow
class.

Switching between windowed and fullscreen mode is just a matter of moving the video
view to the corresponding window. In XMOSDVideoView the viewDidMoveToWindow and
removeFromSuperview delegate methods were implemented, thus allowing automating
setup / clean up of the tracking rectangles needed for the OSD.




                                            9/16
Picture-in-Picture




                             The classic Picture-in-Picture mode.

This feature leverages OpenGL for the implementation of XMOSDVideoView. Thanks to
the graphics library, indeed, a lot of interesting effects and scene set ups are possible. To
handle local and remote video positions in the scene, as well as (virtual) camera position
and orientation, a couple of data structures were introduced, along with convenience
methods to instantiate them. These are defined into XMOpenGLUtilities.h and are:

     •    Vector3:

                A simple struct containing 3 float values, to store x, y and z coordinates

     •    Camera:

                A data structure containing everything needed for the GLUT function
                glLookAt() to work. This function is
                responsible for placing the camera
                into the 3D space and orientating it
                towards a point. It needs a location
                in space (eye), a point to look at
                (center) and a vector defining the
                camera’s banking (upVector).

     •    Placement

                A struct encapsulating a polygon
                position and orientation in space.
                Contains also a boolean variable to
                enable/disable reflection. It is used
                to define where and how the video
                should be rendered in the 3D
                space.


                                            10/16
•    Scene

               An higher-level struct containing two Placement structs (localVideo and
               remoteVideo placements) and one Camera struct. The whole scene is de-
               scribed by the information contained in it.



Three Picture-in-Picture modi have been implemented: classic, side-by-side and iChat-like.
Each one of them is simply represented by a Scene struct filled with the correct values.
                                     During rendering, the struct pointed by current-
                                     PinPMode* is used and the parameters are applied
                                     using glLookAt() for the camera and a combination
                                     of glScale, glTranslate and glRotate for other poly-
                                     gons.

                                      Switching between PinP modes is just a matter of
                                      having the currentPinPMode pointer to reference
                                      the desired Scene struct. To give the user feedback,
                                      it is suggested to use multi-state buttons in the on-
                                      screen display.

                                    Animation between PinP modes can be easily im-
                                    plemented. At this time, a basic linear interpolation
                                    between PinP modes is present. The trick is to set
                                    up an NSAnimation object and a callback to update
                                    a temporary Scene struct step-by-step from the cur-
rentPinPMode to the next one. The current implementation could be enhanced by having
the animations happen along paths instead of straight lines, which may result in intersec-
tions between polygons.

The classic Picture-in-Picture mode includes also drag and drop functionality to displace
the local video rectangle anywhere within the view.

Miscellanea
Other, more subtle changes have been made to XMeeting:

• the beautiful application icon, kindly donated to the project by SWITCH, has been de-
  signed by a free-lancer

• the icons for the main interface and the preferences window

• the compilation process has been made smoother for those who like to download the
  source code and compile everything on her own.




                                          11/16
Results
The result of this project is a first beta version of XMeeting, featuring a brand new user in-
terface, which should make it easy to use the software as well as provide the more ad-
vanced users with all the features they need.

The low-level part of XMeeting, which is where incoming video is decoded and outgoing
video is encoded and packetized need still a bit of work to improve compatibility with a
wide range of end points, but it is coming along nicely, thanks to the work of Hannes Frie-
drich3 , who is the main developer behind XMeeting.

This version of XMeeting runs on any PowerPC-based Macintosh with Mac OS X 10.4 or
newer. Although the source will compile as Universal Binary (make sure to check the ‘Intel’
option in the build settings of all three targets), the resulting application will have problems
on Intel-based Macintosh systems, probably due to the different byte ordering.




Future Work
XMeeting has a lot of potential, but it is not yet ready for prime-time. Greater compatibility
with video conference endpoints must be achieved and many improvements can be made
on both the user interface and the underlying libraries.

Possible new features are for example the integration of CoreVideo/CoreImage filtering for
incoming and outgoing video, tooltips for the on-screen display and superposition of status
icons on the video view, which would allow the user to see when she or her partner is
muted as well as other useful information.

On the other hand, SIP support is for sure one of the most requested features, as well as
far end control.




3   hannesf@ee.ethz.ch

                                             12/16
Appendix A - Command Reference



                  Gatekeeper           Show Tools
                  registration
                                            Self view
                     status




                  Location selection             Call
                                         Address Book




                                                Show Inspector

                                                        Show Tools
       Toggle
 Picture-in-Picture                                  Mute / Unmute
                                                                     Hangup




     Toggle Fullscreen
                                  Picture-in-Picture
                                        mode




                                        13/16
Appendix B - Functions Reference
XMInspectorController
//Class methods
+ (XMInspectorController *)instanceWithModules:(NSArray*)m
andName:(NSString*)name;
+ (XMInspectorController *)instanceWithName:(NSString*)name;
+ (void)closeAllInspectors;

//Actions
- (IBAction)changePage:(id)sender;

//Get&Set
- (void)setModules:(NSArray*)m;
- (NSString*)name;
- (void)setName:(NSString*)newName;

//Init
- (id)initWithModules:(id)mod andName:(NSString*)name;

//Other
- (void)currentModuleSizeChanged:(id)sender;
- (void)show;
- (void)close;



XMOnScreenControllerWindow
enum OpeningEffects {

   RollInFromBottomBorderEffect,

   FadeInEffect,

   NoEffect
};

enum ClosingEffects {

   RollOutToBottomBorderEffect,

   FadeOutEffect
};
- (void) openWithEffect:(int)_effect;
- (void) closeWithEffect:(int)_effect;



XMOnScreenControllerView
//Managing buttons
- (void)addButton:(NSMutableDictionary*)newBtn;
- (void)addButtons:(NSArray*)newButtons;
- (void)insertButton:(NSMutableDictionary*)btn atIndex:(int)idx;
- (void)removeButton:(NSMutableDictionary*)btn;
- (void)removeButtonAtIndex:(int)idx;




                                         14/16
//Creating buttons
- (NSMutableDictionary*)createButtonNamed:(NSString*)name
tooltips:(NSArray*)tooltips icons:(NSArray*)icons
pressedIcons:(NSArray*)pressedIcons selectors:(NSArray*)selectors
targets:(NSArray*)targets currentStateIndex:(int)currentIdx;

//Get&Set
- (NSRect)osdRect;
- (void)setOSDSize:(int)s;


XMOpenGLUtilities
struct Vector3 XMMakeVector3(GLfloat x, GLfloat y, GLfloat z);

Placement XMMakePlacement(struct Vector3 pos, struct Vector3 scale, struct Vec-
tor3 rot, GLfloat rotAngle);

Camera XMMakeCamera(struct Vector3 eye, struct Vector3 sceneCenter, struct Vec-
tor3 up);


IGPopupView
- (void)setTitle:(NSString*)t;
- (void)setCustomMenu:(NSMenu*)m;




                                      15/16
Appendix C - Compatibility

The following is a table showing compatibility of the current version of XMeeting (as of
20.02.2006) with some endpoints, along with the options to set in the locations -> video
section of the preferences window.




                                 Video   Video              Settings
                                   In     Out

       SONY

       
    PCS-TL50              OK       OK    H.264, limited mode

       Tandberg

       
    1000                  OK       OK    H.263

       
    MXP990                OK       OK    H.263

       Polycom

       
    VSX7000e              OK       OK    H.263/H.264

       
    MCU (SWITCH)          NO      NO     ---

       Radvision

       
    MCU (ETH)             OK       OK    H.261/H.263/H.264

       Codian

       
    MCU                   OK       OK    H.261/H.263/H.264




                                         16/16

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Java GUI PART II
Java GUI PART IIJava GUI PART II
Java GUI PART II
 
Java swing
Java swingJava swing
Java swing
 
Gui in java
Gui in javaGui in java
Gui in java
 
Chapter 1 swings
Chapter 1 swingsChapter 1 swings
Chapter 1 swings
 
Swing and AWT in java
Swing and AWT in javaSwing and AWT in java
Swing and AWT in java
 
Graphical User Interface in JAVA
Graphical User Interface in JAVAGraphical User Interface in JAVA
Graphical User Interface in JAVA
 
Complete java swing
Complete java swingComplete java swing
Complete java swing
 
GUI programming
GUI programmingGUI programming
GUI programming
 
Swing
SwingSwing
Swing
 
Ingles 2do parcial
Ingles   2do parcialIngles   2do parcial
Ingles 2do parcial
 
Gui
GuiGui
Gui
 
Awt and swing in java
Awt and swing in javaAwt and swing in java
Awt and swing in java
 
java swing
java swingjava swing
java swing
 
Java- GUI- Mazenet solution
Java- GUI- Mazenet solutionJava- GUI- Mazenet solution
Java- GUI- Mazenet solution
 
GUI Programming In Java
GUI Programming In JavaGUI Programming In Java
GUI Programming In Java
 
GUI Programming in JAVA (Using Netbeans) - A Review
GUI Programming in JAVA (Using Netbeans) -  A ReviewGUI Programming in JAVA (Using Netbeans) -  A Review
GUI Programming in JAVA (Using Netbeans) - A Review
 
Pcb design using proteus
Pcb design using proteusPcb design using proteus
Pcb design using proteus
 
Swings in java
Swings in javaSwings in java
Swings in java
 
Java: GUI
Java: GUIJava: GUI
Java: GUI
 
Matlab GUI
Matlab GUIMatlab GUI
Matlab GUI
 

Destaque

Destaque (8)

6º ano iii atividade ii (1)
6º ano iii  atividade ii (1)6º ano iii  atividade ii (1)
6º ano iii atividade ii (1)
 
Conflitonocerebro
ConflitonocerebroConflitonocerebro
Conflitonocerebro
 
Progressão aritmética
Progressão aritméticaProgressão aritmética
Progressão aritmética
 
Mat pa pg exercicios gabarito
Mat pa  pg exercicios gabaritoMat pa  pg exercicios gabarito
Mat pa pg exercicios gabarito
 
Provas 1º
Provas 1ºProvas 1º
Provas 1º
 
Aula de Recuperação Matemática
Aula de Recuperação MatemáticaAula de Recuperação Matemática
Aula de Recuperação Matemática
 
Progressoes
ProgressoesProgressoes
Progressoes
 
Exercício 01 PA - Resolvido
Exercício 01 PA - ResolvidoExercício 01 PA - Resolvido
Exercício 01 PA - Resolvido
 

Semelhante a XMeeting Graphical User Interface

WPF - the future of GUI is near
WPF - the future of GUI is nearWPF - the future of GUI is near
WPF - the future of GUI is nearBartlomiej Filipek
 
GUI design using JAVAFX.ppt
GUI design using JAVAFX.pptGUI design using JAVAFX.ppt
GUI design using JAVAFX.pptTabassumMaktum
 
Debugging programs with Keil uVision
Debugging programs with Keil uVisionDebugging programs with Keil uVision
Debugging programs with Keil uVisionSaravananVijayakumar4
 
Computer Graphics Project Report on Sinking Ship using OpenGL
Computer Graphics Project Report on Sinking Ship using OpenGL Computer Graphics Project Report on Sinking Ship using OpenGL
Computer Graphics Project Report on Sinking Ship using OpenGL Sharath Raj
 
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Paris Android User Group
 
Ck5 Series Ppt
Ck5 Series PptCk5 Series Ppt
Ck5 Series PptOwenZhong
 
COMPUTER GRAPHICS PROJECT REPORT
COMPUTER GRAPHICS PROJECT REPORTCOMPUTER GRAPHICS PROJECT REPORT
COMPUTER GRAPHICS PROJECT REPORTvineet raj
 
Advance Computer Architecture
Advance Computer ArchitectureAdvance Computer Architecture
Advance Computer ArchitectureVrushali Lanjewar
 
Windows programming ppt
Windows programming pptWindows programming ppt
Windows programming pptSAMIR CHANDRA
 
Slot04 creating gui
Slot04 creating guiSlot04 creating gui
Slot04 creating guiViên Mai
 
Session2-J2ME development-environment
Session2-J2ME development-environmentSession2-J2ME development-environment
Session2-J2ME development-environmentmuthusvm
 
Departmental store management sytem
Departmental store management sytemDepartmental store management sytem
Departmental store management sytemjatin hingorani
 
May Unplugged Mobile Controls User Group
May Unplugged Mobile Controls User GroupMay Unplugged Mobile Controls User Group
May Unplugged Mobile Controls User GroupTeamstudio
 

Semelhante a XMeeting Graphical User Interface (20)

WPF - the future of GUI is near
WPF - the future of GUI is nearWPF - the future of GUI is near
WPF - the future of GUI is near
 
GUI design using JAVAFX.ppt
GUI design using JAVAFX.pptGUI design using JAVAFX.ppt
GUI design using JAVAFX.ppt
 
Debugging programs with Keil uVision
Debugging programs with Keil uVisionDebugging programs with Keil uVision
Debugging programs with Keil uVision
 
Swift
SwiftSwift
Swift
 
GUI_part_1.pptx
GUI_part_1.pptxGUI_part_1.pptx
GUI_part_1.pptx
 
Symbian OS
Symbian  OS Symbian  OS
Symbian OS
 
Module pool programming
Module pool programmingModule pool programming
Module pool programming
 
Windows phone and azure
Windows phone and azureWindows phone and azure
Windows phone and azure
 
Computer Graphics Project Report on Sinking Ship using OpenGL
Computer Graphics Project Report on Sinking Ship using OpenGL Computer Graphics Project Report on Sinking Ship using OpenGL
Computer Graphics Project Report on Sinking Ship using OpenGL
 
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
 
Ck5 Series Ppt
Ck5 Series PptCk5 Series Ppt
Ck5 Series Ppt
 
Designing Apps for the Motorola XOOM
Designing Apps for the Motorola XOOM Designing Apps for the Motorola XOOM
Designing Apps for the Motorola XOOM
 
COMPUTER GRAPHICS PROJECT REPORT
COMPUTER GRAPHICS PROJECT REPORTCOMPUTER GRAPHICS PROJECT REPORT
COMPUTER GRAPHICS PROJECT REPORT
 
Advance Computer Architecture
Advance Computer ArchitectureAdvance Computer Architecture
Advance Computer Architecture
 
Windows programming ppt
Windows programming pptWindows programming ppt
Windows programming ppt
 
Slot04 creating gui
Slot04 creating guiSlot04 creating gui
Slot04 creating gui
 
Session2-J2ME development-environment
Session2-J2ME development-environmentSession2-J2ME development-environment
Session2-J2ME development-environment
 
Departmental store management sytem
Departmental store management sytemDepartmental store management sytem
Departmental store management sytem
 
May Unplugged Mobile Controls User Group
May Unplugged Mobile Controls User GroupMay Unplugged Mobile Controls User Group
May Unplugged Mobile Controls User Group
 
Cms instruction
Cms instructionCms instruction
Cms instruction
 

Mais de Videoguy

Energy-Aware Wireless Video Streaming
Energy-Aware Wireless Video StreamingEnergy-Aware Wireless Video Streaming
Energy-Aware Wireless Video StreamingVideoguy
 
Microsoft PowerPoint - WirelessCluster_Pres
Microsoft PowerPoint - WirelessCluster_PresMicrosoft PowerPoint - WirelessCluster_Pres
Microsoft PowerPoint - WirelessCluster_PresVideoguy
 
Proxy Cache Management for Fine-Grained Scalable Video Streaming
Proxy Cache Management for Fine-Grained Scalable Video StreamingProxy Cache Management for Fine-Grained Scalable Video Streaming
Proxy Cache Management for Fine-Grained Scalable Video StreamingVideoguy
 
Free-riding Resilient Video Streaming in Peer-to-Peer Networks
Free-riding Resilient Video Streaming in Peer-to-Peer NetworksFree-riding Resilient Video Streaming in Peer-to-Peer Networks
Free-riding Resilient Video Streaming in Peer-to-Peer NetworksVideoguy
 
Instant video streaming
Instant video streamingInstant video streaming
Instant video streamingVideoguy
 
Video Streaming over Bluetooth: A Survey
Video Streaming over Bluetooth: A SurveyVideo Streaming over Bluetooth: A Survey
Video Streaming over Bluetooth: A SurveyVideoguy
 
Video Streaming
Video StreamingVideo Streaming
Video StreamingVideoguy
 
Reaching a Broader Audience
Reaching a Broader AudienceReaching a Broader Audience
Reaching a Broader AudienceVideoguy
 
Considerations for Creating Streamed Video Content over 3G ...
Considerations for Creating Streamed Video Content over 3G ...Considerations for Creating Streamed Video Content over 3G ...
Considerations for Creating Streamed Video Content over 3G ...Videoguy
 
ADVANCES IN CHANNEL-ADAPTIVE VIDEO STREAMING
ADVANCES IN CHANNEL-ADAPTIVE VIDEO STREAMINGADVANCES IN CHANNEL-ADAPTIVE VIDEO STREAMING
ADVANCES IN CHANNEL-ADAPTIVE VIDEO STREAMINGVideoguy
 
Impact of FEC Overhead on Scalable Video Streaming
Impact of FEC Overhead on Scalable Video StreamingImpact of FEC Overhead on Scalable Video Streaming
Impact of FEC Overhead on Scalable Video StreamingVideoguy
 
Application Brief
Application BriefApplication Brief
Application BriefVideoguy
 
Video Streaming Services – Stage 1
Video Streaming Services – Stage 1Video Streaming Services – Stage 1
Video Streaming Services – Stage 1Videoguy
 
Streaming Video into Second Life
Streaming Video into Second LifeStreaming Video into Second Life
Streaming Video into Second LifeVideoguy
 
Flash Live Video Streaming Software
Flash Live Video Streaming SoftwareFlash Live Video Streaming Software
Flash Live Video Streaming SoftwareVideoguy
 
Videoconference Streaming Solutions Cookbook
Videoconference Streaming Solutions CookbookVideoconference Streaming Solutions Cookbook
Videoconference Streaming Solutions CookbookVideoguy
 
Streaming Video Formaten
Streaming Video FormatenStreaming Video Formaten
Streaming Video FormatenVideoguy
 
iPhone Live Video Streaming Software
iPhone Live Video Streaming SoftwareiPhone Live Video Streaming Software
iPhone Live Video Streaming SoftwareVideoguy
 
Glow: Video streaming training guide - Firefox
Glow: Video streaming training guide - FirefoxGlow: Video streaming training guide - Firefox
Glow: Video streaming training guide - FirefoxVideoguy
 

Mais de Videoguy (20)

Energy-Aware Wireless Video Streaming
Energy-Aware Wireless Video StreamingEnergy-Aware Wireless Video Streaming
Energy-Aware Wireless Video Streaming
 
Microsoft PowerPoint - WirelessCluster_Pres
Microsoft PowerPoint - WirelessCluster_PresMicrosoft PowerPoint - WirelessCluster_Pres
Microsoft PowerPoint - WirelessCluster_Pres
 
Proxy Cache Management for Fine-Grained Scalable Video Streaming
Proxy Cache Management for Fine-Grained Scalable Video StreamingProxy Cache Management for Fine-Grained Scalable Video Streaming
Proxy Cache Management for Fine-Grained Scalable Video Streaming
 
Adobe
AdobeAdobe
Adobe
 
Free-riding Resilient Video Streaming in Peer-to-Peer Networks
Free-riding Resilient Video Streaming in Peer-to-Peer NetworksFree-riding Resilient Video Streaming in Peer-to-Peer Networks
Free-riding Resilient Video Streaming in Peer-to-Peer Networks
 
Instant video streaming
Instant video streamingInstant video streaming
Instant video streaming
 
Video Streaming over Bluetooth: A Survey
Video Streaming over Bluetooth: A SurveyVideo Streaming over Bluetooth: A Survey
Video Streaming over Bluetooth: A Survey
 
Video Streaming
Video StreamingVideo Streaming
Video Streaming
 
Reaching a Broader Audience
Reaching a Broader AudienceReaching a Broader Audience
Reaching a Broader Audience
 
Considerations for Creating Streamed Video Content over 3G ...
Considerations for Creating Streamed Video Content over 3G ...Considerations for Creating Streamed Video Content over 3G ...
Considerations for Creating Streamed Video Content over 3G ...
 
ADVANCES IN CHANNEL-ADAPTIVE VIDEO STREAMING
ADVANCES IN CHANNEL-ADAPTIVE VIDEO STREAMINGADVANCES IN CHANNEL-ADAPTIVE VIDEO STREAMING
ADVANCES IN CHANNEL-ADAPTIVE VIDEO STREAMING
 
Impact of FEC Overhead on Scalable Video Streaming
Impact of FEC Overhead on Scalable Video StreamingImpact of FEC Overhead on Scalable Video Streaming
Impact of FEC Overhead on Scalable Video Streaming
 
Application Brief
Application BriefApplication Brief
Application Brief
 
Video Streaming Services – Stage 1
Video Streaming Services – Stage 1Video Streaming Services – Stage 1
Video Streaming Services – Stage 1
 
Streaming Video into Second Life
Streaming Video into Second LifeStreaming Video into Second Life
Streaming Video into Second Life
 
Flash Live Video Streaming Software
Flash Live Video Streaming SoftwareFlash Live Video Streaming Software
Flash Live Video Streaming Software
 
Videoconference Streaming Solutions Cookbook
Videoconference Streaming Solutions CookbookVideoconference Streaming Solutions Cookbook
Videoconference Streaming Solutions Cookbook
 
Streaming Video Formaten
Streaming Video FormatenStreaming Video Formaten
Streaming Video Formaten
 
iPhone Live Video Streaming Software
iPhone Live Video Streaming SoftwareiPhone Live Video Streaming Software
iPhone Live Video Streaming Software
 
Glow: Video streaming training guide - Firefox
Glow: Video streaming training guide - FirefoxGlow: Video streaming training guide - Firefox
Glow: Video streaming training guide - Firefox
 

XMeeting Graphical User Interface

  • 1. XMeeting Graphical User Interface Ivan Guajana SWITCH December 2005 - February 2006
  • 2. Table of Contents Introduction 3 Goals 4 Implementation 4 Main Window 4 Inspectors 5 On Screen Display (OSD) 6 Video View 9 Fullscreen mode 9 Picture-in-Picture 10 Miscellanea 11 Results 12 Future Work 12 Appendix A - Command Reference 13 Appendix B - Functions Reference 14 XMInspectorController 14 XMOnScreenControllerWindow 14 XMOnScreenControllerView 14 XMOpenGLUtilities 15 IGPopupView 15 Appendix C - Compatibility 16 2/16
  • 3. Introduction XMeeting1 is an open source video-conferencing client for the Mac OS X operating system which enables users to establish and receive calls using the H.323 protocol (SIP support is planned). The development status of XMeeting as of this project’s begin was alpha, mean- ing that a great effort has gone into making the underlying libraries and functionalities work and much less into the user interface, which was comprehensive but not very user-friendly. The software is laid out as in the following schema: User Interface (Obj-C, Cocoa) Cocoa/Objective-C Layer XMeeting Bridge Layer (C) OPAL (C++) PWlib (C++) Starting at the bottom we have the OpenH323 libraries, which are responsible for every- thing which has to do with network protocols. A bridge layer, written in C, allows the com- munication layer to interact with the higher layers, where audio/video management and user interaction take place. The scope of this project is the grey box. 1 http://xmeeting.sourceforge.net/ 3/16
  • 4. Goals This project is aimed at implementing a graphical user interface (GUI) and several basic functionalities for XMeeting. The goal is to provide the user with a pleasant, easy-to use, yet powerful user interface complying Apple’s Human Interface Guidelines. Along the interface redesign, a fullscreen mode complete with picture-in-picture capability has been implemented. Implementation With the exception of the underlying communication libraries PWLib, OPAL (from the OpenH323 project) and the bridge, XMeeting is written in Objective-C, using the Cocoa framework. OpenGL and GLUT libraries as well as Apple’s CoreVideo were used to pre- sent the video streams to the user. The idea was to design a user interface which contained only the most useful controls and put everything else away. Then provide convenient ways to access other functionalities. Thus an on-screen display has been developed along with an inspector manger. The fol- lowing sections describe a little more in-depth each part of the new UI. XMeeting’s main user interface. Main Window Compared to the previous user interface, the main window’s layout is dramatically simpli- fied. Addition and support modules are not displayed into it anymore, but are now inte- grated into one of the two inspectors. The main window contains only one module, which is swapped on request. Currently there are two main modules: XMNoInCallModule and XMInCallModule, which are shown respectively before and during a call. The window’s size is automatically ad- justed to fit the module, which is responsible of returning its preferred size to the window controller. 4/16
  • 5. The gatekeeper registration status is now encoded with colors using semaphore-like icons: means that there is no network connection, thus no gatekeeper registration was possible means that no GK registration took place, but it’s still possible to establish calls by entering IP addresses XMeeting successfully registered with the GK To have the location popup button fit into the user interface style, a custom subclass of NSPopupButton, called IGPopupView, has been added. The name doesn’t comply with XMeeting name schema because it comes from another project (IGDocks2). Inspectors Because almost all the modules have been removed from the main interface, an alterna- tive way of showing them had to be found. The adopted solution is to implement an in- spector controller (called XMInspectorController), which manages an utility NSPanel. It is fully dynamic in the sense that it can be given any number of modules during the initializa- tion phase and the panel will show an NSSegmentedControl to switch between them, tak- ing care of resizing itself and hide/show the resizing widget as needed. The Inspector utility panel. Two XMInspectors are currently used in XMeeting and they are called Tools (accessed through the main interface and from the Windows menu) and Inspector (only accessible from the Windows menu). The ‘Inspector’ inspector contains all modules which are sup- posed to provide the user with information. Examples are the call history, statistics, and the new info module, whose goal is to present basic parameters such as GDS number, IP address and status. 2 A freeware dock switcher utility available at http://cgi.ethz.ch/~guajanai/IG/works.php?what=igd 5/16
  • 6. The ‘Tools’ inspector is designed to accommodate modules, which offer further functionali- ties or configuration options to the user. Among these there are the XMLocalAudioVideo- Module,in future the XMDialPad module and other. This inspector is directly accessible from the main interface because it is also used to setup the camera settings and select a video source. Given its importance, there are convenient shortcuts to it. For instance, in the self-view area, clicking inside the video or the “No Video” picture brings up the XMLo- calAudioVideoModule allowing the user to switch video sources. On Screen Display (OSD) On Screen Display for Audio/Video calls. The goal of the OSD is to give user access to a given set of functionalities directly from the video view, allowing her to use them on both the windowed and the fullscreen modes. NSView button XMOnScreenControllerView NSArray* buttons Name drawRect Tooltips Icons PressedIcons IsPressed CurrentStateIndex Targets Selectors Rect XMInCallOSD XMAudioOnlyOSD On Screen Display class hierarchy. Instead of drawing the OSD into the NSView using OpenGL, a more complex approach and flexible approach has been taken. The OSD is split into two parts: a transparent win- dow (XMOnScreenControllerWindow), which is drawn on top of the view and a subclass of NSView (XMOnScreenControllerView) containing the logic to manage the OSD. In this way, it’s easy to animate the opening/closing of the OSD using different effects like fade in/ out, move in/out and so on. Currently only fading and rolling effects are implemented, but it’s easy to add other ones. 6/16
  • 7. NSWindow XMOnScreenControllerWindow NSArray* buttons openWithE!ect: closeWithE!ect: XMOnScreenControllerWindow. One can add/remove/insert buttons or separators into the OSD by using the provided methods or implement pre-made subclasses which are displayed according to specific needs. The XMInCallOSD and XMAudioOnlyOSD are two examples of the second ap- proach. They are presented to the user according to the availability of the video stream. An advantage of having subclasses of XMOnScreenControllerView is the ability to provide methods to set the state of particular buttons from outside, which can be useful when a button should modify another button’s state or a keyboard shortcut is used and the but- ton’s state is not automatically updated. XMOnScreenControllerWindow instance Instance of and XMOnScreenControllerView subclass Anatomy of the On Screen Display Each button is defined by an NSMutableDictionary. Multi-state buttons are handled by us- ing NSArrays for every state-related attribute. To clarify, here’s the example of the fullscreen button, which is a two-state button and includes four icons: 7/16
  • 8. Key Value Type Name “Fullscreen” NSString* Tooltips “Enter fullscreen mode”, NSArray of NSString* “Exit fullscreen mode” Icons fullscreen_large.tif, NSArray of NSImage* windowed_large.tif PressedIcons fullscreen_large_down.tif, NSArray of NSImage* windowed_large_down.tif Selectors “goFullScreen”, “goWin- NSArray of NSString* dowed” Targets XMOSDVideoView in- NSArray of NSString* stance, XMOSDVideoView instance CurrentStateIndex 0 (default) NSNumber encapsulating an integer IsPressed NO NSNumber encapsulating a BOOL NSDictionary keys representing a button. The ‘Tooltips’ key is not currently used, but might be usefuls in the future. To conveniently create a suitable NSMutableDictionary* for a button, one can use the following method: - (NSMutableDictionary*)createButtonNamed:(NSString*)name tooltips:(NSArray*)tooltips icons:(NSArray*)icons pressedIcons:(NSArray*)pressedIcon selectors:(NSArray*)selectors targets:(NSArray*)targets currentStateIndex:(int)currentIdx; When drawing, the entries in each array at index CurrentIndexState are picked. On mouse down, the IsPressed variable is set to YES, causing the icon in the PressedIcon array to be used for drawing. On mouse up, IsPressed is set again to NO and the current state in- dex is incremented with the formula CurrentStateIndex = (CurrentStateIndex + 1) % [Icons count] where [Icons count] returns the number of icons contained in the array, corresponding to the number of states available for the button. 8/16
  • 9. Video View The video view is the area of the user interface where video is rendered. It is implemented using OpenGL, allowing for a great deal of flexibility, as it will be shown in the Picture-in- Picture section. Basically the incoming video stream is transformed into an OpenGL tex- ture using CoreVideo and the result is mapped to a polygon. This process is repeated for each incoming frame. If the user chooses to see her local video at the same time, the same applies to the second video stream, which is rendered into a separate polygon. The displacement, scaling and rotation of the polygons are completely arbitrary, allowing for different Picture-in-Picture modes and animations in-between. The implemented video view, called XMOSDVideoView, contains also the logic to display/ dismiss the on-screen display. This is done by adding a tracking rectangle to the view it- self, make sure to resize it along with the view, and enabling mouseEntered/mouseExited events. This triggers the OSD when the user enters the view with the mouse. For the fullscreen view and to improve the behavior, an NSTimer has been introduced, which is responsible to watch for mouse movements inside the view. If the mouse remains in the same place for more than 1 second, the OSD is dismissed. If it’s moved, then the OSD appears again. Fullscreen mode For the implementation of the fullscreen mode, a window as large as the main screen is created, the system menu bar and the dock are hidden and the current video view is put into it with NSWindow’s setContentView: method. Using this approach we avoid several problems related to OpenGL and event handling. First of all it is not necessary to create a second OpenGL context for the fullscreen view, because we just re-use the existing one. Secondly, we get event handling for free, because it’s implemented into the NSWindow class. Switching between windowed and fullscreen mode is just a matter of moving the video view to the corresponding window. In XMOSDVideoView the viewDidMoveToWindow and removeFromSuperview delegate methods were implemented, thus allowing automating setup / clean up of the tracking rectangles needed for the OSD. 9/16
  • 10. Picture-in-Picture The classic Picture-in-Picture mode. This feature leverages OpenGL for the implementation of XMOSDVideoView. Thanks to the graphics library, indeed, a lot of interesting effects and scene set ups are possible. To handle local and remote video positions in the scene, as well as (virtual) camera position and orientation, a couple of data structures were introduced, along with convenience methods to instantiate them. These are defined into XMOpenGLUtilities.h and are: • Vector3: A simple struct containing 3 float values, to store x, y and z coordinates • Camera: A data structure containing everything needed for the GLUT function glLookAt() to work. This function is responsible for placing the camera into the 3D space and orientating it towards a point. It needs a location in space (eye), a point to look at (center) and a vector defining the camera’s banking (upVector). • Placement A struct encapsulating a polygon position and orientation in space. Contains also a boolean variable to enable/disable reflection. It is used to define where and how the video should be rendered in the 3D space. 10/16
  • 11. Scene An higher-level struct containing two Placement structs (localVideo and remoteVideo placements) and one Camera struct. The whole scene is de- scribed by the information contained in it. Three Picture-in-Picture modi have been implemented: classic, side-by-side and iChat-like. Each one of them is simply represented by a Scene struct filled with the correct values. During rendering, the struct pointed by current- PinPMode* is used and the parameters are applied using glLookAt() for the camera and a combination of glScale, glTranslate and glRotate for other poly- gons. Switching between PinP modes is just a matter of having the currentPinPMode pointer to reference the desired Scene struct. To give the user feedback, it is suggested to use multi-state buttons in the on- screen display. Animation between PinP modes can be easily im- plemented. At this time, a basic linear interpolation between PinP modes is present. The trick is to set up an NSAnimation object and a callback to update a temporary Scene struct step-by-step from the cur- rentPinPMode to the next one. The current implementation could be enhanced by having the animations happen along paths instead of straight lines, which may result in intersec- tions between polygons. The classic Picture-in-Picture mode includes also drag and drop functionality to displace the local video rectangle anywhere within the view. Miscellanea Other, more subtle changes have been made to XMeeting: • the beautiful application icon, kindly donated to the project by SWITCH, has been de- signed by a free-lancer • the icons for the main interface and the preferences window • the compilation process has been made smoother for those who like to download the source code and compile everything on her own. 11/16
  • 12. Results The result of this project is a first beta version of XMeeting, featuring a brand new user in- terface, which should make it easy to use the software as well as provide the more ad- vanced users with all the features they need. The low-level part of XMeeting, which is where incoming video is decoded and outgoing video is encoded and packetized need still a bit of work to improve compatibility with a wide range of end points, but it is coming along nicely, thanks to the work of Hannes Frie- drich3 , who is the main developer behind XMeeting. This version of XMeeting runs on any PowerPC-based Macintosh with Mac OS X 10.4 or newer. Although the source will compile as Universal Binary (make sure to check the ‘Intel’ option in the build settings of all three targets), the resulting application will have problems on Intel-based Macintosh systems, probably due to the different byte ordering. Future Work XMeeting has a lot of potential, but it is not yet ready for prime-time. Greater compatibility with video conference endpoints must be achieved and many improvements can be made on both the user interface and the underlying libraries. Possible new features are for example the integration of CoreVideo/CoreImage filtering for incoming and outgoing video, tooltips for the on-screen display and superposition of status icons on the video view, which would allow the user to see when she or her partner is muted as well as other useful information. On the other hand, SIP support is for sure one of the most requested features, as well as far end control. 3 hannesf@ee.ethz.ch 12/16
  • 13. Appendix A - Command Reference Gatekeeper Show Tools registration Self view status Location selection Call Address Book Show Inspector Show Tools Toggle Picture-in-Picture Mute / Unmute Hangup Toggle Fullscreen Picture-in-Picture mode 13/16
  • 14. Appendix B - Functions Reference XMInspectorController //Class methods + (XMInspectorController *)instanceWithModules:(NSArray*)m andName:(NSString*)name; + (XMInspectorController *)instanceWithName:(NSString*)name; + (void)closeAllInspectors; //Actions - (IBAction)changePage:(id)sender; //Get&Set - (void)setModules:(NSArray*)m; - (NSString*)name; - (void)setName:(NSString*)newName; //Init - (id)initWithModules:(id)mod andName:(NSString*)name; //Other - (void)currentModuleSizeChanged:(id)sender; - (void)show; - (void)close; XMOnScreenControllerWindow enum OpeningEffects { RollInFromBottomBorderEffect, FadeInEffect, NoEffect }; enum ClosingEffects { RollOutToBottomBorderEffect, FadeOutEffect }; - (void) openWithEffect:(int)_effect; - (void) closeWithEffect:(int)_effect; XMOnScreenControllerView //Managing buttons - (void)addButton:(NSMutableDictionary*)newBtn; - (void)addButtons:(NSArray*)newButtons; - (void)insertButton:(NSMutableDictionary*)btn atIndex:(int)idx; - (void)removeButton:(NSMutableDictionary*)btn; - (void)removeButtonAtIndex:(int)idx; 14/16
  • 15. //Creating buttons - (NSMutableDictionary*)createButtonNamed:(NSString*)name tooltips:(NSArray*)tooltips icons:(NSArray*)icons pressedIcons:(NSArray*)pressedIcons selectors:(NSArray*)selectors targets:(NSArray*)targets currentStateIndex:(int)currentIdx; //Get&Set - (NSRect)osdRect; - (void)setOSDSize:(int)s; XMOpenGLUtilities struct Vector3 XMMakeVector3(GLfloat x, GLfloat y, GLfloat z); Placement XMMakePlacement(struct Vector3 pos, struct Vector3 scale, struct Vec- tor3 rot, GLfloat rotAngle); Camera XMMakeCamera(struct Vector3 eye, struct Vector3 sceneCenter, struct Vec- tor3 up); IGPopupView - (void)setTitle:(NSString*)t; - (void)setCustomMenu:(NSMenu*)m; 15/16
  • 16. Appendix C - Compatibility The following is a table showing compatibility of the current version of XMeeting (as of 20.02.2006) with some endpoints, along with the options to set in the locations -> video section of the preferences window. Video Video Settings In Out SONY PCS-TL50 OK OK H.264, limited mode Tandberg 1000 OK OK H.263 MXP990 OK OK H.263 Polycom VSX7000e OK OK H.263/H.264 MCU (SWITCH) NO NO --- Radvision MCU (ETH) OK OK H.261/H.263/H.264 Codian MCU OK OK H.261/H.263/H.264 16/16