StreamingVideo » Historique » Version 14
Version 13 (Laurent GUERBY, 23/02/2013 09:13) → Version 14/32 (Laurent GUERBY, 04/03/2013 13:36)
{{>toc}}
h1. StreamingVideo
h2. THSF2013
h3. objectif 1 : stream des conference
Montage et acquisition de flux multiple en temps reel en sortie : mosaique 2 camera + un bandeau + bande son
<pre>
-cam
-cam --> traitements -> hdmi/dvi out (1024x768 ?)
-audio -> - - udp - - - encoder -> dump disque
-> vers icecast
</pre>
Voir aussi [[GStreamer]]
h3. objectif 2 : plusieurs cameras et plateau TV
https://pad.tetalab.org/p/regie
dans les 2 cas l'idée est de pouvoir traiter l'image en amont avec openframeworks/processing/glsl/ffgl et intégrer ca dans un "workflow" user friendly.
http://www.openframeworks.cc/
https://github.com/angeloseme/ofxRemoteCamera/blob/master/src/ofxRemoteCameraClient.cpp
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-udpsrc.html
http://en.wikipedia.org/wiki/GLSL
http://freeframe.sourceforge.net/
h2. Flotube
Discussion : http://lists.tetalab.org/pipermail/tetaneutral/2013-February/001526.html
Prototype : http://flomoto.no-ip.org/flotube/
P2P streaming : http://torrentfreak.com/open-source-giant-vlc-mulls-bittorrent-support-130211/
h2. Solution N7
<pre>
From: Antoine Lubineau
To: technique@lists.tetaneutral.net
Subject: [technique] Streaming vidéo net7
Date: Sat, 07 Apr 2012 01:15:55 +0200
Bonsoir,
Ce mail est un peu dans la suite du mail sur sur la Novela [0]. Comme on
fait du streaming vidéo à net7 (club info de lâENSEEIHT [1]) depuis
assez longtemps, ça peut être pas mal dâéchanger là -dessus.
â Contexteâ¯: plusieurs fois dans lâannée, il y a des shows organisés par
le club vidéo de lâécole et on les diffuse en direct sur Internet. La
configuration actuelle tourne depuis environ un an (câétait une
acquisition vidéo analogique avant), et on a eu 75 spectateurs
simultanés pendant la dernière édition.
â Schéma de principeâ¯:
vidéo ââââ
\__ machine __[réseau ]_ serveur __[Internet]__ client
/ dâencodage [interne] Icecast web
audio ââââ
â Machine dâencodageâ¯: une carte dâacquisition BlackMagic Design
Intensity Pro [2], parce que pas chère et dispose de drivers, dâun SDK
et dâutilitaires pour Linux. On utilise lâentrée HDMI pour la vidéo, et
une entrée audio analogique.
Le processeur est un Core i7-2600K (un peu sous-exploité), et la machine
tourne sous Arch Linux [3].
Le script qui tourne sur cette machine est sensiblement le suivantâ¯:
bmdcapture -m${INPUT} -F nut -f pipe:1 | ffmpeg -i - -threads 6 \
-f matroska -preset ultrafast -q 0 -vcodec libx264 -acodec pcm_s16le \
-y $DUMPFILE &
sleep 10
cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=800, \
width=720,height=405,threads=2,acodec=vorb,ab=128, \
channels=2, deinterlace}: \
duplicate{dst=std{access=file,mux=ogg,dst=$OGVFILE}, \
dst=std{access=shout,mux=ogg, \
dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_hd.ogg}}" &
cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=600, \
width=320,height=180,threads=2,acodec=vorb,ab=128, \
channels=2,deinterlace}: \
std{access=shout,mux=ogg, \
dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_sd.ogg}"
Pour ceux qui ne sont pas familiers de ffmpeg et VLCâ¯: on fait
lâacquisition avec bmdcapture [4], quâon passe directement à ffmpeg, qui
lui enregistre un fichier peu compressé sur lequel on pourra
retravailler /a posteriori/.
On lance ensuite deux instances de VLCâ¯: chacune va lire le MKV produit
par ffmpeg. La première réencode (transcode) le flux en 720â¯Ãâ¯405,
lâenregistre (access=file) et lâenvoie au serveur de streaming
(access=shout), la seconde ne fait que réencoder en 320â¯Ãâ¯180 et
lâenvoyer au serveur de streaming.
(Ã noter que depuis sa version 2, VLC a un module decklink qui permet
dâacquérir depuis cette carte. On pourrait donc potentiellement tout
faire avec VLC, mais on a encore des soucis de stabilité.)
â Serveur de streamingâ¯: un serveur Icecast 2 configuré pour prendre les
deux sources en entrée.
â Interface webâ¯: on utilise Video.js [5], avec un repli sur Cortado [6]
quand le navigateur nâest pas coopératif.
Je pense que jâai fait le tour de lâinstallation. Si vous avez des
remarques, des questions, des suggestions⦠allez-yâ¯! ;)
Antoine
</pre>
[0] http://lists.tetalab.org/pipermail/tetaneutral/2012-March/000865.html
[1] http://net7.bde.enseeiht.fr/
[2] http://www.blackmagic-design.com/products/intensity/models/
[3] http://www.archlinux.org/
[4] https://github.com/lu-zero/decklink-ffmpeg
[5] http://videojs.com/
[6] http://www.flumotion.net/cortado/
h2. Questions N7
# Quelle est la latence entre une image et sa retransmission aux différentes étapes ? Est-ce qu'elle vient du "sleep 10" ?
# Autre ?
h2. Version N7 modifié par sileht
<pre>
SOUT='#duplicate{
dst="transcode{
vcodec=h264,venc=x264{ultrafast},acodec=s16l,threads=6
}:std{
access=file,mux=mkv,dst='$MKVFILE'
}",
dst="transcode{
fps=24,vcodec=theo,vb=800,width=720,height=405,threads=2,acodec=vorb,ab=128,channels=2,deinterlace
}:duplicate{
dst=std{access=file,mux=ogg,dst='$OGVFILE'},
dst=std{access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_hd.ogg}
}",
dst="transcode{
fps=24,vcodec=theo,vb=600,width=320,height=180,threads=2,acodec=vorb,ab=128,channels=2,deinterlace
}:std{
access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_sd.ogg
}"
}'
# Remove space
SOUT=$(echo $SOUT | sed 's/ //g' )
bmdcapture -m${INPUT} -F nut -f pipe:1 | cvlc - --sout "$SOUT" "$@"
</pre>
NB:
Sous debian ou ubuntu:
Par défaut, vlc n'est pas autorisé à charger cette bibliothèque (y'a un problème de license dans certain cas, c'est pour ca que c'est pas intégrer par défaut)
pour que vlc puisse utilise libavcodec (ie:ffmpeg) correctement, il faut bien installer les dépots medibuntu ou debian multimedia
h2. Nouvelle version de lâN7, basé sur les modifications de sileht, et objectif futur
h3. Nouvelle version
à venir â¦
h3. Objectifs futurs
Toujours utiliser video.js pour la lecture, mais changer le format de diffusion. Nous voudrions proposer au lieu de du theora + vorbis dans du ogg (le theora étant plutôt moche, surtout dès quâil y a du mouvement), deux formats au choix (video.js sâoccupant du choix suivant les possibilitées du navigateur) :
* VP80 + vorbis (voir opus) dans du webm, pour les navigateurs html5;
* h264 + mp3 dans du mp4, lu en flash pour les navigateurs non html5.
Il faudra alors utiliser la dernière version de icecast, celle dans les dépots de squeeze ne supportant pas le webm.
Lâutilisation de ces formats nous a été conseillé par JB. Kampf (Président de videolan) alors on espère avoir de bon résultat :)
h2. Liens
http://blog.sesse.net/blog/tech/TG/2012-05-12-22-03_tcp_optimization_for_video_streaming
How To Stream Live Audio from your Mic in Real Time http://ubuntuforums.org/showthread.php?t=1544946
h1. StreamingVideo
h2. THSF2013
h3. objectif 1 : stream des conference
Montage et acquisition de flux multiple en temps reel en sortie : mosaique 2 camera + un bandeau + bande son
<pre>
-cam
-cam --> traitements -> hdmi/dvi out (1024x768 ?)
-audio -> - - udp - - - encoder -> dump disque
-> vers icecast
</pre>
Voir aussi [[GStreamer]]
h3. objectif 2 : plusieurs cameras et plateau TV
https://pad.tetalab.org/p/regie
dans les 2 cas l'idée est de pouvoir traiter l'image en amont avec openframeworks/processing/glsl/ffgl et intégrer ca dans un "workflow" user friendly.
http://www.openframeworks.cc/
https://github.com/angeloseme/ofxRemoteCamera/blob/master/src/ofxRemoteCameraClient.cpp
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-udpsrc.html
http://en.wikipedia.org/wiki/GLSL
http://freeframe.sourceforge.net/
h2. Flotube
Discussion : http://lists.tetalab.org/pipermail/tetaneutral/2013-February/001526.html
Prototype : http://flomoto.no-ip.org/flotube/
P2P streaming : http://torrentfreak.com/open-source-giant-vlc-mulls-bittorrent-support-130211/
h2. Solution N7
<pre>
From: Antoine Lubineau
To: technique@lists.tetaneutral.net
Subject: [technique] Streaming vidéo net7
Date: Sat, 07 Apr 2012 01:15:55 +0200
Bonsoir,
Ce mail est un peu dans la suite du mail sur sur la Novela [0]. Comme on
fait du streaming vidéo à net7 (club info de lâENSEEIHT [1]) depuis
assez longtemps, ça peut être pas mal dâéchanger là -dessus.
â Contexteâ¯: plusieurs fois dans lâannée, il y a des shows organisés par
le club vidéo de lâécole et on les diffuse en direct sur Internet. La
configuration actuelle tourne depuis environ un an (câétait une
acquisition vidéo analogique avant), et on a eu 75 spectateurs
simultanés pendant la dernière édition.
â Schéma de principeâ¯:
vidéo ââââ
\__ machine __[réseau ]_ serveur __[Internet]__ client
/ dâencodage [interne] Icecast web
audio ââââ
â Machine dâencodageâ¯: une carte dâacquisition BlackMagic Design
Intensity Pro [2], parce que pas chère et dispose de drivers, dâun SDK
et dâutilitaires pour Linux. On utilise lâentrée HDMI pour la vidéo, et
une entrée audio analogique.
Le processeur est un Core i7-2600K (un peu sous-exploité), et la machine
tourne sous Arch Linux [3].
Le script qui tourne sur cette machine est sensiblement le suivantâ¯:
bmdcapture -m${INPUT} -F nut -f pipe:1 | ffmpeg -i - -threads 6 \
-f matroska -preset ultrafast -q 0 -vcodec libx264 -acodec pcm_s16le \
-y $DUMPFILE &
sleep 10
cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=800, \
width=720,height=405,threads=2,acodec=vorb,ab=128, \
channels=2, deinterlace}: \
duplicate{dst=std{access=file,mux=ogg,dst=$OGVFILE}, \
dst=std{access=shout,mux=ogg, \
dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_hd.ogg}}" &
cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=600, \
width=320,height=180,threads=2,acodec=vorb,ab=128, \
channels=2,deinterlace}: \
std{access=shout,mux=ogg, \
dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_sd.ogg}"
Pour ceux qui ne sont pas familiers de ffmpeg et VLCâ¯: on fait
lâacquisition avec bmdcapture [4], quâon passe directement à ffmpeg, qui
lui enregistre un fichier peu compressé sur lequel on pourra
retravailler /a posteriori/.
On lance ensuite deux instances de VLCâ¯: chacune va lire le MKV produit
par ffmpeg. La première réencode (transcode) le flux en 720â¯Ãâ¯405,
lâenregistre (access=file) et lâenvoie au serveur de streaming
(access=shout), la seconde ne fait que réencoder en 320â¯Ãâ¯180 et
lâenvoyer au serveur de streaming.
(Ã noter que depuis sa version 2, VLC a un module decklink qui permet
dâacquérir depuis cette carte. On pourrait donc potentiellement tout
faire avec VLC, mais on a encore des soucis de stabilité.)
â Serveur de streamingâ¯: un serveur Icecast 2 configuré pour prendre les
deux sources en entrée.
â Interface webâ¯: on utilise Video.js [5], avec un repli sur Cortado [6]
quand le navigateur nâest pas coopératif.
Je pense que jâai fait le tour de lâinstallation. Si vous avez des
remarques, des questions, des suggestions⦠allez-yâ¯! ;)
Antoine
</pre>
[0] http://lists.tetalab.org/pipermail/tetaneutral/2012-March/000865.html
[1] http://net7.bde.enseeiht.fr/
[2] http://www.blackmagic-design.com/products/intensity/models/
[3] http://www.archlinux.org/
[4] https://github.com/lu-zero/decklink-ffmpeg
[5] http://videojs.com/
[6] http://www.flumotion.net/cortado/
h2. Questions N7
# Quelle est la latence entre une image et sa retransmission aux différentes étapes ? Est-ce qu'elle vient du "sleep 10" ?
# Autre ?
h2. Version N7 modifié par sileht
<pre>
SOUT='#duplicate{
dst="transcode{
vcodec=h264,venc=x264{ultrafast},acodec=s16l,threads=6
}:std{
access=file,mux=mkv,dst='$MKVFILE'
}",
dst="transcode{
fps=24,vcodec=theo,vb=800,width=720,height=405,threads=2,acodec=vorb,ab=128,channels=2,deinterlace
}:duplicate{
dst=std{access=file,mux=ogg,dst='$OGVFILE'},
dst=std{access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_hd.ogg}
}",
dst="transcode{
fps=24,vcodec=theo,vb=600,width=320,height=180,threads=2,acodec=vorb,ab=128,channels=2,deinterlace
}:std{
access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_sd.ogg
}"
}'
# Remove space
SOUT=$(echo $SOUT | sed 's/ //g' )
bmdcapture -m${INPUT} -F nut -f pipe:1 | cvlc - --sout "$SOUT" "$@"
</pre>
NB:
Sous debian ou ubuntu:
Par défaut, vlc n'est pas autorisé à charger cette bibliothèque (y'a un problème de license dans certain cas, c'est pour ca que c'est pas intégrer par défaut)
pour que vlc puisse utilise libavcodec (ie:ffmpeg) correctement, il faut bien installer les dépots medibuntu ou debian multimedia
h2. Nouvelle version de lâN7, basé sur les modifications de sileht, et objectif futur
h3. Nouvelle version
à venir â¦
h3. Objectifs futurs
Toujours utiliser video.js pour la lecture, mais changer le format de diffusion. Nous voudrions proposer au lieu de du theora + vorbis dans du ogg (le theora étant plutôt moche, surtout dès quâil y a du mouvement), deux formats au choix (video.js sâoccupant du choix suivant les possibilitées du navigateur) :
* VP80 + vorbis (voir opus) dans du webm, pour les navigateurs html5;
* h264 + mp3 dans du mp4, lu en flash pour les navigateurs non html5.
Il faudra alors utiliser la dernière version de icecast, celle dans les dépots de squeeze ne supportant pas le webm.
Lâutilisation de ces formats nous a été conseillé par JB. Kampf (Président de videolan) alors on espère avoir de bon résultat :)
h2. Liens
http://blog.sesse.net/blog/tech/TG/2012-05-12-22-03_tcp_optimization_for_video_streaming
How To Stream Live Audio from your Mic in Real Time http://ubuntuforums.org/showthread.php?t=1544946