By: john@stilen.com

Lecture Structure:

Subject: An Introduction To VideoLan

What is it?

How do I install?

Stream something already!

Defucalties

Questions

What is it?

Official description:

VideoLAN is a highly portable multimedia player for various audio and video formats as well as DVDs, VCDs, and various streaming protocols.

It can also be used as a server to stream in unicast or multicast in IPv4 or IPv6 on a high-bandwidth network.

What is it?

Illustrated description:

What is it?

Functional description:

Main program:

vlc

Supports many interfaces:

cli, curses, tk, wx, gtk, or http

- Supports Many

inputs, outputs, codecs, containers

What is it?

Functional description (cont.):

Can transcode:

convert codec and bit rate

Can stream:

multicast HTTP(S) or unicast UDP

Use vlc not vls:

vlc does all the stuff vls did, an more. and vls has a separate dev group

How do I install it?

vlc relies on many libraries.

How do I install it?

Binaries for distros:

Binaries make it easy

Build package for other distros:

How do I install it?

I used binaries:

3rd party SuSE packages at:

http://packman.iu-bremen.de/suse

Build libdevcss

Found a script (on the right) that builds an rpm for libdevcss from source and a script

Quickly install all my libs from packman

--------------------------------------------------

Added url: http://packman.iu-bremen.de/suse/9.2 to SuSE RPM Sources

root # yast2 inst_source

->Add->http->

ServerName: packman.iu-bremen.de

Directory on Server: suse/9.2

root # cd /usr/src/packages/SOURCES/

Make a libdvdcss rpm

---------------------------------------

Download the libdvdcss tar.bz2-file

root # wget http://download.videolan.org/pub/libdvdcss/1.2.8/libdvdcss-1.2.8.tar.bz2

root # cd /usr/src/packages/

root # wget http://packman.links2linux.org/download.php?t=s&id=1022

root # wget http://packman.links2linux.de/download.php?t=s&id=4062

root # rpmbuild --rebuild libcddb-0.9.6-0.pm.6.src.rpm

root # cd /usr/src/packages/RPMS/i586

root # rpm -i libcddb-0.9.6-0.pm.6.i586.rpm

root # rpm -i libcddb-devel-0.9.6-0.pm.6.i586.rpm

root # wget \ http://www.iiv.de/schwinde/buerger/tremmel/downloads/script_rpm4/install_libdvdcss2

root # chmod +x install_libdvdcss2

root # ./install_libdvdcss2

How do I install it?

Why so many libs?

A library is needed for each codec, container, Input, and Output

The more libraries, the more functionality.

Terms and other Background:

codec: Acompression algorithm applied to

audio or video stream.

i.e. MPEG-1, MPEG-2, MPEG-4, Vorbis, DivX

containers: Holds one or more encoded streams

i.e. AVI, Ogg, MOV, ASF, MPEG-TS,PS,

Note: Any Codec Won't Work In Every Container.

Table of I/O, codec, container support :

http://www.videolan.org/streaming/features.html

Confusion: MPEG is a codec

i.e. MPEG-1, MPEG-2, MPEG-4).

MPEG is also a container

i.e. MPEG: ES, PS, and TS

Stream Something Already!

Streaming is pain.

Because the right codec and options have to be set this can be painful.

Consider your Target audience and what codecs they will have.

The gui and wizard didn't work for me, but I'll show a better method to learn.

Be prepared to debug.

Process of vlc:

1st. Separates the streams in the container (or demux).

2nd. Chooses a codec to decode each stream.

3rd. Decompress each stream (or decode).

Debugging vlc:

Use -vvv cli option

Use View->Messages with the gui

Use vlc -vvv <myfile> to determine container type.

This will show you see what codecs vlc thinks it should use.

If an appropriate codec is not found, or other error, the

stream will be dropped.

Sequence headers repeats in mpeg2, not mpeg1.

Call your MPEG-2 creations .vob

Call your MPEG-1 creations .mpg or mpeg

.mpg or .mpeg

Stream Something Already!

Steaming music from command line:

Start web interface on tcp port 5001,

play files randomly for ever,

keeping stream alive between songs,

send Stream Out through a transcode incantation, which decodes, encodes, and streams to http port 5002 in raw format.

