Final Report for PowerPoint Capture And Transmission Project

Tatyana Steinberg

CUNIX: ts2049

ts2049@columbia.edu

Abstract:

The created project gives ability for a user-presenter of Power Point slide presentation to capture the slides shown and transmit them across network to other users in real time. Depending on installation instructions captured PowerPoint slides can be easily transmitted and viewed on both Windows and non-Windows machines.

Introduction:

The project included research, proof of concept ideas for the project nodes, varios approach implementations and some discards before making the last current architecture. The rest of the paper organization lay out is as the following:

Related work

Omer Boyaci who created client application for related project connected to capturing and transmission motion related movements for any applications open in browser. The project captures and trasmites images and uses the client application created by Omer Boyaci specifically for PowerPoint application. The project also extends found capture slide add-in functionality created by Shyam Pillai [2].

Background

The project involved different phases such as:

There were two project iteration during the project development:

Architecture

The software architecture includes three main nodes-components such as:

The first Power Point Capture Show add-in library can be downloaded from web site[1]. The library was tested and taken as the front layer-component for the software. One of the add-in main functionality is to create a PNG image for each power point slide or discreate animation slide shown by presenter to be generated and stored on the presenter's filesystem. The whole fron add-in part was considered to be substituted by streaming slides through a socket to the second project component-Sender. However, various attempts to implement new functionality in VBA and/or Microsoft .NET utilities (including C#) were unsuccessful. For now the final odd was due to restrictions in the existing Microsoft Office PowerPoint API model for different versions. Therefore, the streaming approach for the front project layer was discarded.

The Sender java application served as the second software layer included making two designs for the layer: The first Sender design included polling file system with some specific interval for a new image file creation. That was substituted by JNotify[3] java utility which gave ability for the Sender react with streaming functionality only in case of fire upon creation a new PNG file. The Sender redesign also included bandwidth efficiency related improvement. Instead of sending the whole image file every time it was created the new Sender divides the file by byte squares, checks each square with square with the same location for the previous image and sends only the ones which differs. Currently, the squares or tiles dimensions defined as 32 x 32. That was taken as an optimal size. The square also checked not byte by byte but rather on a double byte basis.

The Client java application was utilized as the third project tier and served as a portable part. Each Client attempts to connect to a socket opened by the Sender by sending the sender machine name/port pair. The application contains real time protocol (RTP) implementation for recognizing RTP packets created and sent by the Sender upon Client connection. There are four types RTP packets are to be sent by the Sender for each presentation transmission session. The Client application introduces each end user-client with a JFrame as GUI where transmitted slide shown ultimately updated only by changed squares.

The current project general achitecture can be shown by the schema below

Program Documentation

Measurements

Implementation of JNotify in Sender part made the node complexity to drop from O(N) complexity for the old approach to new O(1) for the IO operations.

Splitting images by squares and streaming only changed squares of the image makes the streaming functionality complexity drop from O(N) to O(1) as well making only IO extra operations to check two squares. Instead of every byte comparison the square comparion made for every fourth byte. That made the IO related complexity to drop from O(N) to O(N/4) and be precise enough to notice changed image squares.

Related Testing

A few images of basic test cases are shown below:

A window shown to client upon new connection

The following print screen shot taken during testing shows streaming only those squares which differs from previous ones of the same location.

Task List

The following people prominent help and support and their work made the development much faster and easier:

References

  1. Real time protocol background and news web site created by Professor Henning Schulzrinne: http://www.cs.columbia.edu/~hgs/rtp/
  2. Shyam Pillai Capture Slide add-in download web site http://skp.mvps.org/cshow.htm
  3. JNotify API related site http://jnotify.sourceforge.net/