Curiosity is bliss    Archive    Feed    About    Search

Julien Couvreur's programming blog and more

Video streaming over HTTP

 

My previous roommate and I used to run into this problem a lot: we'd want to watch a movie in one room, but the file would be on another computer.
This is a general problem that I mentioned before in "Private Information Network".

But we now have a partial solution to this video/DivX streaming problem. It uses the super cool™ streaming-over-HTTP feature of the VideoLAN client and a custom HTTP proxy.

VideoLAN:
I had heard about the MPEG-2 (DVD) streaming capabilities of this software before, but only recently found out about the DivX support. To use it, you just need to put the DivX file on an HTTP1.1 web server and use the url in VLC (VideoLAN client).
It supports jumping to a specific part of the file, but it takes a few seconds (until a keyframe is reached, I guess) for the complete image to be refreshed to the new location in the stream.

StreamAgent:
The idea of StreamAgent is to have a local HTTP agent map all the servers in a group together and proxy the requests to the appropriate server.
For example, on machine1 (running agent1), you could use http://localhost:<StreamAgentPort>/agent2/GetFile?file=test.avi to stream test.avi from machine2 (running agent2).

Our tests on a wired LAN were successful and the video streamed smoothly. But usability problems made it a pain to actually use, because inter-agent module wasn't flexible enough (use of IP addresses, agents have to be started in a specific order,...) and we only had basic content discovery/browsing.

In terms of proxying the HTTP requests, supporting the Content-Range header is key for VLC to download chunks of the file.
Parsing the HTTP request and response was more trouble though. The standard IO packages from the .Net framework wouldn't let us parse mixed streams (text and binary data), and switching stream objects on the fly didn't work because of buffering issues.

The inter-agent communication is supposed to use a P2P transport, to ensure "connectivity" between agents that are separated by NATs. It would also handle the naming the agents within the group (most home machines aren't registered in the DNS). But our initial implementation only supports two machines that can directly connect to each other by IP, because we couldn't find a P2P framework for use in C#.
Microsoft's P2P SDK doesn't come with managed wrappers, and doesn't support traversing IPv4 NATs.
JXTA seems pretty suitable from what I read (restores end-to-end connectivity as much as possible, secures the peer group,...), but there is any .Net implementation.

Future:
I'm thinking about learning some more about JXTA and attempting a Java implementation of the StreamAgent. Let me know if you'd be interested.
The current implementation isn't online, as I don't have a running CVS server for now, but I still have the CVS archive. Also, it is fairly limited anyway, since the inter-agent communication component is the most trivial possible and most of the code is HTTP proxying...

An interesting extension would be to offer a programmatic API to a running StreamAgent (rather than thru HTTP). This could be used to allow applications to replicate/sync data accross the group, like bookmarks for example. It could also be used to provide remote file access with local caching (see Intermezzo).

______________________________________


But Clipstream is the best playerless Video Streaming.

See the Application Service Provider Model at http://www.VideosOnWeb.com

Video Streaming at less than a cent per view !

This is http also and it needs no players or plugins so offers universal reachability.

Posted by: Abhijit (July 21, 2004 12:16 PM) ______________________________________

I also found out about Wimpy (at http://www.wimpyplayer.com/ ), which seems nice with a flash-based player for audio (mp3) and video (not sure what format). The server install seems quite simple.
No client install, but the product is not free (and the source is obfuscated). I still like VideoLAN better ;-)

Posted by: Julien (August 23, 2004 04:46 PM) ______________________________________

There is a new divx/xvid/3ivx (and more), mpeg4 and Theora player for streaming over HTTP , with Ogg Vorbis audio streams: Streamplug

It's an advanced mpeg4 browser plugin , with a 200Ko size.
No pre-required codec, and got a perfectly smooth playback, even on 30fps movies, into mozilla/firefox and Internet explorer browsers !
Speed and quality are impressive !

http://www.streamplug.com

and some websites to test it with some free movies (you'll need to accept the installation of streamplug (the web-player plugin is only 200K ):

http://www.troma-france.net/flims.htm/ 2 films Troma
http://bongben.free.fr/
http://www.play-mpeg4.com/ Merry christmas
http://www.dream-plug.com/ 4 films
http://www.play-divx.com/ Gullivers travel
http://www.divx-plugin.com/ Nosferatu
http://www.play-xvid.com/ Superman
http://www.acte-gratuit.net/
http://www.avi-stream.com/ Duckncover
http://www.video-plug.com/
http://www.dream-player.com/ spooks run wild
http://www.direct-stream.com/ night of the living dead
http://www.stream-plugin.com/ the brain that wouldnt die
http://www.ogm-stream.com/ A man on the moon
http://www.mpeg4-stream.com/ 3d cinema
http://www.mp4-stream.com/ Spasman2, from Lopeprod.com
http://www.real-stream.com/ the lounge

and some audio ones :
http://www.download-ogg.com/
http://rod.cat.free.fr/Rod_Noises_In_My_Head_streamplug.html/ Rod Noises In My Head
http://www.skyzophrene.org/

Even on small computers, it supports full screen resizing, 16/9, 4/3 and square ratio, and proxy settings... and more
This plugin is free for non-commercial purposes for audio and video web-streaming, you can use it for your own streams !
Maybe is it what you need ?

Posted by: gcluber (March 22, 2005 07:42 AM)
comments powered by Disqus