Skip to content
/ rcom Public

Simple video communication software that builds on exisiting command line tools to generate and decode video.

License

Notifications You must be signed in to change notification settings

rizsi/rcom

Repository files navigation

RCOM communication software.

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.

Download

This README is for version: 0.0.8

Binary build can be downloaded from: http://rizsi.com/programs/rcom/0.0.8

Features

  • 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.

Dependencies

Java 11

libspeexdsp

$ sudo apt-get install libspeexdsp1

Programs executed by RCOM

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

Quickstart

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.

Audio settings

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 `pactl load-module module-echo-canceller` is not available then a headphone or other echo cancellation method has to be used.

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 …​

Known Security issues

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.

VNC

VNC opens localhost ports on the server.

VNC does not transfer control. Control messages are disabled on the screen share side.

Build

rcom.jar

RCOM is developed using Eclipse. This project and all dependencies must be imported into Eclipse.

Dependencies are:

The executable jar can be exported from within Eclipse.

speexcmd

speexcmd is a little executable built onto speex library: https://github.com/xiph/speexdsp

Install compile dependency:

$ sudo apt-get install libspeexdsp-dev
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.

Changelog

  • 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.

About

Simple video communication software that builds on exisiting command line tools to generate and decode video.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published