[streaming] VOD implementation suggestions

Gildas Bazin gbazin at altern.org
Wed Aug 25 21:59:43 CEST 2004


Hi people,

Since there has been some interest in implementing VOD support for VLC, I 
decided to gather some information (special thanks to fenrir :) and write 
up a small proposal about how to implement this.
Bear in mind that I don't really know much about RTSP so you'll have to take 
all this with a pinch of salt.

First it has to be noted that the "streaming output" architecture of VLC 
combined with the VLM (videolan manager which is part of VLC) should make 
implementing RTSP support relatively straightforward. Which means it will 
need a fair amount of code but should integrate well in the current 
architecture.

So what needs to be done ?

1 - "VOD server" plugin:
---------------------------
Most of the work needed will be to create a new "VOD server" plugin. In our 
case the "VOD server" plugin will implement an RTSP protocol stack but we 
can imagine having other "VOD server" plugins implementing other protocols 
(or alternative implementations of the same protocol).

This "VOD server" plugin will only act as a middle man between clients and 
the VLM. So it will basically receive commands from clients and send orders 
to VLM (play/pause/stop input or such). When clients request a stream for 
instance, the "VOD server" will send a start command to VLM with the 
appropriate stream output options (to select the right elementary stream 
and stream them with the requested output method).

I want to emphasis the fact that the "VOD server" wouldn't stream the input 
data itself. This part of the task would be delegated to the "streaming 
output" layer of VLC. The "VOD server" is just there for the interaction 
between the client and VLC.

2 - VLM (videolan manager):
--------------------------------
The VLM is already there but it will need to be extended to work with "VOD 
server" plugins.

VLM is used to add/register new input items with the "VOD server".
For instance: "new foo vod input file://bar.avi loop" adds a new input item 
to the videolan manager and "setup foo enabled" will later on register it 
with the "VOD server" (so clients can see/access it).

In the case of an "RTSP server", to generate the SDP for an input, we will 
need to pre-parse it to gather information about its elementary streams. 
That can be done with VLM as well, with the help of a special stream output 
module. Basically, before VLM registers an input item with the "VOD 
server", it could start playing the input with a special stream output 
module which would gather all ES information and store it in a shared 
location (like the input_item_t structure that defines the basic properties 
of an input). Once this information is gathered, the special stream output 
module will stop the input and VLM will register the input to the "VOD 
server" and pass along the ES info.

So VLM needs to be modified to:
- Start the "VOD server"
- Initiate the pre-parsing of the input to gather the ES info
- Register/Unregister an input item with the "VOD server"

3 - Pre-parsing stream output module:
-------------------------------------------
As stated above we need a simple stream output module whose only job is to 
register the elementary stream information of an input and store them in 
the input_item_t structure for later use by VLM. Gathering this info would 
be easy as the module will just have to wait until a certain amount of time 
worth of data has reached the stream output fifos. When this amount of time 
has been read from the input, we can assume all the ES are there.
Pre-parsing could of course also be extended to full parsing if need be.
Once the module has the ES info, it could signal the input to stop.

4 - The RTP (access output) plugin:
----------------------------------------
We already have an RTP access output plugin (part of the streaming output 
architecture) so I'm not sure we need much work there.


Well, I think that's about it.
I don't see that as a very difficult job and furthermore there are several 
separated tasks here so it could be done cooperatively....
So all we need now are people motivated enough to start the work :)

Regards,

--
Gildas

-- 
This is the streaming mailing-list, see http://www.videolan.org/streaming/
To unsubscribe, please read http://www.videolan.org/support/lists.html
If you are in trouble, please contact <postmaster at videolan.org>



More information about the streaming mailing list