StreamingVideo » Historique » Version 30
Thierry Boudet, 22/05/2014 20:48
+ lien page streaming audio
1 | 1 | Laurent GUERBY | {{>toc}} |
---|---|---|---|
2 | 1 | Laurent GUERBY | |
3 | 1 | Laurent GUERBY | h1. StreamingVideo |
4 | 1 | Laurent GUERBY | |
5 | 5 | Laurent GUERBY | h2. THSF2013 |
6 | 7 | Laurent GUERBY | |
7 | 12 | P.G Bareges | h3. objectif 1 : stream des conference |
8 | 9 | P.G Bareges | |
9 | 12 | P.G Bareges | Montage et acquisition de flux multiple en temps reel en sortie : mosaique 2 camera + un bandeau + bande son |
10 | 9 | P.G Bareges | <pre> |
11 | 9 | P.G Bareges | -cam |
12 | 9 | P.G Bareges | -cam --> traitements -> hdmi/dvi out (1024x768 ?) |
13 | 1 | Laurent GUERBY | -audio -> - - udp - - - encoder -> dump disque |
14 | 1 | Laurent GUERBY | -> vers icecast |
15 | 1 | Laurent GUERBY | |
16 | 9 | P.G Bareges | </pre> |
17 | 9 | P.G Bareges | |
18 | 30 | Thierry Boudet | Voir aussi [[GStreamer]] et [[StreamingAudio]] |
19 | 14 | Laurent GUERBY | |
20 | 15 | P.G Bareges | Finalement solution dvswitch + icecast + 2 dazzle DVC100: |
21 | 15 | P.G Bareges | <pre> |
22 | 15 | P.G Bareges | |
23 | 15 | P.G Bareges | pg@a:~/stream$ cat alsa.sh #enregistre l'audio via alsa |
24 | 15 | P.G Bareges | #!/bin/sh |
25 | 15 | P.G Bareges | dvsource-alsa -h 127.0.0.1 -p 12345 hw:0,0 |
26 | 15 | P.G Bareges | |
27 | 15 | P.G Bareges | |
28 | 15 | P.G Bareges | pg@a:~/stream$ cat run.sh #lance les 2 sources video |
29 | 15 | P.G Bareges | #!/bin/sh |
30 | 15 | P.G Bareges | TITLE=$1 |
31 | 15 | P.G Bareges | |
32 | 15 | P.G Bareges | pkill -9 ffmpeg$ |
33 | 15 | P.G Bareges | sleep 2 |
34 | 15 | P.G Bareges | |
35 | 15 | P.G Bareges | ffmpeg -f video4linux2 -s 640x480 \ |
36 | 15 | P.G Bareges | -vf "movie=/root/re.png [watermark];movie=/root/images/$TITLE.png[watermark2]; [in][watermark] overlay=10:10 [tmp]; [tmp][watermark2] overlay=0:450" \ |
37 | 15 | P.G Bareges | -i /dev/video0 -target pal-dv - | \ |
38 | 15 | P.G Bareges | dvsource-file /dev/stdin -h 127.0.0.1 -p 12345 & |
39 | 15 | P.G Bareges | ffmpeg -f video4linux2 -s 640x480 -i /dev/video1 \ |
40 | 15 | P.G Bareges | -target pal-dv - | dvsource-file /dev/stdin -h 127.0.0.1 -p 12345 & |
41 | 15 | P.G Bareges | |
42 | 15 | P.G Bareges | pg@a:~/stream$ cat wait.sh # a lancer entre les conferences |
43 | 15 | P.G Bareges | #!/bin/sh |
44 | 15 | P.G Bareges | TITLE=$1 |
45 | 15 | P.G Bareges | |
46 | 15 | P.G Bareges | pkill -9 ffmpeg$ |
47 | 15 | P.G Bareges | sleep 2 |
48 | 15 | P.G Bareges | ffmpeg -f video4linux2 -s 640x480 \ |
49 | 15 | P.G Bareges | -vf "movie=/root/images/Wait.png [watermark]; [in][watermark] overlay=0:0" \ |
50 | 15 | P.G Bareges | -i /dev/video0 -target pal-dv - 2>/dev/null | \ |
51 | 15 | P.G Bareges | dvsource-file /dev/stdin -h 127.0.0.1 -p 12345 & |
52 | 15 | P.G Bareges | |
53 | 15 | P.G Bareges | pg@a:~/stream$ cat sendicecast.sh |
54 | 15 | P.G Bareges | #!/bin/sh |
55 | 15 | P.G Bareges | dvsink-command -h 127.0.0.1 -p 12345 -- ffmpeg2theora -i - -f dv -p pro -c 2 -H 48000 -o - | oggfwd 151.216.9.81 8000 uberpassword /live.ogg |
56 | 15 | P.G Bareges | |
57 | 15 | P.G Bareges | </pre> |
58 | 15 | P.G Bareges | |
59 | 15 | P.G Bareges | |
60 | 11 | P.G Bareges | h3. objectif 2 : plusieurs cameras et plateau TV |
61 | 1 | Laurent GUERBY | |
62 | 11 | P.G Bareges | https://pad.tetalab.org/p/regie |
63 | 12 | P.G Bareges | |
64 | 7 | Laurent GUERBY | |
65 | 30 | Thierry Boudet | 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. |
66 | 12 | P.G Bareges | |
67 | 9 | P.G Bareges | |
68 | 9 | P.G Bareges | http://www.openframeworks.cc/ |
69 | 9 | P.G Bareges | https://github.com/angeloseme/ofxRemoteCamera/blob/master/src/ofxRemoteCameraClient.cpp |
70 | 9 | P.G Bareges | http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-udpsrc.html |
71 | 9 | P.G Bareges | http://en.wikipedia.org/wiki/GLSL |
72 | 9 | P.G Bareges | http://freeframe.sourceforge.net/ |
73 | 1 | Laurent GUERBY | |
74 | 15 | P.G Bareges | http://dvswitch.alioth.debian.org/ |
75 | 15 | P.G Bareges | http://www.icecast.org/ |
76 | 9 | P.G Bareges | |
77 | 8 | Laurent GUERBY | h2. Flotube |
78 | 8 | Laurent GUERBY | |
79 | 8 | Laurent GUERBY | Discussion : http://lists.tetalab.org/pipermail/tetaneutral/2013-February/001526.html |
80 | 8 | Laurent GUERBY | |
81 | 8 | Laurent GUERBY | Prototype : http://flomoto.no-ip.org/flotube/ |
82 | 8 | Laurent GUERBY | |
83 | 8 | Laurent GUERBY | P2P streaming : http://torrentfreak.com/open-source-giant-vlc-mulls-bittorrent-support-130211/ |
84 | 8 | Laurent GUERBY | |
85 | 1 | Laurent GUERBY | h2. Solution N7 |
86 | 1 | Laurent GUERBY | |
87 | 1 | Laurent GUERBY | <pre> |
88 | 1 | Laurent GUERBY | From: Antoine Lubineau |
89 | 1 | Laurent GUERBY | To: technique@lists.tetaneutral.net |
90 | 30 | Thierry Boudet | Subject: [technique] Streaming vidéo net7 |
91 | 1 | Laurent GUERBY | Date: Sat, 07 Apr 2012 01:15:55 +0200 |
92 | 1 | Laurent GUERBY | |
93 | 1 | Laurent GUERBY | |
94 | 1 | Laurent GUERBY | Bonsoir, |
95 | 1 | Laurent GUERBY | |
96 | 1 | Laurent GUERBY | Ce mail est un peu dans la suite du mail sur sur la Novela [0]. Comme on |
97 | 30 | Thierry Boudet | fait du streaming vidéo à net7 (club info de l’ENSEEIHT [1]) depuis |
98 | 30 | Thierry Boudet | assez longtemps, ça peut être pas mal d’échanger là-dessus. |
99 | 1 | Laurent GUERBY | |
100 | 30 | Thierry Boudet | — Contexte : plusieurs fois dans l’année, il y a des shows organisés par |
101 | 30 | Thierry Boudet | le club vidéo de l’école et on les diffuse en direct sur Internet. La |
102 | 30 | Thierry Boudet | configuration actuelle tourne depuis environ un an (c’était une |
103 | 30 | Thierry Boudet | acquisition vidéo analogique avant), et on a eu 75 spectateurs |
104 | 30 | Thierry Boudet | simultanés pendant la dernière édition. |
105 | 1 | Laurent GUERBY | |
106 | 30 | Thierry Boudet | — Schéma de principe : |
107 | 1 | Laurent GUERBY | |
108 | 30 | Thierry Boudet | vidéo –––– |
109 | 30 | Thierry Boudet | \__ machine __[réseau ]_ serveur __[Internet]__ client |
110 | 30 | Thierry Boudet | / d’encodage [interne] Icecast web |
111 | 30 | Thierry Boudet | audio ———— |
112 | 1 | Laurent GUERBY | |
113 | 30 | Thierry Boudet | — Machine d’encodage : une carte d’acquisition BlackMagic Design |
114 | 30 | Thierry Boudet | Intensity Pro [2], parce que pas chère et dispose de drivers, d’un SDK |
115 | 30 | Thierry Boudet | et d’utilitaires pour Linux. On utilise l’entrée HDMI pour la vidéo, et |
116 | 30 | Thierry Boudet | une entrée audio analogique. |
117 | 30 | Thierry Boudet | Le processeur est un Core i7-2600K (un peu sous-exploité), et la machine |
118 | 1 | Laurent GUERBY | tourne sous Arch Linux [3]. |
119 | 1 | Laurent GUERBY | |
120 | 30 | Thierry Boudet | Le script qui tourne sur cette machine est sensiblement le suivant : |
121 | 1 | Laurent GUERBY | |
122 | 1 | Laurent GUERBY | bmdcapture -m${INPUT} -F nut -f pipe:1 | ffmpeg -i - -threads 6 \ |
123 | 1 | Laurent GUERBY | -f matroska -preset ultrafast -q 0 -vcodec libx264 -acodec pcm_s16le \ |
124 | 1 | Laurent GUERBY | -y $DUMPFILE & |
125 | 1 | Laurent GUERBY | |
126 | 1 | Laurent GUERBY | sleep 10 |
127 | 1 | Laurent GUERBY | |
128 | 1 | Laurent GUERBY | cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=800, \ |
129 | 1 | Laurent GUERBY | width=720,height=405,threads=2,acodec=vorb,ab=128, \ |
130 | 1 | Laurent GUERBY | channels=2, deinterlace}: \ |
131 | 1 | Laurent GUERBY | duplicate{dst=std{access=file,mux=ogg,dst=$OGVFILE}, \ |
132 | 1 | Laurent GUERBY | dst=std{access=shout,mux=ogg, \ |
133 | 1 | Laurent GUERBY | dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_hd.ogg}}" & |
134 | 1 | Laurent GUERBY | |
135 | 1 | Laurent GUERBY | cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=600, \ |
136 | 1 | Laurent GUERBY | width=320,height=180,threads=2,acodec=vorb,ab=128, \ |
137 | 1 | Laurent GUERBY | channels=2,deinterlace}: \ |
138 | 1 | Laurent GUERBY | std{access=shout,mux=ogg, \ |
139 | 1 | Laurent GUERBY | dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_sd.ogg}" |
140 | 1 | Laurent GUERBY | |
141 | 30 | Thierry Boudet | Pour ceux qui ne sont pas familiers de ffmpeg et VLC : on fait |
142 | 30 | Thierry Boudet | l’acquisition avec bmdcapture [4], qu’on passe directement à ffmpeg, qui |
143 | 30 | Thierry Boudet | lui enregistre un fichier peu compressé sur lequel on pourra |
144 | 1 | Laurent GUERBY | retravailler /a posteriori/. |
145 | 30 | Thierry Boudet | On lance ensuite deux instances de VLC : chacune va lire le MKV produit |
146 | 30 | Thierry Boudet | par ffmpeg. La première réencode (transcode) le flux en 720 × 405, |
147 | 30 | Thierry Boudet | l’enregistre (access=file) et l’envoie au serveur de streaming |
148 | 30 | Thierry Boudet | (access=shout), la seconde ne fait que réencoder en 320 × 180 et |
149 | 30 | Thierry Boudet | l’envoyer au serveur de streaming. |
150 | 1 | Laurent GUERBY | |
151 | 30 | Thierry Boudet | (À noter que depuis sa version 2, VLC a un module decklink qui permet |
152 | 30 | Thierry Boudet | d’acquérir depuis cette carte. On pourrait donc potentiellement tout |
153 | 30 | Thierry Boudet | faire avec VLC, mais on a encore des soucis de stabilité.) |
154 | 1 | Laurent GUERBY | |
155 | 30 | Thierry Boudet | — Serveur de streaming : un serveur Icecast 2 configuré pour prendre les |
156 | 30 | Thierry Boudet | deux sources en entrée. |
157 | 1 | Laurent GUERBY | |
158 | 30 | Thierry Boudet | — Interface web : on utilise Video.js [5], avec un repli sur Cortado [6] |
159 | 30 | Thierry Boudet | quand le navigateur n’est pas coopératif. |
160 | 1 | Laurent GUERBY | |
161 | 30 | Thierry Boudet | Je pense que j’ai fait le tour de l’installation. Si vous avez des |
162 | 30 | Thierry Boudet | remarques, des questions, des suggestions… allez-y ! ;) |
163 | 1 | Laurent GUERBY | |
164 | 1 | Laurent GUERBY | Antoine |
165 | 1 | Laurent GUERBY | </pre> |
166 | 1 | Laurent GUERBY | |
167 | 1 | Laurent GUERBY | [0] http://lists.tetalab.org/pipermail/tetaneutral/2012-March/000865.html |
168 | 1 | Laurent GUERBY | [1] http://net7.bde.enseeiht.fr/ |
169 | 1 | Laurent GUERBY | [2] http://www.blackmagic-design.com/products/intensity/models/ |
170 | 1 | Laurent GUERBY | [3] http://www.archlinux.org/ |
171 | 1 | Laurent GUERBY | [4] https://github.com/lu-zero/decklink-ffmpeg |
172 | 1 | Laurent GUERBY | [5] http://videojs.com/ |
173 | 1 | Laurent GUERBY | [6] http://www.flumotion.net/cortado/ |
174 | 2 | Laurent GUERBY | |
175 | 2 | Laurent GUERBY | h2. Questions N7 |
176 | 2 | Laurent GUERBY | |
177 | 30 | Thierry Boudet | # Quelle est la latence entre une image et sa retransmission aux différentes étapes ? Est-ce qu'elle vient du "sleep 10" ? |
178 | 2 | Laurent GUERBY | # Autre ? |
179 | 3 | Mehdi Abaakouk | |
180 | 30 | Thierry Boudet | h2. Version N7 modifié par sileht |
181 | 3 | Mehdi Abaakouk | |
182 | 4 | Mehdi Abaakouk | <pre> |
183 | 3 | Mehdi Abaakouk | SOUT='#duplicate{ |
184 | 3 | Mehdi Abaakouk | dst="transcode{ |
185 | 3 | Mehdi Abaakouk | vcodec=h264,venc=x264{ultrafast},acodec=s16l,threads=6 |
186 | 3 | Mehdi Abaakouk | }:std{ |
187 | 3 | Mehdi Abaakouk | access=file,mux=mkv,dst='$MKVFILE' |
188 | 3 | Mehdi Abaakouk | }", |
189 | 3 | Mehdi Abaakouk | dst="transcode{ |
190 | 3 | Mehdi Abaakouk | fps=24,vcodec=theo,vb=800,width=720,height=405,threads=2,acodec=vorb,ab=128,channels=2,deinterlace |
191 | 3 | Mehdi Abaakouk | }:duplicate{ |
192 | 3 | Mehdi Abaakouk | dst=std{access=file,mux=ogg,dst='$OGVFILE'}, |
193 | 3 | Mehdi Abaakouk | dst=std{access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_hd.ogg} |
194 | 3 | Mehdi Abaakouk | }", |
195 | 3 | Mehdi Abaakouk | dst="transcode{ |
196 | 3 | Mehdi Abaakouk | fps=24,vcodec=theo,vb=600,width=320,height=180,threads=2,acodec=vorb,ab=128,channels=2,deinterlace |
197 | 3 | Mehdi Abaakouk | }:std{ |
198 | 3 | Mehdi Abaakouk | access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_sd.ogg |
199 | 3 | Mehdi Abaakouk | }" |
200 | 3 | Mehdi Abaakouk | }' |
201 | 3 | Mehdi Abaakouk | |
202 | 3 | Mehdi Abaakouk | # Remove space |
203 | 3 | Mehdi Abaakouk | SOUT=$(echo $SOUT | sed 's/ //g' ) |
204 | 3 | Mehdi Abaakouk | |
205 | 1 | Laurent GUERBY | bmdcapture -m${INPUT} -F nut -f pipe:1 | cvlc - --sout "$SOUT" "$@" |
206 | 4 | Mehdi Abaakouk | </pre> |
207 | 3 | Mehdi Abaakouk | |
208 | 3 | Mehdi Abaakouk | NB: |
209 | 3 | Mehdi Abaakouk | |
210 | 3 | Mehdi Abaakouk | Sous debian ou ubuntu: |
211 | 30 | Thierry Boudet | 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) |
212 | 30 | Thierry Boudet | pour que vlc puisse utilise libavcodec (ie:ffmpeg) correctement, il faut bien installer les dépots medibuntu ou debian multimedia |
213 | 6 | Élie Bouttier | |
214 | 30 | Thierry Boudet | h2. Nouvelle version de l’N7, basé sur les modifications de sileht, et objectif futur |
215 | 6 | Élie Bouttier | |
216 | 6 | Élie Bouttier | h3. Nouvelle version |
217 | 6 | Élie Bouttier | |
218 | 30 | Thierry Boudet | À venir … |
219 | 6 | Élie Bouttier | |
220 | 6 | Élie Bouttier | h3. Objectifs futurs |
221 | 6 | Élie Bouttier | |
222 | 30 | Thierry Boudet | 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) : |
223 | 6 | Élie Bouttier | * VP80 + vorbis (voir opus) dans du webm, pour les navigateurs html5; |
224 | 1 | Laurent GUERBY | * h264 + mp3 dans du mp4, lu en flash pour les navigateurs non html5. |
225 | 30 | Thierry Boudet | Il faudra alors utiliser la dernière version de icecast, celle dans les dépots de squeeze ne supportant pas le webm. |
226 | 30 | Thierry Boudet | 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 :) |
227 | 1 | Laurent GUERBY | |
228 | 6 | Élie Bouttier | |
229 | 6 | Élie Bouttier | |
230 | 11 | P.G Bareges | |
231 | 11 | P.G Bareges | h2. Liens |
232 | 11 | P.G Bareges | |
233 | 11 | P.G Bareges | http://blog.sesse.net/blog/tech/TG/2012-05-12-22-03_tcp_optimization_for_video_streaming |
234 | 13 | Laurent GUERBY | |
235 | 13 | Laurent GUERBY | How To Stream Live Audio from your Mic in Real Time http://ubuntuforums.org/showthread.php?t=1544946 |