diff --git a/README.md b/README.md index c2fc168fd495cab2f1b45274701f479c91d18fd8..15c0d1388679a98564a53bbe71f183fd3c55e00d 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,18 @@ Virtual Reality & Immersive Visualization Group. ## Building -1. Clone repository -2. Create build directory -3. Run cmake -4. Build library +1. `mkdir build` +2. `cd build` +3. `cmake ..` +4. `cmake --build .` + +## Test + +To test if everything is working, run the *noise-stream* example. This requires a proper configuration file called `webstreamer_config.json` in the working directory (see next section). Type in `http://localhost:<PORT>/index.html` in a browser (replace `<PORT>` with the port specified in the configuration file) and you should see a video stream with random pixel data. Clicking on the *play/pause* icon will pause or resume the stream. Clicking on the *pencil* icon will gain control over the underlying application, i.e., the mouse and keyboard input is now forwarded to the underlying application (which, however, has no effect in this example). + +## Configuration File + +WebStreamer uses a configuration file in order to change its settings. An example of such a configuration can be found in the root directory of the repository and is called `webstreamer_config.json`. ## Integration @@ -30,9 +38,6 @@ target_link_libraries(<TARGET> webstreamer) All include files are contained in the folder _webstreamer_ and the namespace with the same name is used to encapsulate all classes and functions. The main class of the library is the _WebStreamer_ class that is defined in the header file _webstreamer/webstreamer.hpp_. This class must be instantiated by the application in order to use the library. Its constructor takes the path to a configuration file that can be used to define the behaviour of the library. In addition, there are two distinct interaction points between the application and the library: passing video ouput from the application to the library and passing input events from the library to the server. All three topics are covered in the following. -### Configuration File - - ### Sending Video data @@ -50,7 +55,7 @@ The parameters _width_ and _height_ correspond to the size of the frame. The siz ### Receiving Input Data - +Handling input data on the server side is done using the `InputProcessor` interface. Which must be registered to the main `WebStreamer` class using its `RegisterInputProcessor()` method. The application should either derive from the `SynchronousInputProcessor` or `AsynchronousInputProcessor` class and implement the `ProcessMouseInput()` and `ProcessKeyboardInput()` functions accordingly. The difference between the two classes lies in the exact time the member functions are called. In the case of the `AsynchronousInputProcessor` the corresponding function is called from a seperate thread immediately when an input event is received at the server side. The `SynchronousInputProcessor` on the other hand buffers all events and calls the corresponding function only if the application calls its `ProcessInput()` function. The repository contains an example implementation of an `AsynchronousInputProcessor` for Qt applications. This can be found in the *qt_inputprocessor* subdirectory. If you are developing a Qt application you can use this implementation directly (make sure to pass the flag `-DBUILD_QT_INPUTPROCESSOR=ON` to the cmake command line). ## License