Simple video communication software that builds on exisiting command line tools to generate and decode video.
This project is a proof of concept, not a real product yet.
This README is for version: 0.0.8
Binary build can be downloaded from: http://rizsi.com/programs/rcom/0.0.8
-
Conference rooms
-
Share WebCam
-
Share audio
-
Share screen (VNC)
-
Each client connects to a single server through a single TCP channel.
-
SSH enabled server: rcom-ssh. It is possible to use ssh server for client connections. This way all communications can be made private.
These programs must be installed and accessible by RCOM to work:
Client:
-
v4l2-ctl - to list available webcams
-
ffmpeg - to stream webcam and to decode video streams
-
x11vnc - to share screen through VNC protocol
-
xtightvncviewer to show shared VNC screen
-
ssh to connect the server through secured channel
-
speexcmd - part of the RCOM but you may have to rebuild it for your system.
Server:
-
x11vnc - to re-share screen to multiple clients
To install them all:
$ sudo apt-get install xtightvncviewer x11vnc ffmpeg v4l-utils
DO NOT START THIS VERSION ON A PUBLICLY ACCESSIBLE COMPUTER! THIS PROJECT IS A PROOF OF CONCEPT NOW. See Known Security issues!
To see introduction of SSH enabled RCOM server see rcom-ssh.
Start server on a computer that is accessible from all clients and do not close this terminal window:
$ java -jar rcom.jar server --host 0.0.0.0
Start client:
$ java -jar rcom.jar gui --connectionString rcomserver.example.com:9643
The program uses pactl command line program to enable echo cancellation before starting to stream audio. This feature can be disabled by the command line argument: `--disablePactlEchoCancel <Boolean>
`
You have to unload manually echo cancel module after using the program if you don’t want that to keep running:
`
$ pactl unload-module module-echo-cancel
`
When the client is running then in the GUI:
-
enter a room by clicking "Room" button
-
tick in "Stream WebCam" then select from the available cameras and formats. Sending Camera image starts.
-
tick in "Stream Audio". Sending audio stream starts.
-
tick in "Stream VNC". Screen sharing starts at once.
-
Write messages to the chat box - online users receive these messages
Start other client similarly on a different PC.
RCOM client simply opens the first available device through the Java sound API. If PulseAudio is used then from the system mixer both the input and the output levels can be controlled.
Audio is streamed unencoded in raw PCM format.
Without an echo canceller the audio echoes. There is no echo preventing measure in the program itself. If
is not available then a headphone or other echo cancellation method has to be used.`pactl load-module module-echo-canceller
`
Speex based echo canceller is also implemented within the program but it is not properly tested yet. It can be enabled using this command:
$ java -jar rcom.jar --echoCanceller …
CoolRMI is used for remoting. This remoting framwork is not secure. Only use the program with trusted clients over ssh. See: https://github.com/qgears/opensource-utils/tree/master/coolrmi
VNC transfers control too. The control messages are not yet filtered out from clients. The clients are launched in ViewOnly mode though.
RCOM is developed using Eclipse. This project and all dependencies must be imported into Eclipse.
Dependencies are:
-
hu.qgears.commons - https://github.com/qgears/opensource-utils/tree/master/commons/hu.qgears.commons
-
hu.qgears.coolrmi - https://github.com/qgears/opensource-utils/tree/feature/coolrmi-nio/coolrmi - this is the nio feature branch that is required to build RCOM
-
hu.qgears.rtemplate.runtime - https://github.com/qgears/rtemplate
The executable jar can be exported from within Eclipse.
speexcmd is a little executable built onto speex library: https://github.com/xiph/speexdsp
Install compile dependency:
$ sudo apt-get install libspeexdsp-dev
Compile the program: https://github.com/rizsi/rcom/tree/master/speexcmd
github.com/rcom/speexexample$ gcc -o speexcmd cmd-speexdsp.c -lspeexdsp
The executable must be set up on the command line of the rcom.jar program so it is capable to launch it.
-
0.0.8
-
VNC client is xtightvncviewer (instead of xvnc4viewer of the previous versions) because this is available as package in Ubuntu 20.04
-
Built with Java 11
-
-
0.0.7
-
VNC remote control is possible by a GUI switch on the screen share side
-
-
0.0.6
-
Video draw is optimized to not allocate BufferedImage for each frame → less GC
-
VNC server share auto port allocation is implemented: any number of VNC sesssions can work in parallel
-
VNC control is disabled on the share size
-
GUI is updated: video streams are auto-layoutted. flexdock dependency is removed.
-