1. Video Streaming Software
VLC http://www.videolan.org/vlc/
VideoLAN Client is a cross-platform media player and streaming server.
“VLC (initially VideoLAN Client) is a highly portable multimedia player for
various audio and video formats (MPEG-1, MPEG-2, MPEG-4, DivX, mp3,
ogg, ...) 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.”
VLC works like a media player, but has had the ability to stream output bolted on. To
stream output you define the command line as a huge ‘chain’ telling the program what
to do at each step.
Eg: to stream a file from disk, convert the video to MPEG-4 (1024kb/s), the audio to
MPEG audio (not MP3 however, at 192kb/s) and send it via udp to the the all-hosts
multicast address, you’d do something like:
vlc Y:002-That-guy-stole-my-shoes.mpg
--sout=”#transcode{vcodec=mp4v,vb=1024,scale=1,acodec=mpga,ab=192,cha
nnels=2}” --duplicate
“{dst=std{access=udp,mux=ts,url=[ff02::1]:1234}}”
VLC shows its media player roots by only allowing one processing one video at a
time. So if you wanted to stream several (different) video sequences at the same time,
you’d need to run VLC several times. This doesn’t apply to outputs so much – VLC
can stream to multiple hosts using IPv4/v6 multicast and do this using several
protocols at one: you could be streaming to a one multicast group using raw udp,
another using mms, another using rtp etc. But still the original video is the same.
VLC does support a large amount of input types (V4L, PVR, file, UDP etc), formats
(AVI, MPEG, QT) and codecs (MPEG-1/2/-4, DivX, Cinepak etc), the ability to
transcode from one format to another, and many different output protocols (udp, mms,
http, rtp, file etc). Supporting all these formats does have a cost though – there are a
huge number of dependencies required to compile/install VLC. This makes compiling
with the features you want very difficult.
VLS http://www.videolan.org/streaming/
VideoLAN Server was the original streaming solution from VideoLAN. It is no
longer in active development, as focus has changed to further developing VLC.
VLS has does not have as good support for codecs, containers and outputs as VLC
does. VLS mainly supports MPEG-based formats such as -2 PS and TS and -4. The
outputs are also limited – only MPEG-2 TS can be streamed via udp.
VLS is configured via a config file rather than by the command line. You define input
‘programs’ and output ‘channels’. Assuming you did not set some input/output
combinations to autoplay, you use the telnet interface to start programs by joining
2. them with an output channel. This config file allows VLS to stream multiple
files/inputs at the same time, rather than requiring multiple program instances like
VLC.
VLS does not support transcoding input formats. Only the V4L interface allows video
to be encoded. This only supports MPEG-2/4 and MP3.
When running VLS, the latest SVN branch should be used as this includes V4L
support – this was removed from VLS around v0.5 but is required to stream from
Video4Linux inputs.
Automake 1.4 does not work with the bootstrap program that comes with the SVN
version of VLS. When the final vls executable comes to being linked there are errors.
Upgrading to automake 1.6 (and autoconf too) allows the configure script to work
properly.
Windows Streaming Media Server
The Server
http://www.microsoft.com/windowsserver2003/technologies/winme
dia/default.mspx
This is the media server that is supplied with all versions (except 64-bit) of Windows
2003 server. It has an easy-to-use interface for administering the system, supports
video-on-demand and broadcasting (via multicast) of streams. It also supports IPv6.
The problem with it is that the system will on accept inputs that are in proprietary
Microsoft Windows Media formats. There is no support for MPEG whatsoever. This
is a problem if it is used with the Hauppauge PVR as the only thing it will produce is
a MPEG-2 TS. The system will also not transmit video directly from a DirectShow
input. However, the system supports an external video encoder – as long as the
encoder can export video in a Windows Media format via a HTTP-like interface the
server will accept it. However whenever tried with an encoder other than Windows
Media Encoder 9 it would refuse to connect using HTTP. The server can view streams
using the MMS protocol (which VLC can output), but will refuse to stream from an
MMS input.
Windows Media Encoder 9
http://www.microsoft.com/windows/windowsmedia/9series/encode
r/default.aspx
This encoder will support most video formats and transcode them to a Windows
Media format. The encoder can read from a file, another video stream, or from a
DirectShow device (eg a TV card). The encoder will then ‘push’ the output to a client
or to the Windows Streaming Media Server using either the MMS or HTTP protocol.
The encoder also supports MPEG inputs, although refused every file saved from the
PVR 350. It also refused to read from the device using the DirectShow interface.
3. Helix Universal Server http://www.realnetworks.com/products/
discreteserver/
This is the media server that is developed by RealNetworks, Inc. It is the most
professional-looking server tested and includes a huge amount of options, including
the broadcasting of adverts! The output formats are limited to proprietary Real
formats and protocols. As a result, the output ought to be viewable (only?) on their
RealPlayer software.
It does not support input from a capture device, nor does it support IPv6.
Darwin Streaming Server
http://developer.apple.com/darwin/projects/streaming/
This is the open source version of Apple’s QuickTime Streaming Server that allows
the transmission of streaming media to clients via the RTP and RTSP protocols.
There are few configuration options for DSS, and in fact I never got it to stream video
once… It also does not support capture from external devices (only file input) nor
does it support IPv6 or multicasting.
Apache http://httpd.apache.org/
Although primarily used as a web server, Apache can be easily used as a video-on-
demand (VOD) server for unicast clients with the help of the Mozilla VLC plugin.
HTTP provides the ability to seek within a file – this is normally used for resuming
broken downloads, but here can be used to seek within a video stream stored on the
web server. When the VLC plugin is embedded within a web page the user can view
the stream and use the controls to seek within it.
Both Mozilla (tested with v1.6) and Apache support IPv6. Apache needs to be
specially configured to support files >2GB as files made by the PVR 350 can easily
reach this size.
The plugin is very buggy and frequently crashes Mozilla. The plugin does not work
with Internet Explorer or other browsers. Also the seeking feature is lost when using
Windows Media Player using the HTTP interface.
SAP/SDP
The normal way for clients to subscribe to multicast services is by ‘connecting’ to that
address using VLC. As IP addresses (and especially v6 addresses) can be difficult to
remember, you can add a channel information service which makes connecting to
broadcasts easy. VideoLAN has implemented a channel information service based on
the SAP/SDP standard – the SAP announces are send via the network (multicasted)
saying which program is running on what address/port. On the client side, VLCs
receive these announces and automatically add the announced programs to their
playlists. The user then double-clicks on the program and can start watching
immediately.
4. VLC can send the SAP announces associated with the programs it is streaming. VLS
can’t do that but an independent program, the mini-SAP-server can send the
announcements for the programs sent by VLS.