Veek - Slim live video chat

Veek is my attempt at writing something like Skype/Google hangouts but which is slightly less infuriating to use and consumes a reasonable amount of memory in doing so.
I was inspired when I was watching one of Abner's interview streams. He was complaining about Hangouts being really broken and I thought to myself "I wonder how hard it would be to make something like that". Possibly famous last words...at the very least I now have a new appreciation for the "Works on my machine" joke.

The goal is to be lightweight and simple, being less a social network and more a small application that you fire up specifically for a video call. Currently I'm using OpenGL for rendering because ImGui is glorious and it was the simplest thing to set up, but I think I'd like to move to having an actual GUI if I can find something that is small and cross-platform.

The source code is available on Github, along with 32-bit and 64-bit linux binaries.
You can also download the latest 64-bit Windows binaries.



Edited by D3zmodos on Reason: Update links & screenshot for new version.
Interested in putting up your project with us? We still don't have an in-site mechanism for you to apply, but e-mail me at [email protected] so we can talk.

Edited by Abner Coimbre on Reason: Minor grammar.
For the networking side of things look into WebRTC. I don't mean, hey, use webrtc. I mean, look into why it exists in the first place. There are some problems with video chat that can't really be resolved without some server somewhere doing some heavy lifting, but if you know what they are, you can recognise them and avoid trying to solve them in a simple p2p context. you'll still have a video chat program that works for most people
I know its been a long time but I have an update!

I've been working on this on-and-off for the past few months and it seems to mostly work at least some of the time and I'm going to put the project on hold again for a bit so I figured I'd put it up here for people to look at.

You can download a windows build here. The archive includes both the client and a server, neither of which have any dependencies or require files other than the executables.
I don't have a publicly-available server running all the time at the moment so you'd need to run one yourself but that's easy, you just run the executable and point the client to it. :)

I've also put the source code up in a public repository on github in case anybody's interested.

Both the client and the server should run fine on either Windows or Linux (the download only includes the Windows binaries though because the compilation is significantly easier on Linux) but there seems to be a bit of an issue around PulseAudio not providing audio input data frequently enough on Linux.

Let me know what the outcome is if you try it (I'd hope that it at least sort-of-works)!

Edited by D3zmodos on
And contrary to last year, we now have a way to submit submit a project. Not saying you're interested in doing it still... but who knows what you're thinking!
I feel like if I submit it as a project then I'll pressured to work on it more than I otherwise might (just by virtue of it being a listed project on the network).
While I'd like to think that I'll work on it every now and then, I posted the update because I've got something that mostly works (for me at least) and I want to go work on other projects.
It seems a bit weird to me to post a project and then put it on hold very soon afterwards? At least thats the reason I didn't submit it to be a project on the network originally, it had nothing to do with the submission system. :)
I tried it on my local network and it didn't work. I was able to create a room and join it from another machine, but no audio was coming through (I only tested audio) using the send tone checkbox.

The play test sound button triggers an assert. I also got an assert at some point referring to a vector iterator.

The console was spamming
1
[WARN] audio.cpp:287 - We got 960 frames from PLC!

And the ui reported 100% audio packet loss on one machine (the one sending the tone) and 98% audio packet loss on the other.

One of the machine is on windows 7 64bit and the other on windows 10 64bit.

When running the server and two clients on the same machine it works.
@mrmixer Thanks for trying it out!
I've found the issue with the "Play test sound" button but I'm still investigating the high packet loss.

Does the MicVolume bar move at all when "Send Tone" is enabled? It should be around 3-4%.
Also for when it works two instances on a single machine, is that on the Windows 7 or 10 machine (or both)? I've had at least one other case where Windows 10 gave no sound input at all.
Yes, the mic volume was at 4% with "Send tone" (and without, my mic was detected correctly by Veek).

For the two client on the same machine it was on Windows 7.
After much tinkering, I've finally resolve at least a few issues that might've caused it to not correctly transmit any audio.
This version also features a slightly re-arranged UI that hopefully makes it a bit easier to find your way around.

You can download the updated binaries or build it from the source on github (only recommended on linux).

I've used it myself to have a 20-minute conversation (across the actual internet, rather than just on my local network) so it definitely *can* work on machines other than my own and in realistic network conditions.
Let me know if it works for you. :)
I want to start a project just like yours. However, i don't know how to start. Do you have any suggestion? How did you start designing and coding of your project?

When i open up some uml drawer,i just can create class "video_streaming" andddd i'm stuck :)
I think you're assuming that there was more designing than there actually was. :)
I probably started out with a minimal example of "I want to get audio input and output", hooked the two up to each other, added something resembling a UI to control it, and then added a layer of network IO to connect the two.
I certainly took the path of getting audio to work (nicely) first and then adding video later - and I'm *still* trying to make audio work nicely!

I'm probably missing something important but realtime video streaming simply doesn't have a bunch of the problems that audio does. If packets don't arrive or they arrive later or out-of-order it doesn't matter, you can always just show the latest frame of video that you have and it'll look fine. With audio you very quickly start getting very noticeable artifacts if you miss any number of packets.

I did spend a bunch of time at one point trying to rearrange code so that it was a bit more "elegant" and intuitive, but I eventually gave up, realising that if there's a nicer design in there it'll probably become clear later on, and carried on with doing actual work.
Tried it. It's working on my local network and over the internet (after forwarding the port on my router).
No packet loss. Audio only.
On the local network, after disconnecting one of the client, a sound continue playing on that client (the other was playing the test tone). It resemble the test tone but was not exactly the same (lower volume, lower frequency).
Edit: Could you provide linux (debian) 32bit binaries ?

Edited by Simon Anciaux on Reason: Linux binaries
Glad to hear it's working!

I'd like to set up TravisCI so that it saves the binaries somewhere at some point, but until then here are binaries that I built manually (on Ubuntu 16.04): 32-bit and 64-bit.

Edited by D3zmodos on
Thanks.

On linux the client doesn't run (there is a problem while initializing OpenGL) but it's probably because that computer only supports OpenGL 2.1 (it's an intel Atom cpu). I don't intend to use the client on linux so it's ok with me. But the process doesn't exit after failing to initialize.

The server runs without any problem. Clients can connect (local network) to the room but audio is not working well.
I have one Windows 7 and one Windows 10 connected. The windows 7 sends the test tone, no packet loss. The windows 10 machine receive the tone but there are packet loss (a lot) and the tone doesn't sound right. The send tone checkbox doesn't work on Windows 10 (Do I need a mic connected to use the send tone function ?). After stopping the tone from Win 7, Win 10 continued playing a loop of sounds and it started to go faster and faster.