uiuc.jit.codec: video compression external for live streaming, released

bens1984's icon

Hello,

I want to let the community know that I have released (with 'beta' qualifications) a jitter external for live compression/decompression of matrix data. It is currently Mac only, available at:

This is a partial port of libavcodec (part of the ffmpeg project), and exposes a host of popular codecs to the jitter environment, including mpeg2, mpeg4, h263, and several lossless codecs (huffyuv, ffvhuff, ffv1). The code was developed for a series of telematic performances that took place earlier this year, between locations in the US, Australia, and Ireland. These events typically employed Skype previously, and this object gives significantly better results and control!

I have yet to take precise measurements of cpu load, speed, and compression rates, but they are very impressive, allowing us to send many streams through jit.net.send/recv objects (mpeg4 compresses over 90%, takes < 10ms for a 1024x768 frame). It can handle HD size streams, but requires some beefy hardware at high frame rates.

I would be grateful for any feedback and reports of use. After ICMC (next week) I will include some network example patches in the release, while at the moment it includes a help patch only. I can provide support as time allows.

yair reshef's icon

Jitter2.0 is here,
Me think cyc74 should offer bounty for this and jit.openNI

Joshua Kit Clayton's icon

Hi Ben,

This sounds great. Thanks for sharing your work!

Cheers,
Joshua

Andrew Benson's icon

Excellent work! In addition to the streaming abilities, it's pretty fun to interrupt the stream now and then (with high GOP value). Thanks for sharing.

jhdkfj39929's icon

Sounds super, a Windows build would be excellent.

StvDee's icon

Could you post a tutorial to better understand the possibilities of this release? Many thanks, I'm very interested in that.

Gewalter Benjamin's icon

Thank you so much this looks great!

projectionsd2015's icon

Hi. The link appears not to be working. Would you mind putting up a new one?

bens1984's icon

Updates!

A new version, including a new, sexier name, has been posted at:
http://ben.musicsmiths.us/vipr.phtml

The links in the OP are dead at this point. Also, I have an audio object that does raw, multi-channel audio over UDP (duplicating the functionality of JackTrip but internal to Max without the need for Jack) which I need to post soon. If anyone has a burning need for it please let me know and I'll bump it up my queue. At the very least it'll be up (I'll drop a post for it) in May.

umma08's icon

hi BenS1984,

i have a couple of questions.

firstly, using the uiuc.jit.codec with Max 6, it seems very unstable. On the same machine, but using Max 5 it is stable. Do you know why this may be?

Also i would very much like to see the multi-channel UDP object. I am researching network performance at the minute, and any tools that we could implement would be very much welcome!

thanks

vichug's icon

Wow, indeed, would like to see that UDP audio thing be ! and a stable version of the codec for max6 too C:

bens1984's icon

Thanks for the interest! The versions posted on my site (see the Apr 14 post, above) should be stable in 6. The fact that you're referring to it by the old name makes me suspect you have an old version–grab the newest! (it's cross-platform now too)

Let me know if the help file leaves you with questions or problems! This version only really works peer-to-peer, connecting multiple clients together causes glitches. I'm working on a version to support many client, complex network topographies and will try to have that posted here sometime soon (I realize I said that many months ago about Max.Trip and failed!)

I'd love to hear from people who find these objects useful, even if it's just a quick "hey, I did this cool thing with it!" Post it up here or send me a note!

bens1984's icon

Update: apparently something with Max 6 & OS 10.8 gives rise to instability and lots of crashes, at least on some machines. I'm going to include the latest version of ffmpeg and try to get back to a stable state. For the time being consider this a known issue and I'll let you know when I get it hashed out!

MIB's icon

just looking into your max.trip~... quite awesome so far. We were just playing around and trying for a three-way connection. Is that supposed to be possible? or are we just dreamers ;)

EDIT:
it's late here... I should have read your post more closely - peer-to-peer only! any plans on extending this any time soon?

bens1984's icon

Max 6.0+ version of VIPR (for Mac) is now on my site here (link to "Mac Externals 5.1.7+". It tests out on the machines I have access to but if anyone sees instability please send me a note (crash logs would be lovely).

MAAD~: here is a new audio network object I'm developing. It is intended to stream raw audio between computers in a peer-to-peer fashion: 16 bit, any sample rate (systems have to use the same), 32 clients per connection, up to 256 individually addressable channels. I haven't stress tested it, I'm sure you can break it. The help file is short, but look in the 'advanced options' for useful parameters to reduce packet loss and tune your connection.

Please post or message me if you find this interesting and have questions!

vichug's icon

haha wow.

dwingus's icon

Hi Ben! Thank you so much for your work on vipr. I have a question about decoding a video stream from a Raspberry Pi camera. Does vipr only decode streams via jit.net.send or is it possible to use it to receive video from other sources. I am trying to get a raw video stream from a Raspberry Pi camera module into Jitter. The Raspberry Pi can send out a raw h264 video stream using netcat which I can then receive on my laptop using Mplayer. the command on the Raspberry pi is:

raspivid -t 0 -o - | nc 10.0.1.4 5001

and the command on the laptop to receive the stream via Mplayer is:

nc -l 5001 | mplayer -fps 31 -cache 1024

works well, looks good, little latency. But, i can't figure out a way to get the video into Jitter! So I tried using vipr to listen on port 5001 but it does not receive the video. Are there any decoding parameters I can set in vipr? like telling it to look for a specific type of video stream or does it just automatically handle the input format from the stream header? I believe MPlayer on the Mac is using the FFPEG libraries as is vipr so i thought maybe it would work. Anyway, if you have any advice or ideas I would appreciate it.

bens1984's icon

Dwingus - I am not optimistic about using vipr to get video from the Pi. The problem won't be the decompression (although the current build of vipr doesn't have h264, it could be included with a bit of work) but receiving the video in Max. [jit.net.receive] uses tcp and only talks to [jit.net.send] streams. I expect Mplayer opens a udp port and grabs any packets that come its way. Finding a way to get the stream from the Pi into Max will be the trick but I don't know of a solution currently. I would suggest trying to write a Java object (mxj) to do it (using the Java network functionality) but I suspect it will be a lot of work if no one else has done it yet.

Then once you had the stream in Max vipr, with a little modification, could decompress it.

diablodale's icon

Hello. Do you have install instructions for Windows?
I downloaded today the Windows zip file you have of VIPR. After many tries and moving files to win/sys32, max external folder, custom external folder, and my desktop...I always failed. The error when I open the vipr.maxhelp file is:

The program can't start because avcodec-54.dll is missing from your computer. Try reinstalling the program to fix this problem.

This is on Windows 8.1 x64
Using Max 6.1.6 32-bit

MrMaarten's icon

I have the same error as DIABLODALE on windows 7....

Max 6.1.7 32-bit

any thoughts?

mudassar's icon

Hi BEN

I am trying to get a hight quality video stream from MaxMSP/Jitter and receive it on VLC/FFMPEG to further re-stream it using WOWZA.

Do you think if it is possible to receive an encoded stream on VLC or FFMPEG from Vipr object ?

Solomiya Moroz's icon

Hello,

I was wondering, do you have VIPR version for Max7? Will the Max externals work with Max7 that you have on your website from 2013 or do I need a newer version? Thank you!

diablodale's icon

FYI, VIDDL is a beta package you can install with recent Max releases using their package manager. VIDDL uses ffmpeg for decompression of many types of video streams.