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