  VideoLAN Howto
  written and maintained by Marc Ariberti <marcari@vide
  olan.org> and Alexis de Lattre <alexis@videolan.org>
  version 1.5 2002/05/25

  This howto describes how to use the complete VideoLAN solution.
  ______________________________________________________________________

  Table of Contents



  1. Introduction

     1.1 What is the VideoLAN project ?
     1.2 About this Howto
     1.3 Legal notice
     1.4 The documentation of the project
     1.5 Requirements
        1.5.1 The skills
        1.5.2 The VideoLAN Client
        1.5.3 The VideoLAN Server and mini-Server
        1.5.4 Get a streamable MPEG file
        1.5.5 The VideoLAN Channel Server
        1.5.6 The Network
     1.6 The mailing-lists

  2. Overview of the existing streaming solutions

     2.1 Unicast
        2.1.1 What is unicast and why use it ?
        2.1.2 Network hardware required
        2.1.3 Server configuration
           2.1.3.1 (TT
           2.1.3.2 (TT
        2.1.4 Client configuration
     2.2 Broadcast
        2.2.1 What is broadcast and why use it ?
        2.2.2 Network hardware requirements
        2.2.3 Server configuration
           2.2.3.1 (TT
           2.2.3.2 (TT
        2.2.4 Client configuration
     2.3 Multicast
        2.3.1 What is multicast and why use it ?
        2.3.2 Network hardware required
        2.3.3 Server configuration
           2.3.3.1 (TT
           2.3.3.2 (TT
        2.3.4 Client configuration
     2.4 Unicast IPv6
        2.4.1 Basics
        2.4.2 Server configuration
        2.4.3 Client configuration

  3. Using channel tools

     3.1 Multicast and miniVLCS
        3.1.1 Building miniVLCS
        3.1.2 miniVLCS configuration
        3.1.3 Run mini-vlcs
        3.1.4 (TT
     3.2 Broadcasting and VLANserver + VLANbridge
        3.2.1 Overview
        3.2.2 The two versions of the tools
        3.2.3 Installation and configuration of the VLAN solution
           3.2.3.1 mini VLAN Server
           3.2.3.2 vlb-linux
        3.2.4 (TT

  4. Video On Demand

     4.1 Overview
        4.1.1 What is Video On Demand ?
        4.1.2 Hardware required
        4.1.3 Design of the VOD solution
     4.2 VOD with VideoLAN
        4.2.1 On the server
        4.2.2 On the client
        4.2.3 Client launched by a Web browser
        4.2.4 Using a channel tool for VOD

  5. Designing a complete VideoLAN solution

     5.1 The VideoLAN Servers
     5.2 The VideoLAN Channel Servers
        5.2.1 Multicast solution
        5.2.2 VLANs solution

  6. Conclusion



  ______________________________________________________________________

  1.  Introduction



  1.1.  What is the VideoLAN project ?


  VideoLAN is a complete software solution for video streaming,
  developed by students at the Ecole Centrale Paris and contributors
  from all over the world, under the General Public License (GPL). It
  has been designed for streaming MPEG 1 and MPEG 2 videos on local area
  networks (LAN), but it can be extended to metropolitan or wide area
  networks (MAN, WAN), thanks to the multicast technology.

  The VideoLAN solution includes a server, which can stream video from
  various sources (file, DVD, satellite and MPEG 2 encoder), a client,
  which can receive, decode and display MPEG 1 and MPEG 2 streams and,
  if necessary, a channel server which tells automatically to the client
  the parameters needed to receive the stream.

  Here is an illustration of the complete VideoLAN solution :



          DVD --->-                 Unicast/Broadcast/Multicast
                    \                           ---
          File --->--     --------            /     \            --------
                     |->-| Server |=====>====|  LAN  |---->-----| Client |
       Satellite ->--    | (VLS)  |           \     /           | (VLC)  |
                    /     --------              ---              --------
         MPEG2 -->-                              ^
        encoder                                  |
                                                 v
                                          ----------------
                                         | Channel Server |
                                         |    (VLCS)      |
                                          ----------------


  More details about the project can be found on the VideoLAN Web site.


  1.2.  About this Howto


  This Howto is designed to explain how to use the complete VideoLAN
  solution. It presents the different possibilities of VideoLAN and
  which configuration you should adopt depending on the configuration of
  your network.
  1.3.  Legal notice


  Copyright () 2002 by the VideoLAN project.

  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.1 or
  any later version published by the Free Software Foundation ; with no
  Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
  Texts. The text of the license can be found on .


  1.4.  The documentation of the project

  There are four main documents :

    the VideoLAN Quickstart,

    this VideoLAN HOWTO,

    the VideoLAN Server user guide,

    the VideoLAN Client HOWTO.

  The up-to-date version of these documents can be found on the VideoLAN
  Web Site.


  1.5.  Requirements



  1.5.1.  The skills


  Basic skills on Linux and Network should be enough.


  1.5.2.  The VideoLAN Client


  The VideoLAN Client (vlc) works on many platforms : Linux, Windows,
  Mac OS X, BeOS, *BSD, Solaris, iPaq, QNX. It can read MPEG 1, MPEG 2
  and MPEG 4 / DivX files from a hard disk or a CD-ROM drive, read DVDs
  and VCDs. But the most important function is that it can read MPEG 1,
  MPEG 2 and DVDs streamed on a network. vlc requires at least a Pentium
  400Mhz with 32MB of RAM.


  1.5.3.  The VideoLAN Server and mini-Server


  The VideoLAN Server (vls) can read videos from :

    an MPEG 1 or MPEG 2 file stored on a hard drive or on a CD,

    a DVD located in a local DVD drive or copied on a hard drive,

    a satellite card,

    an MPEG encoding card ;

  and stream it on the network.

  A Pentium 100 MHz with 32 MB of memory should be enough to send one
  stream on the network. When streaming a lot of videos stored on a hard
  drive, the actual limitation is not the processor but the hard drive
  and the network connection.

  vls works under Linux, Solaris and Windows. Currently, the Windows vls
  version of is only able to stream a video from a file.

  The VideoLAN mini-Server (vlms) is only capable of streaming an MPEG
  file. vlms works on Linux only. It is easier to install and configure
  than vls and should be used mainly for testing purposes.


  1.5.4.  Get a streamable MPEG file


  vls and vlms can stream MPEG 1 or MPEG 2 files that meet two critera :


  1. the file must be MPEG PS (Program Stream) or MPEG TS (Transport
     Stream), that contain video and audio multiplexed. vls and vlms
     can't stream MPEG ES (Elementary Stream), i.e. a file with only
     audio or video.

     In order to know if an MPEG file is MPEG PS, MPEG TS or MPEG ES,
     read the file with vlc and look at the messages (with the interface
     : Click on "View" and "Messages", or use the command line "vlc -v")
     and look for a line :



       module: locking demux module `mpeg_XX'



  If XX = ps or XX = ts, then your file is MPEG PS and MPEG TS respec
  tively , and you may be able to stream it. If XX = es, then your file
  is MPEG ES and is not streamable.

  2. the sequence header of the video must repeat itself regularly,
     which is often the case with MPEG 2, but very rare with MPEG 1.
     There is no easy way to know if the sequence header is repeated
     regularly.

     Files with a .vob extension are normally MPEG 2 files and files
     with .mpg or .mpeg extension or usually MPEG 1 files.

  You can download this streamable MPEG 2 PS file for your tests : .


  1.5.5.  The VideoLAN Channel Server


  The VideoLAN Channel Server (vlcs) is the central architecture that
  manages the network. There are different versions of vlcs for
  different kinds of networks. For example, if your network supports
  multicast, you will use mini-vlcs. If your network doesn't support
  multicast but supports VLANs, you should use mini VLAN Server.  vlcs
  works on Linux only.


  1.5.6.  The Network


  You will need a network, which can be as small as one ethernet 10 /
  100 Mbit/s switch or hub, and as big as the whole Internet ! See if
  your network supports "multicast". The bandwidth needed is :

    6 to 9 Mbit/s for a DVD,

    3 to 4 Mbit/s for an MPEG 1 stream, an MPEG 2 stream (from a
     satellite or an MPEG 2 encoding card).


  1.6.  The mailing-lists


  If you have problems using VideoLAN, and if you don't find the answer
  to your problem in the ``documentation'', please look at the online
  archive of the mailing-lists. There are 3 english-speaking mailing-
  lists for the users :


    vlc@videolan.org for the questions on vlc,

    vls@videolan.org for the questions on vls and vlms,

    vlcs@videolan.org for the questions on vlcs and the network.

  The mailing lists above also have their equivalent for the developers
  (they also receive the commit mails) :


    vlc-devel@videolan.org for the development of vlc,

    vls-devel@videolan.org for the development of vls and vlms,

    vlcs-devel@videolan.org for the development of vlcs and the network
     tools.

  If you want to subscribe or unsubscribe to the mailing-lists, please
  go to the VideoLAN Web Site


  2.  Overview of the existing streaming solutions

  In this section, we assume that :

    a VideoLAN Client (vlc) is installed on all the client machines.
     Please, refer to the VideoLAN Quickstart or the VideoLAN Client
     HOWTO for the installation instructions.

    a VideoLAN Server (vls) or a VideoLAN mini-Server (vlms) is
     installed on a machine. Please, refer to the VideoLAN Quickstart or
     the VideoLAN Server user guide.

    you have the knowledge and the passwords to configure your network
     hardware (such as switches and routers).


  2.1.  Unicast


  2.1.1.  What is unicast and why use it ?


  Unicast is a simple protocol : the packets are sent directly from one
  machine to another. With VideoLAN, this mean that the source IP
  address is the one for the server machine, and the destination IP
  address is the one for the client machine. With unicast, the stream
  can go through routers without any problem.

  Unicast should be used when you want to send the stream to one client
  machine only. It is also used for ``Video on Demand''.


  2.1.2.  Network hardware required


  No special feature or configuration of your network hardware is
  required.

  The only problem is the bandwidth. As explained in the
  ``introduction'' , an MPEG 1 or 2 stream needs between 3 and 9 Mbit/s.
  So a 10 Mbit/s Ethernet network should be enough. 100 Mbit/s would be
  needed if you want to stream several videos at the same time or stream
  one big DVD stream (a DVD stream can go up to 11 Mbit/s if there are
  many languages, subtitles and multiple angles).



  2.1.3.  Server configuration


  You can either use vlms or vls to do unicast.


  2.1.3.1.  vlms


  vlms can only stream valid MPEG PS files stored on a hard drive.

  You can download this streamable MPEG 2 PS file for your tests : .

  In the example below, the IP address of the client machine is
  10.0.0.2. The name of the MPEG file is called MPEG_file_name.

  Run vlms :



       % vlms -d 10.0.0.2 MPEG_file_name



  If you want the server to stream the file continuously, you can use
  the -l option :


       % vlms -d 10.0.0.2 -l MPEG_file_name



  or if you want to send it 3 times use the option -n 3 :


       % vlms -d 10.0.0.2 -n 3 MPEG_file_name



  2.1.3.2.  vls

  Modify the configuration file vls.cfg by adding the following :

       BEGIN "Channels"
          net1 = "network"
       END

       BEGIN "net1"
           Domain = "Inet4"
           Type = "unicast"
           DstHost = "10.0.0.2"
           DstPort = "1234"
       END



  Then, restart vls and start to stream a video to "net1".


  2.1.4.  Client configuration


  On the client, run vlc with this command line :


       % vlc udp:



  You can also use the interface :


       % vlc



  and then click on "Net" and select "UDP".


  2.2.  Broadcast


  2.2.1.  What is broadcast and why use it ?


  Broadcast is a very dirty method to stream video : the stream is sent
  to all the machines of a subnet at the same time. With VideoLAN, this
  means that the source IP address is the IP address of the server, and
  the destination IP address is the broadcast IP address of the subnet.
  Broadcast is considered a dirty method because all the machines of the
  subnet receive the stream, even the machine that don't want to watch
  the stream. It creates a lot of pollution on the network and some
  devices don't like to receive too much broadcast.

  So broadcast should be used to stream video to multiple clients at the
  same time only if your network hardware doesn't support multicast (see
  ``next subsection'').


  2.2.2.  Network hardware requirements


  No special feature or configuration of your network hardware is
  required. It only needs to have the necessary bandwidth, as for
  unicast.

  2.2.3.  Server configuration

  You can either use vlms or vls to do broadcast.

  2.2.3.1.  vlms


  In the example below, the broadcast IP address of the subnet is
  10.0.0.255. The name of the MPEG file is called MPEG_file_name.

  Run vlms :



       % vlms -d 10.0.0.255 MPEG_file_name



  If you want the server to stream the file continuously, do :


       % vlms -l -d 10.0.0.255 MPEG_file_name



  2.2.3.2.  vls

  Modify the configuration file vls.cfg by adding the following :



       BEGIN "Channels"
          net1 = "network"
       END

       BEGIN "net1"
           Domain = "Inet4"
           Type = "broadcast"
           DstHost = "10.0.0.255"
           DstPort = "1234"
       END



  Then, restart vls and start to stream a video to "net1".


  2.2.4.  Client configuration

  On the client, run vlc with this command line :


       % vlc udp:



  You can also use the interface :


       % vlc

  and then click on "Net" and select "UDP".


  2.3.  Multicast



  2.3.1.  What is multicast and why use it ?


  When you use unicast or broadcast, you can encounter the following
  problems :


    with unicast, when a lot of clients want to receive the stream, the
     network interface of the server becomes saturated. So the number of
     clients is very limited, especially when the stream is big.

    with broadcast on a LAN, the number of clients are not limited
     because all the machines of the subnet receive the stream, with
     only one stream going out of the network interface of the server.
     But the machines that do not want to receive the stream are
     polluted and some devices do not like to receive huge broadcasts.
     If you want to send several streams at the same time, the network
     becomes oversaturated.

  The above problems are why the multicast protocol was invented. With
  multicast, the packets are sent on the network to a multicast IP group
  which is designated by its IP address. Multicast IP addresses belong
  to the Class D : 224.0.0.0 -> 239.255.255.255.

  The machines can join or leave a multicast group by sending a request
  to the network. The request is usually sent by the kernel of the
  operating system. Linux (if the option "IP multicast" in the category
  "Networking options" is activated in the configuration of the kernel),
  Windows (at least 98, 2000 and XP) and MacOS X support multicast. The
  vlc takes care of asking the kernel of the operating system to send
  the join request.

  The network devices do everything necessary to keep in memory which
  machine belongs to which group and forwards the stream to the client.
  It is possible for one client to belong to several groups.

  Below is a scenario given as an example :

  1. vls sends a stream to the multicast IP address 239.255.12.42.
     Client n1 and n2 already joined the multicast group and receive
     the stream.



       Server (vls)            Network                 Clients (vlc)

       stream  --------------> 239.255.12.42 ----------> client n1
                                               |
                                               --------> client n2



  2. Client n3 sends a "join" request to the multicast group in order
     to receive the stream.



  Server (vls)            Network                 Clients (vlc)

                                  <-------------- client n3
                                  join 239.255.12.42



  3. Client n3 now receives the stream.


       Server (vls)            Network                 Clients (vlc)

                                               --------> client n1
                                               |
       stream  --------------> 239.255.12.42-----------> client n2
                                               |
                                               --------> client n3



  4. Client n1 sends a "leave" request to the multicast group.


       Server (vls)            Network                 Clients (vlc)

                                       <-------------- client n1
                                       leave 239.255.12.42



  5. Client n1 doesn't receive the stream any more.


       Server (vls)            Network                 Clients (vlc)

       stream  --------------> 239.255.12.42 ----------> client n2
                                               |
                                               --------> client n3



  2.3.2.  Network hardware required


  Be careful ! Make sure that your network devices support multicast.

  If they do not, you will have the same effect as broadcast. For
  example, hubs do not support multicast : if a machine connected to a
  hub joins a multicast group, all the machines connected to the hub
  will receive the stream.

  Please refer to the management guide of your switches and routers to
  see if they support multicast. All the recent manageable switches and
  routers of the big network hardware manufacturers support multicast.
  This document does not explain how to configure your network because
  it is specific to each manufacturer.



  2.3.3.  Server configuration

  You can either use vlms or vls to do multicast.

  2.3.3.1.  vlms

  Put the multicast IP address as the destination address :



       % vlms -d 239.255.12.42 MPEG_file_name



  Increase the TTL (Time To Live) value if you want your multicasted
  stream to go through several routers. Every router decreases the TTL
  by 1, and a stream can't go through a router if its TTL is 1.  For
  this, use the -t option :



       % vlms -d 239.255.12.42 -t 12 MPEG_file_name



  2.3.3.2.  vls


  In the configuration file vls.cfg, put the multicast IP address in the
  DstHost field and "multicast" in the Type field.

  Do not forget to increase the TTL (Time To Live) if you want your
  multicasted stream to go through several routers.



       BEGIN "Channels"
          net1 = "network"
       END

       BEGIN "net1"
           Domain = "Inet4"
           Type = "multicast"
           TTL = "1"
           DstHost = "239.255.12.42"
           DstPort = "1234"
       END



  Then, restart vls and start to stream a video to "net1".


  2.3.4.  Client configuration

  On the client, run vlc with this command line :


       % vlc udp:@239.255.12.42



  You can also use the interface :


       % vlc



  and then click on "Net" and select "UDP Multicast" and write the mul
  ticast IP address "239.255.12.42".


  2.4.  Unicast IPv6


  2.4.1.  Basics


  You should already have IPv6 configured on the client and server
  machines and on your network. For more information see the Linux IPv6
  howto.

  Unicast IPv6 was only tested under Linux, so we cannot tell if it
  works on other platforms. If you use another operating system with
  IPv6, please send us your feedback.


  2.4.2.  Server configuration


  IPv6 is NOT supported by vlms. You must use vls.

  In the configuration file vls.cfg, you have to change the destination
  IP address to an IPv6 address, and tell the system that you want to
  stream using IPv6. Here is sample partial vls.cfg :



       BEGIN "Channels"
          net1 = "network"
       END

       BEGIN "net1"
          Domain = "Inet6"
          DstPort = "1234"
          DstHost = "3ffe::12"
       END



  In this example :

    3ffe::12 is the IPv6 address of the client,

    Inet6 tells vls to use IPv6.

  Then, restart vls and start to stream a video to "net1".


  2.4.3.  Client configuration

  On the client, run vlc with this command line :



  % vlc udp6:



  or


       % vlc --ipv6 udp:



  If you want to specify the port on the command line of vlc, for
  example port 4321 :



       % vlc udp6:@:4321



  3.  Using channel tools


  Channel service tools are useful when you want to stream multiple
  videos at the same time and enable the clients to change channel (i.e.
  switching from one stream to another) easily without typing IP
  addresses, but just using the interface and selecting a channel
  number.

  The channel service tool that you will use depends on your network :


    if your network supports multicast, you will use mini VideoLAN
     Channel Server (miniVLCS) ;

    if your network doesn't support multicast but supports VLANs, you
     will use a VLAN server (either the VLAN Server or the mini VLAN
     Server), and if your router cannot filter between VLANs, you will
     use a VLAN bridge in order for the clients to be able to
     communicate with all the other machines when watching a stream.

    if your network doesn't support multicast nor VLANs, then you will
     not be able to stream multiple videos at the same time to the
     clients.  You can broadcast all the streams on different ports and
     use miniVLCS, but this is so dirty that you shouldn't even think
     about it !

  Warning : the network tools that will be presented in this section
  have been tested only under Linux. We cannot guarantee they will work
  with other operating systems.


  3.1.  Multicast and miniVLCS


  If your network supports multicast, you will use the mini VideoLAN
  Channel Server (miniVLCS) as your channel tool. This program sends the
  parameters the VideoLan Clients need in order to receive the streams.



  3.1.1.  Building miniVLCS


  Download the file miniVLCS-0.1.2.tar.gz from the Network download
  page.

  Then uncompress the archive and build the program :


       % tar xvzf miniVLCS-0.1.2.tar.gz
       % cd miniVLCS-0.1.2
       % make



  It creates an executable program named vlcs.


  3.1.2.  miniVLCS configuration


  Edit the configuration file vlcs.conf.

  The first line corresponds to channel 0, the second line corresponds
  to channel 1, the third line to channel 2, and so on.

  In each line, put what you would type on the command line of vlc,
  except for the first line I: nostream. It means that you don't stream
  anything in channel 0.

  For example, if you have two multicast stream :

    Channel 1 : 239.255.12.42

    Channel 2 : 239.255.12.43

     your vlcs.conf file would be :


       I: nostream
       udp:@239.255.12.42
       udp:@239.255.12.43



  3.1.3.  Run mini-vlcs

  As normal user, do :


       % ./vlcs



  You must restart vlcs every time you change the configuration file
  vlcs.conf.


  3.1.4.  vlc  configuration



  The simplest solution is to use the interface of vlc : click on "Net",
  select "Channel server", write its IP address or DNS name.

  Then, you see a new section "Network Channel" on the interface.
  Select the desired channel and click on Go!.


  3.2.  Broadcasting and VLANserver + VLANbridge

  3.2.1.  Overview


  If your network doesn't support multicast but supports VLANs, you will
  use a VLAN server. If your network supports multicast, you will
  certainly NOT want to use this solution, because it is far more
  complex to set up and far more dangerous for the stability of your
  network. The VLAN solution has been tested on "our" previous network
  (the network of the student residence of the Ecole Centrale Paris) and
  worked well. But we now have a new network which supports multicast,
  so the VLAN solution is not tested nor developed any longer.

  In order to explain the VLAN solution, I will take the example of our
  previous network. This network had :


    an ATM 155 Mbit/s backbone,

    on the periphery, 10 Mbit/s Ethernet switches with VLAN support.

  As an MPEG stream needs a bandwith between 4 to 9 Mbit/s, we could
  send multiple streams on our 155 Mbit/s backbone, but each student had
  a 10 Mbit/s connection and therefore could only receive one stream at
  the same time. It was out of the question to send the stream to
  machines that didn't want to receive it.

  So the idea was to broadcast each stream in a VLAN, different from the
  regular VLAN. In order for a student to change channel, we needed to
  change his machine of VLAN. This was the job of the VLAN Server. The
  VLAN Server received the requests of the VideoLAN Clients and changed
  the machines of VLAN by sending SNMP requests to the switches.

  We had the following VLAN configuration :

    VLAN 1 : VLAN for the switches,

    VLAN 2 : regular VLAN with no stream broadcasted, called channel 0,

    VLAN 3 : one stream broadcasted, called channel 1,

    VLAN 4 : one stream broadcasted, called channel 2,

    VLAN 5 : one stream broadcasted, called channel 3,

  The VLAN Server has a big database with the correspondence between the
  MAC addresses of the clients Ethernet network cards and the couple
  (switch, port) where the client machine is connected. The VLAN Server
  can fill up his database and update-it automatically by sending
  regularly SNMP requests to the switches.

  Let's take the following scenario as an example :

  1. The VLAN configuration is as described above. All the computers are
     in VLAN 2, which is the regular VLAN. Three streams are broadcasted
     repectively in VLAN 3, 4 and 5.


  2. A student wants to watch channel 1. He starts vlc on its machine
     and select channel 1. When he clicks on "Go!", his computer sends a
     request to the VLAN Server. This requests contains the MAC address
     of his Ethernet card and the number of the channel that he wants to
     watch.

  3. The VLAN Server receives this request. It looks into its database
     to see on which switch and which port of the switch the computer of
     the student is plugged. It also knows that channel 1 is broadcasted
     in VLAN 3. It sends an SNMP request to the switch telling it to put
     the port on which the student's computer is plugged in VLAN 3.

  4. The student's machine receives the stream and his vlc displays it.

  5. The student can select channel 2 or 3. His computer will send a new
     request to the VLAN Server. The VLAN Server will send another SNMP
     request to the switch telling it to put the port of which the
     student's computer is connected is VLAN 4 or 5.

  6. When the student quits vlc, his machine sends another request to
     the VLAN Server asking to be put back to the regular VLAN (i.e.
     VLAN 2).  The VLAN Server receives the request and put the port
     back to VLAN 2.

  There is another problem : we want the machines in VLAN 3, 4 and 5 to
  be able to communicate with all the other machines. If you have a good
  router, you can configure it so as to let the different VLANs
  communicate but without letting the streams broadcasted by vls in a
  VLAN go to the other VLANs. But if you have a bad router like our old
  router, you need to develop another solution, called VLANbridge. The
  idea of the VLANbridge is to have a machine under Linux connected to
  all the VLANs.  This machine is configured so as to let the different
  VLANs communicate, but it prevents the streams broadcasted by vls in a
  VLAN go to the other VLANs.


  3.2.2.  The two versions of the tools


  First, the VideoLAN team developed a VLAN Server and a VLANbridge in C
  language. When a computer asked to go to channel 1, it sent a request
  to the VLANserver. The VLANserver received this request, put the port
  of the switch on which the computer was connecter in VLAN 3, and
  transmitted this information to the VLANbridge so that the computer
  was "bridged" with the other VLANs. The advantage of this solution was
  that the computer hosting the VLAN Server could be a pretty modest
  machine.  But the VLAN Server was quite complex (all his database was
  written from scratch in C language !), it segfaulted too often, there
  was regularly MAC addresses missinig in its database, and there was
  sometimes some problem of communicaction with the VLANbridge.

  Then, in year 2001, the VideoLAN team started to develop a new set of
  tools for the VLAN solution.

  Marc Ariberti and Boris Dors developped a new VLANbridge, called vlb-
  linux. The idea was that the VLANbridge sould learn the changes by
  itself, and didn't need to communicate with the VLAN Server.  They
  developed a patch for the bridge module of the Linux kernel, so as to
  serve the needs of VideoLAN. You just have to tell to the VLANbridge
  the MAC addresses of the vls, and it automatically learn which machine
  is in which VLAN, and enable the VLANs to communicate but it firewalls
  the packets that have the source MAC address of a vls.

  Marc Ariberti and Christophe Massiot developed a new VLAN Server,
  called mini VLAN Server. The idea was to use a PostgreSQL database
  instead of the "hand-made" database of the VLAN Server. The mini VLAN
  Server is written in PHP (for the heart and all the requests to the
  SQL database) and C (for the reception of the requests from the
  VideoLAN Clients). It is more reliable, it never segfault, but it
  needs a decent machine (we used a 300Mhz Pentium with 128Mo de RAM for
  a network of 1000 machines). The mini VLAN Server cannot be used with
  the old VLANbridge.

  Eventually, if your network doesn't support multicast, we advise you
  to use the mini VLAN Server. And if you router cannot make the VLANs
  communicate with filtering functions (in order to stop the streams
  broadcasted to go from a VLAN to another), we advise you to use vlb-
  linux.


  3.2.3.  Installation and configuration of the VLAN solution


  3.2.3.1.  mini VLAN Server


  The installation of the mini VLAN Server is not explained here because
  it is quite complex and we think that most of you have a network with
  multicast support. You can download it from the Network download page.
  The "tarball" contains an "INSTALL" file with instructions in French.
  If you want to use the mini VLAN Server and don't understand French,
  you can ask for help in the mailing-list vlcs@videolan.org.


  3.2.3.2.  vlb-linux


  You can download this version of the VLANbridge from the Network
  download page. The "tarball" contains an file "vlanbridge-help" with
  detailled explainations in English of the idea behind the VLANbridge
  and, at the end, the instructions to install and configure this
  version of the VLANbridge.


  3.2.4.  vlc  configuration


  The simplest solution is to use the interface of vlc : click on "Net",
  select "Channel server", write its IP address or DNS name.

  Then, you see a new section "Network Channel" on the interface.
  Select the desired channel and click on Go!.



  4.  Video On Demand


  4.1.  Overview


  4.1.1.  What is Video On Demand ?


  With Video On Demand (VOD), the client can start the video when he
  wants, make pauses, go forward and go back in the video. It's of
  course the best of video streaming and the dream for every client.



  4.1.2.  Hardware required


  But VOD is a very big consumer of resources for the server and the
  network. VOD is unicast, not multicast. This mean that if 50 clients
  are doing VOD with the same server, watching a 5 Mbit/s MPEG 2 video,
  the resources needed as a minimum are the following :


    for the VOD server : 5*50=250 Mbit/s disk access and a 250 Mbit/s
     connection to the backbone,

    for the Backbone : 250 Mbit/s bandwidth,

    for the client : 5 Mbit/s connection to the backbone.

  You can see that VOD needs huge resources for the server in term of
  disk access and network connection, and for the backbone.


  4.1.3.  Design of the VOD solution


  The design is very simple. The idea is to do HTTP streaming, i.e.
  stream an MPEG video encapsulated in HTTP. The regulation of the
  bitrate between the client and the server is done automatically by
  TCP. With HTTP version 1.1, there is the possibility to seek in a file
  downloaded, that we use to seek in the video.

  On the VOD server, you need to install a Web server. For example, we
  use a Linux server running Apache as HTTP daemon. But other O.S. and
  other Web server should work too, but we have never tested. Make your
  MPEG 1 or 2 files available to the clients on the Web server.

  On the client, you only need vlc installed.


  4.2.  VOD with VideoLAN


  4.2.1.  On the server


  For example, we have a Web server whose DNS name is vod.videolan.org.
  On this server, there are two MPEG files video1.mpg and video2.mpg
  available to the clients at the adresses
  http://vod.videolan.org/test/video1.mpg and
  http://vod.videolan.org/test/video2.mpg.


  4.2.2.  On the client

  On the client, run vlc with this command line to view the first video
  :


       % vlc http://vod.videolan.org/test/video1.mpg



  and this command line to view the second video :


       % vlc http://vod.videolan.org/test/video2.mpg

  You can also use the interface : click on "Net" and select HTTP and
  enter the URL "vod.videolan.org/test/video1.mpg" or
  "vod.videolan.org/test/video2.mpg".


  4.2.3.  Client launched by a Web browser


  The idea is to have a Web page with the list of the videos available,
  and, when you clic on a video, vlc starts to display it.

  You have to write the Web page with regular hypertext links to the
  video files and configure you Web browser to launch vlc when a file
  with ".mpg" (and ".mpeg" and ".vob") extension is selected. Tell the
  client that vlc accepts the URL as a command line : with this
  configuration, the file will not be stored on the client's hard drive
  but will be directly read by vlc.


  4.2.4.  Using a channel tool for VOD


  You can use miniVLCS and enable the clients to select channel 1 to
  view the first video, channel 2 to view the second video, and so on.

  Install miniVLCS on a Linux machine (it can be the same machine as the
  VOD server). Please, refer to the section describing ``the building of
  miniVLCS''.

  In the following example, the configuration file vlcs.conf should look
  like that :



       I: nostream
       http://vod.videolan.org/test/video1.mpg
       http://vod.videolan.org/test/video2.mpg



  Then run miniVLCS as a normal user :


       % ./vlcs



  The simplest solution is to use the interface of vlc : click on "Net",
  select "Channel server", write its IP address or DNS name.

  Then, you see a new section "Network Channel" on the interface.

  Select "1" and click on "Go!" to view the first video. Select "2" and
  click on "Go!" to view the second video.

  This function is broken in release 0.4.0 of vlc.


  5.  Designing a complete VideoLAN solution


  This section talks about how to organise the servers needed for
  VideoLAN in order to stream on a Local Area Network (LAN), or a Wide
  Area Network (WAN). These are not precise technical procedures but
  suggestions taken from our own experience.


  5.1.  The VideoLAN Servers


  You can have as many VideoLAN Servers (vls) on your network as you
  want. vlms should only be used for testing purposes. You may want to
  specialise your VideoLAN Servers. For example, on our campus, we have
  three VideoLAN servers located in three different places :


    one for MPEG encoding with an MPEG encoding card located in the
     video studio of the campus in charge of streaming the live shows,

    one for Satellite streaming with a satellite card located in a
     technical room near the satellite parabola,

    one for video streaming with a lot of disk space located in another
     technical room where there is a fast network connection.

  If you want to stream multiple DVDs (we suppose that you have the
  legal right to do so) from the same machine, you may want to have big
  disk drives instead of multiple DVD drives. You can copy the DVDs on
  the hard drives and tell vls to read from the hard drive instead of
  the DVD drive.

  If you want to stream satellite channels (we again suppose that you
  have the legal right to do so), you need a satellite card for every
  transponder. On one transponder, you have up to around 10 channels. If
  you want to stream 5 channels that are on 3 different transponders,
  you will need 3 satellite cards inside the machine. We don't care if
  those 3 transponders are on 3 different satellites, that's your
  problem ! A satellite stream is around 4 Mbit/s. You will then stream
  5 x 4 = 20 Mbit/s : a 100 Mbit/s Ethernet connection will be needed.
  If you have want to stream channels from more transponders that PCI
  slot available in the machine... you will need to find a second
  computer !

  If you want to do Video On Demand with a lot of potential clients, you
  may want to set up a server specialized for VOD. This server would
  have very fast disk access and be located in a technical room with a
  fast network connection available. For example, you could set up a SAN
  with disk drives connected in fibre channel and multiple 100 Mbit/s
  Ethernet connections or a Gigabit connection to the network.


  5.2.  The VideoLAN Channel Servers


  5.2.1.  Multicast solution


  If your network supports multicast, you will have to install a
  miniVLCS in order to enable the clients to easily go from a channel to
  another. This program doesn't need much resources in term of computer
  power or network connection. Therefore, you can install it on a old
  machine running Linux, or on one of your VideoLAN Servers.

  Multicast allows you to stream a video to multiple machines on a Wide
  Area Network (WAN). The network hardware of the WAN will need to have
  a full multicast support. If it doesn't, you can link multicast
  islands from one to another through IP tunnels. This is how the MBone
  (a Multicast Backbone on the Internet) works.


  5.2.2.  VLANs solution


  With the VLANs solution, you will only be able to stream on a LAN
  where all the switches support VLANs. You will not be able to stream
  on a WAN.  With this solution, we advise you to have a Linux machine
  dedicated to hosting the mini VLAN server. This machine is critical in
  term of security because it will have in it's configuration files the
  MIBs of all the switches of you LAN.

  If your router is a bad router (i.e. you can't configure it so as to
  let the different VLANs communicate but without letting the streams
  broadcasted by vls in a VLAN go to the other VLANs), you may want to
  set up a VLANbridge or buy a new router. If you want to set up a
  VLANbridge and you have an Ethernet network, you need to have a Linux
  machine with as many network cards as VLANs used. This machine will be
  located in a place where you have a switch with as many ports
  available as VLANs used. You will plug each network card to a port in
  each VLAN used, and your VLANbridge will enable the different VLANs to
  communicate but without letting the video streams go from a VLAN to
  another. If you want to set up a VLANbridge and you have an ATM
  backbone (like on our old network), the VLANbridge machine only needs
  one ATM card connected to the ATM backbone : this card will enable the
  VLANbridge to have an interface in every VLAN.


  6.  Conclusion


  The VideoLAN solution works well now, but the VideoLAN team is always
  eager to add new features and adopt new standards. Here are the new
  features that we plan to develop and the new standards that we plan to
  adopt :


    MPEG 4. We have already started to develop the DivX (a variant of
     MPEG 4) support of vlc... and we would like to be able to stream
     MPEG 4 as we do with MPEG 1 and 2.

    IPv6. vlc and vls already support IPv6, but we have only tested
     unicast IPv6. We would like to test the multicast IPv6.

    SAP (Session Announcement Protocol). This protocol will allow the
     clients to have the program of what is streamed on the network. We
     have already started to study this standard.

    RTP and RTSP. Those protocol are certainly the futur of the network
     solution of VideoLAN.

    vlc as a plug-in for Web browsers. The development has already
     started.