The last statement is the source music directory /data/music.

Note: No line breaks in the sout statement.

vlc -I http --http-host 192.168.0.14:5001-Z -L --sout-keep --sout \

'#transcode{acodec=mpga,ab=192,channels=2}:duplicate{dst=std{access=http,mux=raw,url=192.168.0.14:5002}}' \

/data/music/

Stream Something Already!

Steaming music from the GUI

Start the gui

myhost:/root/ # vlc -I wx ## Arguemnts to I include http, tk, curses

Stream Something Already!

Steaming music from the GUI

Select: File->Open

Stream Something Already!

Steaming music from the GUI

Brows to your file, check 'Stream ouput' and click 'Settings'

Stream Something Already!

Steaming music from the GUI

As you fill in this form, Stream Output MRL 'Destination Target' will populate.

Stream Something Already!

Steaming music from the GUI

These are all the options I have chose for my file.

Stream Something Already!

Learn Stream out MRL from the GUI

The GUI shows a Stream Out MRL.

:sout=#duplicate{dst=display,dst=std{access=http,mux=raw,url=192.168.0.42:1234}}

You can take this and use it to construct a command line.

vlc -I wx \

--sout '#duplicate{dst=display,dst=std{access=http,mux=raw,url=192.168.0.42:1234}}' \

/home/jstile/video/Quayle.mov

e/video/Quayle.mov

If you get stuck creating MRL, use the GUI for hints.

Stream Something Already!

Learn Stream out MRL from the GUI

There are two valid Stream Out MRL formats:

FORMAT 1:

vlc input_stream \

--sout-module1-option1=... \

--sout-module1-option2=... \

--sout-module2-option1=... \

--sout-module2-option2=... \

...

FORMAT 2:

vlc input_stream \

--sout "#module1{option1=parameter1{parameter-option1},option2=parameter2}:#module2{option1=...,option2=...}:..."

Stream Something Already!

Stream Out MRL

One or more module statements:

standard	- sends stream via Access Output (UDP, HTTP, file, ...).

transcode - reencode with a different codec or bit rate.

duplicate	- create independent output streams.

display	- Stream to a display for normal viewing.

rtp	- UDP stream.

es	- Split Elementary Stream (separate audio/video output).

Each module takes different options.

vlc -I wx \

--sout '#duplicate{dst=display,dst=std{access=http,mux=raw,url=192.168.0.42:1234}}' \

/home/jstile/video/Quayle.mov

Stream Something Already!

Stream Out MRL

Example of the Standard module (each takes different options)

access= statement setting output-to method

file	- name of save file

udp	- udp stream with options:

caching=, ttl=, group=, lage=, raw

http	- http stream

user=, pwd=, mime=[SFW,AVI,WAV,QT,MP2]

https	- https stream

same as above, plus cert=, key=, ca=, crl=

mmsh	- steam with Microsoft mms

rtp	- old and outdated. don't use.

mux= statement setting encapsulation method

options include ts,ps,mpeg1, ogg, afs, afsh, avi, mpjpg

url= statement setting specific path to output file or url ip/port.

More options... see http://videolan.org/doc/streaming-howto/en/ch03.html

Stream Something Already!

Bandwidth requirements:

This technology was designed for high bandwidth networks.

These are some number from videolan.org

Throughput Codec

0.5 to 4.0 Mbits/s MPEG-4

3.0 to 4.0 Mbits/s MPEG-2

6.0 to 9.0 Mbits/s DVD

Defucalties

Slow hardware:

The Client doesn't matter too much.

The Server is critical.

My server works great with a 1.5GHz AMD + 500Mb SDRAM

But my ThinkPad cant do it, with a PII366 + 200Mb RAM

Choosing the correct codec and container options

I am still having problems with it.

Sources:

Template for OpenOfficeImpress:

http://ooextras.sourceforge.net/downloads/simpress/

VideoLan Docs:

http://www.videolan.org/streaming/features.html

http://videolan.org/doc/

VLC Play-Howto

VLC streaming-Howto

VLS user guide

VideoLAN FAQ

VLC streaming (ch3 “structure of Streaming output (--sout)”)

QUESTIONS:

?????????????????????????????????????????

jstile jstile

2005-03-04T23:09:28