This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
linux_streaming [2006/12/06 23:45] admin |
linux_streaming [2006/12/13 12:09] admin |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Linux Streaming ====== | ====== Linux Streaming ====== | ||
- | This is a note-scrape-no-paper-book for a paper i should submit | + | Hello, this is a note-scrape-no-paper-book for a paper i should submit for a class on my university. It is about streaming under linux. I will slowly develop it also after submitting it, as streaming is of big interest for me.\\ |
+ | I work for [[http:// | ||
+ | |||
+ | [[http:// | ||
===== What is Streaming ===== | ===== What is Streaming ===== | ||
- | Streaming is a way how to produce and process media so that they can be seen during downloading. | + | Streaming is a way how to produce and process media so that they can be seen during downloading. To be able to do this the media has to be compressed to achieve a good speed. There are severall codecs which do the compression, |
+ | Streaming content is delivered through the network, and there are three man types of delivering it: unicast, broadcast and multicast. There are terms used also anywhere where routing comes into play. Unicast just transmits data to a single point. Broadcast and Multicast transmit data to many points at once. The difference is, that broadcast sends a copy of the stream to every single user who wants it, while Multicast works so, that it sends out only a single copy at a time, which is copied for various users along the way to them. This needs a lot of computation from the side of routers, so the majority of Internet backbone routers has Multicast disabled, even though the paradigm is known since late 80' | ||
+ | Multicast is used mainly in company private networks for e-learning and e-conferencing. Broadcast is nowadays the most used way how to send streamed media to the users. It is also ineffective in that sense, that when 10000 people want to see your stream at once (at a given bitrate), you have to have a connection to the internet which can handle 10000*bitrate throughput.\\ | ||
+ | Another emerging way of delivering streaming data is swarm streaming. It utilizes the ideas behind the bittorent technology - the media is sent to severall people at once, each of whom gets a different part of the streamed media, and they communicate and exchange the parts between themselves. In this way the streaming point doesnt need a good connection in cases of big interest. One nice open-source example is [[http:// | ||
+ | ==== Architecture ==== | ||
+ | The architecture is an abstract structure of streaming solutions. It usually consists of three independet points: source, repeater and the receiving client. In this way, the source can be on a slow link, just pushing data to a repeater which is conneced to a broad-enough link. The communication between all the members uses the ip protocol, and mostly UDP, but that depends on the solution. | ||
- | |||
- | |||
- | |||
- | |||
- | ==== Architecture ==== | ||
=== Source === | === Source === | ||
- | * Any sound input (through Alsa, Jack, OSS) | + | * Any sound or video input (through Alsa, Jack, Oss, IEE1394, V4l) |
- | * Any internal player (xmms, mp123) | + | * Any internal player (xmms, mp123, VLC) |
* Source " | * Source " | ||
Line 27: | Line 30: | ||
* Can be in relation to other repeaters | * Can be in relation to other repeaters | ||
* Can be the same machine then source | * Can be the same machine then source | ||
- | |||
- | |||
=== Client === | === Client === | ||
- | * Client receives stream, decompresses, | + | * Client receives stream, decompresses, |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
===== Audio Streaming ===== | ===== Audio Streaming ===== | ||
- | In this section we cover two main forms of audio streaming under linux: mp3 and ogg. We will not pay attention to other formats, like realmedia or windows media. Quicktime is a possibility ((have to check how is it with its freeness and openness)). | + | In this section we cover two main forms of audio streaming under linux: mp3 and ogg. We will use the Icecast Streaming Server as an repeater. We will not pay attention to other formats, like realmedia or windows media. Quicktime is a possibility, since Darwin Streaming Server is free to download from Apple. |
Line 55: | Line 50: | ||
=== External stream-forwarder === | === External stream-forwarder === | ||
- | In case of sound you use various softwares, icecast people have released a number of ices bindings to different programming languages, so the possibilities are broad. The most used are: | + | In case of sound you can use various softwares, icecast people have released a number of ices bindings to different programming languages, so the possibilities are broad. The most used are: |
- | * ices http:// | + | * [[http:// |
- | * Oddcast http:// | + | * [[http:// |
- | * Darkice http:// | + | * [[http:// |
- | * ezstream | + | * [[http:// |
- | * Nicecast | + | * [[http:// |
- | * IceGenerator | + | * [[http:// |
=== Built-in stream-forwarder === | === Built-in stream-forwarder === | ||
- | In case of various music products, the capability to send out the data to a streaming-server is allready built-in or in the possibillity of plugins. | + | In case of various music-playing or music-producing |
- | * Muse http:// | + | * [[http:// |
- | * SAM2 http:// | + | * [[http:// |
- | * Orban http:// | + | * [[http:// |
- | * freej http:// | + | * [[http:// |
- | * Traktor | + | * [[http:// |
- | * PureData | + | * [[http:// |
Line 109: | Line 104: | ||
=== IceCast === | === IceCast === | ||
- | [[http:// | + | [[http:// |
Line 122: | Line 116: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
==== How-To ==== | ==== How-To ==== | ||
- | === Server === | + | === Server |
- | First of we should have a streaming server allready installed and at our disposal. If true, goto [[linux_streaming# | + | First of we should have a streaming server allready installed and at our disposal. If true, goto [[linux_streaming# |
- | get the new libogg: | + | get the libogg: |
< | < | ||
wget http:// | wget http:// | ||
+ | </ | ||
+ | |||
+ | get the libvorbis: | ||
+ | < | ||
+ | wget http:// | ||
</ | </ | ||
Line 155: | Line 158: | ||
edit the configuration file ((the path to the config file can be also different)) | edit the configuration file ((the path to the config file can be also different)) | ||
- | More to the config-file options | + | More to the config-file options |
< | < | ||
vi / | vi / | ||
Line 171: | Line 174: | ||
Icecast is able to stream .ogg streams and also mp3. Newest addistions include the Theora library which is used for streaming video in ogg/theora format. | Icecast is able to stream .ogg streams and also mp3. Newest addistions include the Theora library which is used for streaming video in ogg/theora format. | ||
- | === Source === | + | === Server config === |
+ | |||
+ | Here is an an example of an icecast configuration file, used for the streaming server of [[http:// | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <alias source="/" | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | === Source | ||
- | As an stream forwarder we will use darkice.. Its robust, command-line orientated, and fast. We compile darkice from the sources. The we just modify an .conf file, for example / | + | As an stream forwarder we will use [[http://darkice.tyrell.hu/ |
< | < | ||
Line 227: | Line 299: | ||
</ | </ | ||
- | After modification we just run darkice -c /etc.darkice.cfg, | + | After modification we just run darkice -c /etc/darkice.cfg, |
+ | |||
Line 233: | Line 307: | ||
===== Video Streaming ===== | ===== Video Streaming ===== | ||
- | Video sreaming | + | Video streaming |
==== Structure ==== | ==== Structure ==== | ||
Line 239: | Line 314: | ||
=== Source === | === Source === | ||
- | various... | + | * IEE1394 (FireWire Input), Video4Linux devices, video files |
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
=== Repeater === | === Repeater === | ||
- | we will use libtheora and libvorbis enabled | + | * [[http:// |
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
=== Client === | === Client === | ||
- | various, see above which can playback video.. | + | * [[http:// |
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * etc.. | ||
Line 261: | Line 345: | ||
You need to have either the video on your harddisk, or for live streaming, a FireWire compatible Camera, and firewire enabled in linux. I will not go into this, but it is the main source of problems, when the ieee1394 is not working. | You need to have either the video on your harddisk, or for live streaming, a FireWire compatible Camera, and firewire enabled in linux. I will not go into this, but it is the main source of problems, when the ieee1394 is not working. | ||
- | When you have the firewire up & ready, get and install the utikity | + | When you have the firewire up & ready, get and install the utility |
We pretend we have ieee1394 running. We should have also installed dvgrab: | We pretend we have ieee1394 running. We should have also installed dvgrab: | ||
- | This grabs the input from firewire, converts it to .ogg and sends output standard out: | + | This grabs the input from firewire, converts it to .ogg and sends output |
< | < | ||
dvgrab --format raw - | ffmpeg2theora -a 0 -v 5 -f dv -x 320 -y 240 -o /dev/stdout | dvgrab --format raw - | ffmpeg2theora -a 0 -v 5 -f dv -x 320 -y 240 -o /dev/stdout | ||
Line 275: | Line 359: | ||
dvgrab --format raw - | ffmpeg2theora -a 0 -v 5 -f dv -x 320 -y 240 -o /dev/stdout - | oggfwd | dvgrab --format raw - | ffmpeg2theora -a 0 -v 5 -f dv -x 320 -y 240 -o /dev/stdout - | oggfwd | ||
</ | </ | ||
- | where icecastserver - is the url of our streaming server | + | **icecastserver** - is the url of our streaming server\\ |
- | + | **8000** - can be any number for port number of icecast listener\\ | |
- | 8000 - can be any number for port number of icecast listener | + | **pwd** - password\\ |
- | + | **/theora.ogg** - mountpoint where we wish to have the video stream accesible | |
- | pwd - password | + | |
- | + | ||
- | /theora.ogg - mountpoint where we wish to have the video stream accesible | + | |
=== Server === | === Server === | ||
- | To use the Ogg/Theora options, we will need an libvorbis and libtheora enabled installation of IceCast Streaming Server. We download the additional libraries (we expect that we have allready installed libogg): | + | To use the Ogg/Theora options, we will need an [[http:// |
- | + | ||
- | Get libvorbis: | + | |
- | < | + | |
- | wget http:// | + | |
- | </ | + | |
Get libtheora: | Get libtheora: | ||
Line 302: | Line 378: | ||
./configure --with-ogg=/ | ./configure --with-ogg=/ | ||
</ | </ | ||
+ | |||
+ | All other options and setup is the same as with Audio. If you allready have IceCast installed, then just recompile, and thats all. | ||
=== Client === | === Client === | ||
+ | |||
+ | Setup of the desired player depends on the user ;) If you finally found the player dear to your heart, just open the url: http:// | ||
+ | |||
+ | Enjoy! :) | ||