Giter Site home page Giter Site logo

zmqvideochat's Introduction

ZMQ Video Chat

This Android project serves as a simple showcase application to demonstrate the use of ØMQ and Node.js to stream Video from one Android smartphone to another. The project uses ØMQ as the communication layer to send and receive video frames and chat messages in a publish-subscribe pattern. The messages are published to a server running a Node.js module which forwards the messages to all subscribers.

ØMQ on Android

The ØMQ library was created for Android by checking out and following the steps described on https://github.com/claudemamo/android-jzeromq

Node.js Server

To run the Video Chat server, first thing to do is install the node.

$ cd server/videochat.node
$ npm install

If you encounter problems downloading zmq for node.js, try this first:

$ sudo add-apt-repository ppa:chris-lea/libpgm
$ sudo apt-get update
$ sudo apt-get install libzmq-dev

Now you can run the node:

$ node videochat_server.js

By default, the server uses the following ports:

  • Chat Incoming Port 4000
  • Chat Outgoing Port 4001
  • Video Incoming Port 4010
  • Video Outgoing Port 4011
  • Event Incoming Port 4020
  • Event Outgoing Port 4021

Alternatively, the incoming ports can be defined as commandline arguments when starting the node, while the outgoing ports are always set to incoming port +1

$ node videochat_server.js 5000 5002 5004

Android App

The Android App can be compiled from source or downloaded from the Android market as ZMQ Video Chat

Upon startup, first thing to do is edit the connection settings from the menu.

Settings

Settings Dialog

Choose a nickname for yourself (the nickname should be unique, but as of now no checks are made to ensure that), set the address of the server you are running the videchat.node and enter the ports that you use on the server. By default this would be:

  • Chat Port 4000
  • Video Port 4010
  • Event Port 4020

Once the settings are saved, connection will be established. No connection status is available, as the design of ØMQ is done in such a way that publishers can exist without a subscriber present, thus we have no direct feedback if a connection is established. However, if you see your own nickname in the list of users, connection was successfully established. If not, select Refresh from the menu first and check the list of users again before searching for the problem.

Main View

Main View

The application consists of 3 main areas. On top is the Video area, on the left side is the chat window, on the right side is the list of currently registered users.

Video

On the left is the video from your own camera. By default, the front camera should be used. If your smartphone doesn't have a front camera, the back camera will be used. On the right side, the video of your partner will be displayed. In order to receive a video you first have to select a user from the list (of course you can also choose yourself). Clicking a second time on the user will stop the video again.

By default the video will be unscaled and it's size depends on the smartphone of your partner. Press long on the partner's video and a menu will pop up to give you the option to scale the image or rotate it.

Chat

Sent and received chat messages will be displayed in the chat window.

Users

The nicknames of all currently registered users will be displayed. By selecting a nickname from the list, the video of this user will be displayed as partner. Selecting the name again will stop the video feed.

Conclusion

As mentioned before, this application is meant as a showcase. It is not tested extensively and may have bugs still. However, feel free to use it as it is or to improve on it. If you use it in another project, a notification would be appreciated.

zmqvideochat's People

Watchers

Qinwen Shi avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.