209 lines
6.2 KiB
TeX
209 lines
6.2 KiB
TeX
%
|
|
% new 24 juillet 2014 - Mixart Myrys
|
|
%
|
|
\chapter{streaming}
|
|
\label{chap:streaming}
|
|
\index{streaming}
|
|
|
|
Avertissement : pour le moment\footnote{En juillet 2014}, nous
|
|
n'allons nous pencher que sur la diffusion de flux audios, avec
|
|
des encodages libres comme \textsl{ogg} ou \textsl{speex}.
|
|
|
|
Tout simplement parce que le monde de la vidéo est un gigantesque
|
|
foutoir de codecs, de containers, de brevets logiciels et
|
|
d'incompatiblités diverses et variées.
|
|
|
|
|
|
%-------------------------------------------------------------
|
|
\section{icecast2}
|
|
\index{icecast2}
|
|
\label{icecast2}
|
|
|
|
\begin{quote}
|
|
Icecast, the project, is a collection of programs and libraries for
|
|
streaming audio over the Internet. This includes:
|
|
Icecast, the program that streams audio data to listeners,
|
|
libshout, a library for communicating with Icecast servers and
|
|
IceS\index{ices}, a program that sends audio data to Icecast servers
|
|
|
|
\end{quote}
|
|
|
|
Icecast est, semble-t-il, \textbf{le} serveur de stream de référence.
|
|
Il se configure facilement avec des fichiers en XML\index{XML}.
|
|
Première approche d'une ergonomie différente, vous êtes avertis.
|
|
|
|
\textsl{more to come...}
|
|
|
|
%-------------------------------------------------------------
|
|
\section{idjc}
|
|
\index{idjc}
|
|
|
|
\begin{quote}
|
|
Internet DJ Console is an Internet radio application for making a
|
|
live radio show or podcast. Features include two main media players
|
|
with a crossfader, a jingle player, microphone signal processing
|
|
(compressor and noise gate)
|
|
\end{quote}
|
|
|
|
%-------------------------------------------------------------
|
|
\section{liquidsoap}
|
|
\index{liquidsoap}
|
|
|
|
\texttt{https://www.liquidsoap.info/}
|
|
|
|
\begin{quote}
|
|
Liquidsoap is an extensible and flexible audio stream generator, mainly
|
|
used for streaming to a shoutcast/icecast server.
|
|
It is also possible
|
|
to output in a file, to speakers or as raw PCM stream.
|
|
liquidsoap can
|
|
perform any audio processing, mixing streams together,
|
|
applying filters, generating sound procedurally,
|
|
there is no limit but your imagination.
|
|
Input files can be accessed through the network, using samba,
|
|
ftp or speech synthesis.
|
|
The system features lots of programming operators, including user
|
|
requests, time-based selection, sum...
|
|
\end{quote}
|
|
|
|
Un étonnant langage de script pour gérer tous ces octets musicaux
|
|
en les promenant un peu dans tous les sens, la possibilité
|
|
de commander Savonet avec un simple telnet\index{telnet}.
|
|
Vite, un exemple d'utilisation, vous créez un fichier texte avec
|
|
cez quelques lignes dedans et vous le sauvez sous le nom
|
|
\texttt{savon.liq} :
|
|
|
|
\begin{verbatim}
|
|
set("log.file.path","/tmp/savon.log")
|
|
set("log.stdout",true)
|
|
|
|
output.icecast (%vorbis,
|
|
host = "10.20.0.23",
|
|
port = 1984,
|
|
password = "hopla!",
|
|
mount = "savon.ogg",
|
|
single("loveme.ogg"))
|
|
\end{verbatim}
|
|
|
|
Avec ce petit programme, nous pouvons envoyer en boucle un fichier
|
|
Ogg vers notre serveur.
|
|
Les deux premières lignes permettent de voir et d'enregistrer les
|
|
diverses actions.
|
|
Et la grosse instruction \texttt{output.icecast}
|
|
envoie la musique dans votre serveur
|
|
Icecast2 en passant les paramètres nécessaires.
|
|
|
|
\subsection{10.20.0.23}
|
|
|
|
|
|
Maintenant, voyons un exemple plus complet et plus réaliste,
|
|
largement inspiré d'un tutoriel de la documentation officielle,
|
|
et qui deviendra un de ces jours la base de Radio-Myrys :
|
|
|
|
\begin{verbatim}
|
|
set("log.file.path", "/tmp/savon.log")
|
|
set("log.stdout", false)
|
|
|
|
default = single("loveme.ogg")
|
|
|
|
openbsd = playlist(mode="random", "files/openbsd.pls")
|
|
others = playlist(mode="random", "files/others.pls")
|
|
jingles = playlist( "files/jingles.pls")
|
|
|
|
radio = fallback([ switch([({ 5h-11h }, openbsd),
|
|
({ 11h-5h }, others)]),
|
|
default])
|
|
|
|
radio = random(weights=[1,12],[ jingles, radio ])
|
|
|
|
output.icecast( %vorbis,
|
|
host = "localhost",
|
|
port = 1984,
|
|
password = "hopla!",
|
|
mount = "savon.ogg",
|
|
radio)
|
|
\end{verbatim}
|
|
|
|
Ah bah oui, ça commence à être robuste, mais en fait c'est
|
|
assez simple à comprendre, et un peu plus compliqué à mettre
|
|
en œuvre.
|
|
|
|
|
|
|
|
On se retrouve vite face à un problème classique :
|
|
les différences de niveau sonore entre les divers morceaux.
|
|
Et comme on veut avancer sur d'autres choses, on rache un
|
|
petit bout de Bash avec de la poudre verte dedans :
|
|
|
|
\begin{verbatim}
|
|
#!/bin/bash/
|
|
echo "que faire ?"
|
|
\end{verbatim}
|
|
|
|
Cette poudre verte pourrait bien être \texttt{vorbisgain(1)}\dots
|
|
|
|
\subsection{rotation des playlists}
|
|
|
|
\begin{verbatim}
|
|
pl2014 = playlist("2014")
|
|
pl2013 = playlist("2013")
|
|
...
|
|
jingles = playlist("jingles")
|
|
s = rotate([pl2014, pl2013, ..., jingles])
|
|
output.icecast(..., s)
|
|
\end{verbatim}
|
|
|
|
|
|
\subsection{trucs divers}
|
|
|
|
Que signifie ce message : \textbf{That source is fallible.} ?
|
|
Par exemple, que le fichier que vous aviez soigneusement
|
|
désigné comme \texttt{default} n'existe plus sur le disque.
|
|
|
|
|
|
Comment envoyer vers plusieurs icecasts ? Bah c'est très facile :
|
|
il suffit de mettre plusieurs "blocs" \texttt{output.icecast} à
|
|
la suite les uns des autres ;)
|
|
|
|
|
|
%====================================================================
|
|
\section{Source clients}
|
|
\label{sourceclients}
|
|
|
|
%-------------------------------------------------------------
|
|
|
|
\subsection{Ezstream}
|
|
|
|
\begin{quote}
|
|
Ezstream is an audio and video streaming client which feeds any
|
|
icecast server with audio data and metadata from a standard input
|
|
without reencoding. It thus requires very little CPU resources. Some
|
|
playlists can be looped and composed with MP3, Ogg Vorbis or Ogg
|
|
Theora media files.
|
|
\end{quote}
|
|
|
|
%-------------------------------------------------------------
|
|
|
|
\subsection{darkice}
|
|
\index{darkice}
|
|
|
|
\begin{quote}
|
|
DarkIce as a live audio streamer. It records audio from an audio
|
|
interface (e.g. sound card), encodes it and sends it to a streaming server.
|
|
\end{quote}
|
|
%-------------------------------------------------------------
|
|
\subsection{VLC}
|
|
\index{vlc}
|
|
|
|
|
|
%====================================================================
|
|
\section{libshout}\index{libshout}\label{libshout}
|
|
|
|
Mais c'est quoi ?\index{XXX}
|
|
|
|
|
|
%====================================================================
|
|
|
|
%-------------------------------------------------------------
|
|
|