Page 1 of 1

The Illusive Art of Streaming ISOs

Posted: 08 Dec 2012 20:05
by kfp
For a long time I've been trying to come up with a way to stream DVDs stored locally to PCs elsewhere. I'm hesitant to simply transcode all the video off the DVDs because of the variety of rich features from the DVDs that I would lose. I want to maintain the menus of the DVDs (to easily access episode commentaries, outtakes, and other special features) and be able to access my whole library. I've done some rough calculations and a 5GB DVD ISO that is 2.5 hours of video would require somewhere around 5Mb/s for streaming directly. This should be doable on my LAN but probably not so much outside.

My solution basically boils down to streaming the menus off the ISO while transcoding the actual videos to serve via some HTML friendly format.

Some specifics:

1. Client makes a request to a web app running on my server.
2. I serve up some strictly HTML/JS/AJAX menu system for navigating the library as well as a an applet which includes a vlcj video player.
3. Once a DVD is chosen, the web app will start streaming the app locally with VLC and return the location of the stream to the client.
4. The client gets the stream location and starts reading the stream with the vlcj video player.
5. The client will make AJAX calls to the server to perform menu functions (arrow keys, enter, etc)
6. The web-app will receive the calls and in turn pass them to the local instance of VLC which will then be reflected back to the client via the stream.
7. Once an actual video is chosen by the client, the server will terminate the current stream and start a new stream transcoding the video as well.
8. Perhaps this stream can be served up in some HTML5 compliant format. If not, we'll just stream to our vlcj applet and update the path (or perhaps use the same path if that doesn't cause problems).
9. Video controls at this point are either handled via HTML5 magic client side or in a similar method to what was described in steps 5-6.

I'd love any feed back that anyone has. Am I re-inventing the wheel? Are there fatal flaws? I assume that cvlc probably has some controls I can tap into for step 6, but perhaps I should use vlcj on the server as well for more refined controls/better integration into the web-app.

Thanks for taking a look!

Re: The Illusive Art of Streaming ISOs

Posted: 10 Dec 2012 14:41
by Jean-Baptiste Kempf
What about using the VLC webplugin to navigate from the client?

Re: The Illusive Art of Streaming ISOs

Posted: 12 Dec 2012 13:33
by kfp
I've put together a simple proof of concept using the webplugin and it looks like this should drastically simplify my front end. Thanks for the suggestion!

Do you know if cvlc exposes a mechanism I can use to navigate the DVD menu before transcoding the main video? Or should I explore vlcj for that piece?

Re: The Illusive Art of Streaming ISOs

Posted: 13 Dec 2012 00:24
by Jean-Baptiste Kempf
Not really sure what you are trying to achieve...

Re: The Illusive Art of Streaming ISOs

Posted: 27 Dec 2012 22:56
by kfp
Not really sure what you are trying to achieve...
At a very basic level I'm trying to recreate native DVD functionality streaming over the internet to a remote browser. I doubt I'll have enough bandwidth to stream the whole ISO, so I'm trying to be sneaky and transcode the main video portion of the DVD on the fly while simply streaming the main menus as is.

I was unable to navigate the DVD through menus using the mouse with the web plugin and did not find any JavaScript bindings to do so either (http://wiki.videolan.org/Documentation:WebPlugin). Luckily I was able to find in the vlcj MediaPlayer functions to traverse and activate items in the menu (http://vlcj.googlecode.com/svn/trunk/vl ... vate%28%29). This has let me create a bunch of AJAX calls to perform menu changes and skip around the DVD through the browser (with the DVD ISO, client, and server all on the same machine). This is pretty much all I wanted from the streaming side.

Next is to transcode the selected titles on the fly. Ideally this would happen automatically once a user selects a DVD menu item which takes the user away from a main menu and into a video. Does libvlc provide a method to tell if the currently playing item is/contains a DVD menu or is simply a video? I'm definitely not an expert at how DVDs work under the hood so my fear is that menus are actually abstracted from the video in some manner so I won't be able to tell which is which.

I hope I've been a bit more clear. Thanks again!

Re: The Illusive Art of Streaming ISOs

Posted: 28 Dec 2012 10:33
by sherington
Does libvlc provide a method to tell if the currently playing item is/contains a DVD menu or is simply a video? I'm definitely not an expert at how DVDs work under the hood so my fear is that menus are actually abstracted from the video in some manner so I won't be able to tell which is which.
I'm assuming you are still talking about vlcj here...

I usually strip menus when making the ISOs for my own media server solutions, so I don't know if this method is 100% reliable, but you can try this:

Code: Select all

List<TrackDescription> descriptions = mediaPlayer.getTitleDescriptions();
Then you can iterate those descriptions looking for the presence of "DVD Menu".

For example, I had a quick try and got this:

Code: Select all

Title Descriptions: [TrackDescription[id=0,description=DVD Menu], TrackDescription[id=1,description=Title 1 [2:15:13]]]
The id is used with mediaPlayer.setTitle() and mediaPlayer.getTitle().

Re: The Illusive Art of Streaming ISOs

Posted: 28 Dec 2012 10:41
by RĂ©mi Denis-Courmont
DVD menus cannot be "streamed", and that is all.

So far, the only way to access DVD menus remotely consists of mounting a filesystem with the ISO inside (or the actual DVD drive).

Re: The Illusive Art of Streaming ISOs

Posted: 28 Dec 2012 14:26
by kfp
sharrington:

Ah, I see. I gave that a shot and it looks like DVD Menu appears for the few DVDs I have ripped so far. I'll use this moving forward and maybe just assume the first title is the menu if I don't see it explicitly. Thanks!

Remi:

I suppose I'm not entirely "streaming" the menu. What I'm doing currently is using a HeadlessMediaPlayer from vlcj and streaming it's output while making calls back to my web-app which tells the MediaPlayer to move the menu around. This has produced an interesting bug in that I cannot actually see the menu cursor moving around, only the underlying video. I can verify the cursor is "moving" on the server side by moving it a number of times I would on a normal DVD player, selecting an item, and verifying that the expected item is playing.
The menu cursor appears to be on some different layer of video and isn't (or cannot be as I suspect your comment was suggesting) streamed. Is there any way to get menu information (number of items, position/order)? I don't mind "faking" the menu interaction but would like to provide whatever feedback I can to the client to help them navigate.

Re: The Illusive Art of Streaming ISOs

Posted: 09 Feb 2013 02:55
by kfp
For anyone interested, this is as far as I got. No transcoding, still doesn't highlight your menu items, but does stream the dvds. Good enough for local use.

https://github.com/kfp/isoStream