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