This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux_streaming [2006/12/07 00:01] admin |
linux_streaming [2007/04/17 12:58] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Linux Streaming ====== | + | [[http://smecnet.itchybit.org/wiki/gnd/ |
- | + | ||
- | This is a note-scrape-no-paper-book for a paper i should submit to get my credits for the class. Its mainly about streaming under linux. | + | |
- | + | ||
- | ===== What is Streaming ===== | + | |
- | + | ||
- | Streaming is a way how to produce and process media so that they can be seen during downloading. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Architecture ==== | + | |
- | + | ||
- | === Source === | + | |
- | + | ||
- | * Any sound input (through Alsa, Jack, OSS) | + | |
- | * Any internal player (xmms, mp123) | + | |
- | * Source " | + | |
- | + | ||
- | === Repeater === | + | |
- | + | ||
- | * Provides content for the clients | + | |
- | * Can serve more streams at once - mountpoints | + | |
- | * Can be in relation to other repeaters | + | |
- | * Can be the same machine then source | + | |
- | + | ||
- | + | ||
- | + | ||
- | === Client === | + | |
- | + | ||
- | * Client receives stream, decompresses, | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== 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)). | + | |
- | + | ||
- | + | ||
- | ==== Source ==== | + | |
- | + | ||
- | Any sound-input routed into the soundcard. Controllable through ALSA or OSS. Possible to steer audio in Jack. Can be also a XMMS player. There two main alternatives: | + | |
- | + | ||
- | * External stream-forwarder | + | |
- | * Plugin, built-in forwarding functionality | + | |
- | + | ||
- | === 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: | + | |
- | + | ||
- | * ices http:// | + | |
- | * Oddcast http:// | + | |
- | * Darkice http:// | + | |
- | * ezstream http:// | + | |
- | * Nicecast http:// | + | |
- | * IceGenerator http:// | + | |
- | + | ||
- | + | ||
- | === 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. | + | |
- | + | ||
- | * Muse http:// | + | |
- | * SAM2 http:// | + | |
- | * Orban http:// | + | |
- | * freej http:// | + | |
- | * Traktor http:// | + | |
- | * PureData http:// | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== Repeater ==== | + | |
- | + | ||
- | === Darwin Streaming Server === | + | |
- | + | ||
- | [[http://developer.apple.com/ | + | |
- | + | ||
- | === Shoutcast === | + | |
- | + | ||
- | [[http:// | + | |
- | + | ||
- | < | + | |
- | Do I need a license to stream mp3, mp3PRO or mp3surround encoded content over the Internet? | + | |
- | + | ||
- | Yes. A license is needed for commercial (i.e., revenue-generating) use | + | |
- | of mp3/mp3PRO in broadcast systems (terrestrial, | + | |
- | other distribution channels), streaming applications (via Internet, | + | |
- | intranets and/or other networks), other content distribution systems | + | |
- | (pay-audio or audio-on-demand applications and the like) or for use | + | |
- | of mp3/mp3PRO on physical media (compact discs, digital versatile | + | |
- | discs, semiconductor chips, hard drives, memory cards and the like). | + | |
- | + | ||
- | However, no license is needed for private, non-commercial activities | + | |
- | (e.g., home-entertainment, | + | |
- | music library), not generating revenue or other consideration of any | + | |
- | kind or for entities with associated annual gross revenue less than | + | |
- | US$ 100 000.00. | + | |
- | </ | + | |
- | [[http:// | + | |
- | + | ||
- | === IceCast === | + | |
- | + | ||
- | [[http:// | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== Clients ==== | + | |
- | + | ||
- | * [[http://www.foobar2000.org|foobar2000]] | + | |
- | * [[http:// | + | |
- | * [[http:// | + | |
- | * [[http:// | + | |
- | * [[http:// | + | |
- | * [[http:// | + | |
- | * [[http:// | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== How-To ==== | + | |
- | + | ||
- | === Server === | + | |
- | + | ||
- | First of we should have a streaming server allready installed and at our disposal. If true, goto [[linux_streaming#source setup|here]]. If not, we will install our streaming server now. I chose IceCast. | + | |
- | + | ||
- | get the new libogg: | + | |
- | < | + | |
- | wget http:// | + | |
- | </ | + | |
- | + | ||
- | decompress: | + | |
- | < | + | |
- | tar -xzvf icecast-2.3.1.tar.gz | + | |
- | </ | + | |
- | + | ||
- | configure && make. The path to libogg can be different on your system, and depends on YOUR settings. | + | |
- | < | + | |
- | ./configure --with-ogg=/ | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | make | + | |
- | </ | + | |
- | + | ||
- | Install: | + | |
- | < | + | |
- | make install | + | |
- | </ | + | |
- | + | ||
- | edit the configuration file ((the path to the config file can be also different)) | + | |
- | More to the config-file options soon, or just [[http:// | + | |
- | < | + | |
- | vi / | + | |
- | </ | + | |
- | + | ||
- | Now just run icecast | + | |
- | < | + | |
- | icecast -c / | + | |
- | </ | + | |
- | + | ||
- | Depends on settings but the admin interface is on http:// | + | |
- | + | ||
- | source "puts up" the data, with a password, then mounts it on some mountpoint. The mountpoint is accessible through: http:// | + | |
- | + | ||
- | 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 Setup === | + | |
- | + | ||
- | 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 / | + | |
- | + | ||
- | < | + | |
- | # this section describes general aspects of the live streaming session | + | |
- | [general] | + | |
- | duration | + | |
- | bufferSecs | + | |
- | + | ||
- | # this section describes the audio input that will be streamed | + | |
- | [input] | + | |
- | device | + | |
- | sampleRate | + | |
- | bitsPerSample | + | |
- | channel | + | |
- | + | ||
- | # this section describes a streaming connection to an IceCast2 server | + | |
- | # there may be up to 8 of these sections, named [icecast2-0] ... [icecast2-7] | + | |
- | # these can be mixed with [icecast-x] and [shoutcast-x] sections | + | |
- | [icecast2-0] | + | |
- | bitrateMode | + | |
- | format | + | |
- | bitrate | + | |
- | quality | + | |
- | # | + | |
- | server | + | |
- | port = 8000 # port of the IceCast2 server, usually 8000 | + | |
- | username | + | |
- | password | + | |
- | mountPoint | + | |
- | name = IRS TLIS LIVE | + | |
- | description | + | |
- | url = http:// | + | |
- | genre = Mixed # genre of the stream | + | |
- | public | + | |
- | + | ||
- | [icecast2-1] | + | |
- | bitrateMode | + | |
- | format | + | |
- | bitrate | + | |
- | quality | + | |
- | # | + | |
- | server | + | |
- | port = 8000 # port of the IceCast2 server, usually 8000 | + | |
- | username | + | |
- | password | + | |
- | mountPoint | + | |
- | name = IRS TLIS LIVE | + | |
- | description | + | |
- | url = http:// | + | |
- | genre = Mixed # genre of the stream | + | |
- | public | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | After modification we just run darkice -c / | + | |
- | + | ||
- | + | ||
- | + | ||
- | ===== Video Streaming ===== | + | |
- | + | ||
- | Video sreaming under Linux was, for licencing issues a bit weak, until the fabulous libtheora came and with it the OGG/Theora format. This is now something like the flagship of linux video streaming, so we will cover only this option. | + | |
- | + | ||
- | ==== Structure ==== | + | |
- | + | ||
- | === Source === | + | |
- | + | ||
- | various... | + | |
- | + | ||
- | === Repeater === | + | |
- | + | ||
- | we will use libtheora and libvorbis enabled IceCast streaming server | + | |
- | + | ||
- | === Client === | + | |
- | + | ||
- | various, see above which can playback video.. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== How-to ==== | + | |
- | + | ||
- | + | ||
- | === Source === | + | |
- | + | ||
- | 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 called [[http:// | + | |
- | + | ||
- | 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: | + | |
- | < | + | |
- | dvgrab --format raw - | ffmpeg2theora -a 0 -v 5 -f dv -x 320 -y 240 -o / | + | |
- | </ | + | |
- | + | ||
- | We install another utility called [[http:// | + | |
- | + | ||
- | < | + | |
- | 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 | + | |
- | + | ||
- | 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 | + | |
- | + | ||
- | + | ||
- | === 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): | + | |
- | + | ||
- | Get libvorbis: | + | |
- | < | + | |
- | wget http:// | + | |
- | </ | + | |
- | + | ||
- | Get libtheora: | + | |
- | < | + | |
- | wget http:// | + | |
- | </ | + | |
- | + | ||
- | then recompile icecast with these options (the exact location of the libs depends on YOUR settings) | + | |
- | < | + | |
- | ./configure --with-ogg=/ | + | |
- | </ | + | |
- | + | ||
- | === Client === | + |