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!